Das hier ist die Abfrage
Code: Alles auswählen
SELECT "TP".* FROM "TP" AS "TP", "Stadklasse" AS "Stadklasse" WHERE "TP"."Gebiet" = "Stadklasse"."Stadtname" AND "Stadklasse"."Klasse" = :Klasse ORDER BY "TP"."Gebiet" ASC, "TP"."Lokal" ASC
Moderator: Moderatoren
Code: Alles auswählen
SELECT "TP".* FROM "TP" AS "TP", "Stadklasse" AS "Stadklasse" WHERE "TP"."Gebiet" = "Stadklasse"."Stadtname" AND "Stadklasse"."Klasse" = :Klasse ORDER BY "TP"."Gebiet" ASC, "TP"."Lokal" ASC
Danke,gogo hat geschrieben:lass mich raten: der Parameter ist ':Klasse' ?
egal welchen Datentyp und Wert der Parameter hat, Du musst ihn für die Abfrage in einen String umwandeln, und diesen dann korrekt in den String Deiner Abfrage einbauen.
Also:
zuerst (wie auch immer) auf den über die Listbox erhaltenen Wert zugreifen,
diesen dann in Deiner Abfrage einbauen, so dass der entstehende String eine korrekte SQL-Abfrage für Deine Datenbank ist ("Stadklasse"."Klasse" = """ & StringWert & """ ) oder ("Stadklasse"."Klasse" = '" & StringWert & "') oder ("Stadklasse"."Klasse" = " & StringWert & ") oder ...
Nun hättest Du den korrekten String.
Mir ist aber nicht klar was Du mit diesem dann machst!
g
Code: Alles auswählen
TP = "(SELECT "TP".* FROM "TP" AS "TP", "Stadklasse" AS "Stadklasse" WHERE "TP"."Gebiet" = "Stadklasse"."Stadtname" AND "Stadklasse"."Klasse" = " & StringListenWert & " ORDER BY "TP"."Gebiet" ASC, "TP"."Lokal" ASC)"
Code: Alles auswählen
Sub Liste
oDialog = createUnoDialog(DialogLibraries.Standard.StdDialog)
oDialog.execute()
oListBox = oDialog.getControl("ListBox1")
If oListBox.SelectedItem = "Alle" Then
Call Start
Else
'Hier dann die entsprechenden anderen Abfragen, wenn sie von den Standartabfragen abweichen
msgbox "Bis jetzt nur Alle Möglich", 0, "BETA!"
'Stadklasse Ende
End If
End Sub
... beschreibt genau was Du tun musst, Du müsstest aber ganz oben bei http://www.ooowiki.de/BaseApi#StarBasic losstarten falls Du noch keine Verbindung zur Datenbank hast. "Abfrageergebnis = SQL_Anweisung.executeQuery(Sql)" ergibt einen Fehler weil "SQL_Anweisung" in deinem Makro ja noch nicht bekannt ist.Schau mal unter http://www.ooowiki.de/BaseApi#SQL-Abfra ... 2BAPw-hren nach. Dort wird dies schrittweise erklärt.
Nein, das geht nicht.MikeRo hat geschrieben:(...)oder kann ich einfach eine Parameterabfrage in der Basedatei erstellen und dann im Makro einfach den Parameter direkt an die Abfrage übergeben, wenn ich diese Aufrufe?
Aussagen dieser Art sind nicht sonderlich hilfreich.MikeRo hat geschrieben:(...)mache, bekomme ich einen Fehler.
Code: Alles auswählen
TP = "(SELECT "TP".* FROM "TP" AS "TP", "Stadklasse" AS "Stadklasse" WHERE "TP"."Gebiet" = "Stadklasse"."Stadtname" AND "Stadklasse"."Klasse" = " & StringListenWert & " ORDER BY "TP"."Gebiet" ASC, "TP"."Lokal" ASC)"
Code: Alles auswählen
TP = "(SELECT ""TP"".* FROM ""TP"" AS ""TP"", ""Stadklasse"" AS ""Stadklasse"" WHERE ""TP"".""Gebiet"" = ""Stadklasse"".""Stadtname"" AND ""Stadklasse"".""Klasse"" = " & StringListenWert & " ORDER BY ""TP"".""Gebiet"" ASC, ""TP"".""Lokal"" ASC)"
Code: Alles auswählen
(...)""Stadklasse"".""Klasse"" = '" & StringListenWert & "' ORDER BY(...)
Vielen Lieben Dank! Ich werde es ausprobieren!DPunch hat geschrieben:Aloha
Nein, das geht nicht.MikeRo hat geschrieben:(...)oder kann ich einfach eine Parameterabfrage in der Basedatei erstellen und dann im Makro einfach den Parameter direkt an die Abfrage übergeben, wenn ich diese Aufrufe?
Aussagen dieser Art sind nicht sonderlich hilfreich.MikeRo hat geschrieben:(...)mache, bekomme ich einen Fehler.
Ich behaupte, dass OpenOffice nicht einfach ein Popup erscheinen lässt, in dem nichts ausser "Fehler" steht.
Auf den ersten Blick kann ich Dir allerdings sagen, dassnicht funktionieren kann, weil Du die Anführungszeichen innerhalb des Strings nicht maskierst - dies tust Du mit zwei aufeinanderfolgenden AnführungszeichenCode: Alles auswählen
TP = "(SELECT "TP".* FROM "TP" AS "TP", "Stadklasse" AS "Stadklasse" WHERE "TP"."Gebiet" = "Stadklasse"."Stadtname" AND "Stadklasse"."Klasse" = " & StringListenWert & " ORDER BY "TP"."Gebiet" ASC, "TP"."Lokal" ASC)"
Zudem ist die Art und Weise, wie Du die Variable StringListenWert einbindest potenziell fehlerbehaftet. Wenn es ein numerischer Wert ist, ist alles ok, wenn es allerdings ein String ist, wie der Name vermuten lässt, musst Du dies der Datenbank auch klar machen - dies tust Du mit HochkommataCode: Alles auswählen
TP = "(SELECT ""TP"".* FROM ""TP"" AS ""TP"", ""Stadklasse"" AS ""Stadklasse"" WHERE ""TP"".""Gebiet"" = ""Stadklasse"".""Stadtname"" AND ""Stadklasse"".""Klasse"" = " & StringListenWert & " ORDER BY ""TP"".""Gebiet"" ASC, ""TP"".""Lokal"" ASC)"
Code: Alles auswählen
(...)""Stadklasse"".""Klasse"" = '" & StringListenWert & "' ORDER BY(...)
Das sollte eigentlich kein Problem sein.MikeRo hat geschrieben:ch denke das Problem ist, das ich über die Abfrage auf Abfragen in der Base Datei zugreife und nicht auf Tabellen
Ich weiss ehrlich gesagt nicht, was Du damit meinst.MikeRo hat geschrieben:kann man das irgendwie einbauen das er die Abfragen als "Tabellen" Nimmt?
Ich habe es bereits gelöstDPunch hat geschrieben:Aloha
Das sollte eigentlich kein Problem sein.MikeRo hat geschrieben:ch denke das Problem ist, das ich über die Abfrage auf Abfragen in der Base Datei zugreife und nicht auf Tabellen
Ich weiss ehrlich gesagt nicht, was Du damit meinst.MikeRo hat geschrieben:kann man das irgendwie einbauen das er die Abfragen als "Tabellen" Nimmt?
Mit der Fehlermeldung kann ich im Moment auch nichts anfangen.
Vielleicht solltest Du nochmal den kompletten Code posten.
Versuch mal, perMikeRo hat geschrieben:Man kann aber jeden dieser Schritte sehen.
Code: Alles auswählen
oDoc.lockControllers
Code: Alles auswählen
oDoc.unlockControllers
Normalerweise solltest Du alle möglichen Fehler direkt per entsprechenden logischen Abfragen in Deinem Quellcode abfangen - ansonsten auch hier: FAQ: Wie kann man Fehler abfangen?MikeRo hat geschrieben:was auch gut wäre, wäre wenn bei Fehlern nicht in den Quelltext gesprungen wird...
DPunch hat geschrieben:Aloha
Versuch mal, perMikeRo hat geschrieben:Man kann aber jeden dieser Schritte sehen.die Controller zu blockieren, bevor Du irgendwelche Operationen in dem Dokument vornimmst.Code: Alles auswählen
oDoc.lockControllers
Ans Ende des Codes muss dann noch einDas bewirkt zwar nicht, dass das Dokument unsichtbar bzw. im Hintergrund bearbeitet wird, aber zumindest wirst Du die einzelnen Schritte nicht mehr sehen (und es sollte nebenbei auch noch einen deutlichen Geschwindigkeitszuwachs geben).Code: Alles auswählen
oDoc.unlockControllers
Die andere Möglichkeit wäre, das Dokument tatsächlich versteckt zu öffnen und zu bearbeiten, dazu siehe FAQ: Wie kann man ein Dokument versteckt öffnen?.
Normalerweise solltest Du alle möglichen Fehler direkt per entsprechenden logischen Abfragen in Deinem Quellcode abfangen - ansonsten auch hier: FAQ: Wie kann man Fehler abfangen?MikeRo hat geschrieben:was auch gut wäre, wäre wenn bei Fehlern nicht in den Quelltext gesprungen wird...