Mehrere SQL-Abfragen im Makro

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

schwelmi1
*
Beiträge: 16
Registriert: Do, 11.11.2010 15:54

Mehrere SQL-Abfragen im Makro

Beitrag von schwelmi1 »

Hallo zusammen,

hat jemand Erfahrung damit, mehrere SQL-Abfragen in einem Makro abzuhandeln?
Ich bekomme da bei jedem Durchlauf an unterschiedlichen Stellen eine Exception.

Ich konnte eine Verbesserung erreichen, indem ich die Verbindung zur Datenbank nach jeder SQL-Abfrage schließe und danach neu aufbaue.

In der Fehlermeldung taucht Code auf, der gar nicht Bestandteil der Abfrage ist, in der der Fehler verursacht wurde.

Schon mal vielen Dank für eure Hilfe!
Benutzeravatar
herz4
****
Beiträge: 145
Registriert: Mi, 29.09.2010 13:41

Re: Mehrere SQL-Abfragen im Makro

Beitrag von herz4 »

Um Deine Frage zu beantworten:
Ja, ich.
Wie kann ich helfen?
LinuxMint 13 maya, LibreOffice 4.1 mit externer HSQLDB 2.3.2
schwelmi1
*
Beiträge: 16
Registriert: Do, 11.11.2010 15:54

Re: Mehrere SQL-Abfragen im Makro

Beitrag von schwelmi1 »

Hattest du ähnliche Probleme oder was hast du anders gemacht?
Welche Datenbank hast du genommen?
Bei mir läuft im Hintergrund XAMPP mit mysql.
Ich habe etwa 15000 Datensätze und über 20 SQL-Abfragen, die teilweise etwas umfangreicher ausfallen.

Mein Aufbau sieht im Moment wie folgt aus (die DIM-Anweisungen lasse ich mal weg):

DatabaseContext = CreateUnoService ( "com.sun.star.sdb.DatabaseContext" )
Datenquelle = DatabaseContext.getByName( "db" )

Verbindung = Datenquelle.getConnection("Benutzer","Passwort")
SQL_Anweisung = Verbindung.createStatement()
Sql = ""
SQL_Anweisung.executeUpdate (Sql)
SQL_Anweisung.close()
Verbindung.close()


Verbindung = Datenquelle.getConnection("Benutzer","Passwort")
SQL_Anweisung = Verbindung.createStatement()
Sql = ""
SQL_Anweisung.executeUpdate (Sql)
SQL_Anweisung.close()
Verbindung.close()


Verbindung = Datenquelle.getConnection("Benutzer","Passwort")
SQL_Anweisung = Verbindung.createStatement()
Sql = ""
SQL_Anweisung.executeUpdate (Sql)
SQL_Anweisung.close()
Verbindung.close()


usw...
schwelmi1
*
Beiträge: 16
Registriert: Do, 11.11.2010 15:54

Re: Mehrere SQL-Abfragen im Makro

Beitrag von schwelmi1 »

Hast du Unterabfragen in deinen SQL-Abfragen?
Ich hab so das Gefühl, dass die die Probleme verursachen.
Benutzeravatar
herz4
****
Beiträge: 145
Registriert: Mi, 29.09.2010 13:41

Re: Mehrere SQL-Abfragen im Makro

Beitrag von herz4 »

Ich weiß immer noch nicht, ob und vor allem wie ich helfen kann!?
Deine "leeren" Abfragen, Deine fehlenden Fehler-Postings, Deine mageren Angaben darüber hinaus lassen mich Dein Problem nicht verstehen.
Unterabfragen allein sind kein Problem - wenn sie denn wie die gesamte Abfrage richtig laufen. Hast Du die denn schon als "normale" SQL-Abfrage, ohne Makro probiert?!
Und Deine Frage: Ich habe kein Problem mit mehreren Abfragen nacheinander auch ohne(!) Schließen von Verb. oder Abfrage.
LinuxMint 13 maya, LibreOffice 4.1 mit externer HSQLDB 2.3.2
schwelmi1
*
Beiträge: 16
Registriert: Do, 11.11.2010 15:54

Re: Mehrere SQL-Abfragen im Makro

Beitrag von schwelmi1 »

Ich habe alle Abfragen manuell getestet und da funktionieren die.
Die Fehlermeldungen sind leider höchst unterschiedlich, meistens wird aber der Code der SQL-Abfrage bemängelt und im SQL-Ausschnitt der Fehlermeldung ist Code enthalten, der gar nicht Bestandteil der Abfrage ist, die den Fehler ausgelöst hat oder sowas wie:
"Es ist eine Exception aufgetreten. Type: com.sun.star.sdbc.SQLException Message: Query was empty. "

Auch tauchen die Fehler bei mehrmaligem Durchlauf mal auf und mal nicht, bzw. an anderer Stelle. Die Abfragen habe ich deshalb nicht gepostet, weil die meisten mindestens 100 Zeilen lang sind.

Was mir noch aufgefallen ist:
Wenn ich nach jeder Abfrage eine Pause von ca. 10 sec. eingelegt habe, dann lief das Makro fast bis zum Ende durch.
Auch die Länge der Abfragen ist wichtig. Die Abfragen dürfen längst nicht so lang werden, wie ohne Makro.

Inzwischen habe ich alle Unterabfragen entfernt, durch Ansichten ersetzt und mein Makro läuft durch.
Scheint also an den Unterabfragen zu liegen.

Ich betrachte das jetzt erstmal als gelöst.

Danke für deine Hilfe!
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Mehrere SQL-Abfragen im Makro

Beitrag von DPunch »

Aloha
schwelmi1 hat geschrieben:"Es ist eine Exception aufgetreten. Type: com.sun.star.sdbc.SQLException Message: Query was empty. "

Auch tauchen die Fehler bei mehrmaligem Durchlauf mal auf und mal nicht, bzw. an anderer Stelle. Die Abfragen habe ich deshalb nicht gepostet, weil die meisten mindestens 100 Zeilen lang sind.
Da könnte das Hauptproblem liegen - Strings dürfen maximal 65535 Zeichen (256kB) lang sein. Übertrittst Du diese Grenze, hast Du zum einen einen leeren String ("Query was empty"), zum anderen kann ich mir gut vorstellen, dass zusätzlich noch evtl schon in Benutzung befindliche Speicherbereiche überschrieben werden, was zu einem (auch schwerwiegenden) Fehler führen kann, aber nicht muss.
Du kannst ja mal die Länge Deiner alten SQL-Statements und die Länge der neuen SQL-Statements überprüfen (MsgBox Len(sql)).
schwelmi1
*
Beiträge: 16
Registriert: Do, 11.11.2010 15:54

Re: Mehrere SQL-Abfragen im Makro

Beitrag von schwelmi1 »

Ja, das denke ich auch, dass das Hauptproblem an der Länge der Strings festzumachen ist.
Das mit den 65535 Zeichen (256kB) wusste ich nicht, danke für den Tipp.

Interessant dabei ist, dass die Fehler dann auch in Anweisungen auftraten, die deutlich unter dieser Länge lagen,
was ich mir nur mit verbliebenen Resten im Speicher erklären kann.
schwelmi1
*
Beiträge: 16
Registriert: Do, 11.11.2010 15:54

Re: Mehrere SQL-Abfragen im Makro

Beitrag von schwelmi1 »

Ich hab die Länge meiner alten Strings mal überprüft. Die lagen in der Regel so um die 15000 Zeichen.
Bei einer Create table Anweisung kam seltsamerweise als Längenangabe 0 Zeichen raus.
len zeigt mir bei Strings über 32760 Zeichen den Wert 0 an.
Woher hast du den Wert mit den 65535 Zeichen? Gilt der für mysql oder für OO?
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Mehrere SQL-Abfragen im Makro

Beitrag von DPunch »

Aloha

Deine Ergebnisse sind seltsam, bzw. für mich gerade nicht nachvollziehbar.
Die Länge gilt für OOo (für Version 3.2.1 definitiv, aber sollte auch für niedrigere Versionen gelten).
schwelmi1 hat geschrieben:Woher hast du den Wert mit den 65535 Zeichen? Gilt der für mysql oder für OO?
Siehe OOo Wiki: String Variables
A string variable can store up to 65535 characters.
oder zum selber testen:

Code: Alles auswählen

x = ""
For i = 0 To 66000
  x = x & "x"
Next i
MsgBox Len(x)
Beim Versuch, den überlangen String auszugeben, stürzt Open Office übrigens in aller Regel ab, vermutlich, weil das terminierende Zeichen des Strings fehlt.
In der Theorie wäre das wie gesagt eine mögliche Ursache für fehlerhaftes Makro-Verhalten gewesen, aber wenn Deine Strings diese Länge nicht erreichen, weiss ich auch nicht weiter.
Möglicherweise noch eine Datenbank-(sprich MySQL-)seitige Begrenzung?
schwelmi1
*
Beiträge: 16
Registriert: Do, 11.11.2010 15:54

Re: Mehrere SQL-Abfragen im Makro

Beitrag von schwelmi1 »

Nein, im MySQL Explorer funktioniert es ja.
Connectoren habe ich auch verschiedene ausprobiert.

Ist aber nicht mehr so wichtig für mich.
Mein Makro läuft und das war mein Hauptanliegen.

Vielen Dank für eure Hilfe!
Antworten