Base Datenbankabfrage in Basic Makro?

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Base Datenbankabfrage in Basic Makro?

Re: Base Datenbankabfrage in Basic Makro?

von MikeRo » Mi, 23.02.2011 11:28

DPunch hat geschrieben:Aloha
MikeRo hat geschrieben:Man kann aber jeden dieser Schritte sehen.
Versuch mal, per

Code: Alles auswählen

oDoc.lockControllers
die Controller zu blockieren, bevor Du irgendwelche Operationen in dem Dokument vornimmst.
Ans Ende des Codes muss dann noch ein

Code: Alles auswählen

oDoc.unlockControllers
Das 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).
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?.
MikeRo hat geschrieben:was auch gut wäre, wäre wenn bei Fehlern nicht in den Quelltext gesprungen wird...
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?

Vielen Dank für deine Hilfe!

oDoc.lockControllers
Hat mir eine erhebliche Geschwindigkeit Steigerung gebracht.
Ich kann zwar jetzt das Dokument versteckt öffnen und bearbeiten. Allerdings muss es ja am ende wieder sichtbar werden^^
Und das mit den Fehlern klappt auch gut, die meisten habe ich ja schon abgefangen.

Re: Base Datenbankabfrage in Basic Makro?

von DPunch » Di, 22.02.2011 18:09

Aloha
MikeRo hat geschrieben:Man kann aber jeden dieser Schritte sehen.
Versuch mal, per

Code: Alles auswählen

oDoc.lockControllers
die Controller zu blockieren, bevor Du irgendwelche Operationen in dem Dokument vornimmst.
Ans Ende des Codes muss dann noch ein

Code: Alles auswählen

oDoc.unlockControllers
Das 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).
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?.
MikeRo hat geschrieben:was auch gut wäre, wäre wenn bei Fehlern nicht in den Quelltext gesprungen wird...
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?

Re: Base Datenbankabfrage in Basic Makro?

von MikeRo » Di, 22.02.2011 15:22

Ich habe aber eine andere Frage. (oder soll ich lieber ein eigenes Thema erstellen)

Ich habe dieses Makro Programmiert. und es wird über ein Dialog gestartet. Und sobald der Startknopf gedrückt wird. passieren alle schritte sichtbar. (Aufrufen Der Vorlage, Export der Daten, Formatieren der Daten, Teilergebnisse ausführen, Ergebnisse anpassen und Formeln einsetzen) Man kann aber jeden dieser Schritte sehen. kann das alles nicht im Hintergrund ablaufen und ich mache im Dialog selbst einfach einen Fortschrittsbalken und wenn das Dokument fertig ist, wird es erst angezeigt, was auch gut wäre, wäre wenn bei Fehlern nicht in den Quelltext gesprungen wird...

Re: Base Datenbankabfrage in Basic Makro?

von MikeRo » Di, 22.02.2011 15:16

DPunch hat geschrieben:Aloha
MikeRo hat geschrieben:ch denke das Problem ist, das ich über die Abfrage auf Abfragen in der Base Datei zugreife und nicht auf Tabellen
Das sollte eigentlich kein Problem sein.
MikeRo hat geschrieben:kann man das irgendwie einbauen das er die Abfragen als "Tabellen" Nimmt?
Ich weiss ehrlich gesagt nicht, was Du damit meinst.

Mit der Fehlermeldung kann ich im Moment auch nichts anfangen.
Vielleicht solltest Du nochmal den kompletten Code posten.
Ich habe es bereits gelöst :) Ich habe die Abfragen komplett in das Makro eingearbeitet und somit, wird nun alles vom Makro abgearbeitet. Das ist inzwischen auch sehr sehr mächtig geworden.

Re: Base Datenbankabfrage in Basic Makro?

von DPunch » Di, 22.02.2011 14:03

Aloha
MikeRo hat geschrieben:ch denke das Problem ist, das ich über die Abfrage auf Abfragen in der Base Datei zugreife und nicht auf Tabellen
Das sollte eigentlich kein Problem sein.
MikeRo hat geschrieben:kann man das irgendwie einbauen das er die Abfragen als "Tabellen" Nimmt?
Ich weiss ehrlich gesagt nicht, was Du damit meinst.

Mit der Fehlermeldung kann ich im Moment auch nichts anfangen.
Vielleicht solltest Du nochmal den kompletten Code posten.

Re: Base Datenbankabfrage in Basic Makro?

von MikeRo » Di, 22.02.2011 12:56

Jetzt habe ich noch ein neues Problem.

Wenn ich die Abfrage ausführe, kommt die Fehlermeldung

"Relation TP does not exists"

Ich denke das Problem ist, das ich über die Abfrage auf Abfragen in der Base Datei zugreife und nicht auf Tabellen, kann man das irgendwie einbauen das er die Abfragen als "Tabellen" Nimmt? Oder muss ich die gesamte Abfrage neu erstellen

Re: Base Datenbankabfrage in Basic Makro?

von MikeRo » Do, 17.02.2011 10:44

DPunch hat geschrieben:Aloha
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?
Nein, das geht nicht.
MikeRo hat geschrieben:(...)mache, bekomme ich einen Fehler.
Aussagen dieser Art sind nicht sonderlich hilfreich.
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, dass

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)"
nicht funktionieren kann, weil Du die Anführungszeichen innerhalb des Strings nicht maskierst - dies tust Du mit zwei aufeinanderfolgenden Anführungszeichen

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)"
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 Hochkommata

Code: Alles auswählen

(...)""Stadklasse"".""Klasse"" = '" & StringListenWert & "' ORDER BY(...)
Vielen Lieben Dank! Ich werde es ausprobieren!
Und in Zukunft werde ich bei der Fehlerbeschreibung genauer sein ;-)

Lg

Re: Base Datenbankabfrage in Basic Makro?

von DPunch » Do, 17.02.2011 08:11

Aloha
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?
Nein, das geht nicht.
MikeRo hat geschrieben:(...)mache, bekomme ich einen Fehler.
Aussagen dieser Art sind nicht sonderlich hilfreich.
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, dass

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)"
nicht funktionieren kann, weil Du die Anführungszeichen innerhalb des Strings nicht maskierst - dies tust Du mit zwei aufeinanderfolgenden Anführungszeichen

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)"
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 Hochkommata

Code: Alles auswählen

(...)""Stadklasse"".""Klasse"" = '" & StringListenWert & "' ORDER BY(...)

Re: Base Datenbankabfrage in Basic Makro?

von gogo » Mi, 16.02.2011 18:31

Schau mal unter http://www.ooowiki.de/BaseApi#SQL-Abfra ... 2BAPw-hren nach. Dort wird dies schrittweise erklärt.
... 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.

In dem Tutorial steht auch wie Du das "Abfrageergebnis" auswerten kannst.

Übrigens: ich habe selbst noch nicht damit gearbeitet, aber eine Listbox hat auch die Methode .getSelectetItems. Wenn Du die auslesen kannst, dann erübrigt sich die zweite Abfrage! (viewtopic.php?f=18&t=1586)

g

Re: Base Datenbankabfrage in Basic Makro?

von MikeRo » Mi, 16.02.2011 17:52

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
Danke,

ich habe einen Dialog, der per Klick ausgewählte Listen per Standartabfragen (Die alle in der Basedatei sind) in ein Tabellendokument exportiert.
Das klappt auch alles wunderbar.

Jetzt muss ich das Programm um Filter erweitern. Damit nicht alle Datensätze ausgespuckt werden, sondern nur bestimmte.
In Base bekomme ich diese Parameterabfragen ohne weiteres hin. Aber auf die kann ich ja nicht per Makro zugreifen, 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?

Ansonsten ist mir nicht klar, in welcher Form ich die Abfrage in das Makro schreiben kann...

Wenn ich

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)"
mache, bekomme ich einen Fehler.

Die Einträge bekomme ich so aus der Listbox (Es sind ja nur die Zulässig die drin sind.)
(Ist erst mal nur ein TestCode)

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

Re: Base Datenbankabfrage in Basic Makro?

von Heinz Bär » Mi, 16.02.2011 17:45

MikeRo

Schau mal unter http://www.ooowiki.de/BaseApi#SQL-Abfra ... 2BAPw-hren nach. Dort wird dies schrittweise erklärt.

Gruss
Heinz

Re: Base Datenbankabfrage in Basic Makro?

von gogo » Mi, 16.02.2011 17:11

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

Base Datenbankabfrage in Basic Makro?

von MikeRo » Mi, 16.02.2011 16:22

Hallo, irgendwie schaffe ich es nicht folgende Base Abfrage direkt in mein Makro ein zu speichern.

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
Dabei muss ich auch einen Parameter Abfragen, das löse ich aber über eine ListBox im Dialog. Zu erst muss ich aber die Abfrage irgendwie ins Makro bekommen. Im Moment habe ich eine Version, die auf die Abfragen aus der Basedatei zugreift. Damit funktionieren aber die Parameterabfragen nicht.

Nach oben