Mehrere SQL-Abfragen im Makro
Moderator: Moderatoren
Mehrere SQL-Abfragen im Makro
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!
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!
Re: Mehrere SQL-Abfragen im Makro
Um Deine Frage zu beantworten:
Ja, ich.
Wie kann ich helfen?
Ja, ich.
Wie kann ich helfen?
LinuxMint 13 maya, LibreOffice 4.1 mit externer HSQLDB 2.3.2
Re: Mehrere SQL-Abfragen im Makro
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...
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...
Re: Mehrere SQL-Abfragen im Makro
Hast du Unterabfragen in deinen SQL-Abfragen?
Ich hab so das Gefühl, dass die die Probleme verursachen.
Ich hab so das Gefühl, dass die die Probleme verursachen.
Re: Mehrere SQL-Abfragen im Makro
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.
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
Re: Mehrere SQL-Abfragen im Makro
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!
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!
Re: Mehrere SQL-Abfragen im Makro
Aloha
Du kannst ja mal die Länge Deiner alten SQL-Statements und die Länge der neuen SQL-Statements überprüfen (MsgBox Len(sql)).
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.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.
Du kannst ja mal die Länge Deiner alten SQL-Statements und die Länge der neuen SQL-Statements überprüfen (MsgBox Len(sql)).
Re: Mehrere SQL-Abfragen im Makro
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.
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.
Re: Mehrere SQL-Abfragen im Makro
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?
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?
Re: Mehrere SQL-Abfragen im Makro
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).
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?
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).
Siehe OOo Wiki: String Variablesschwelmi1 hat geschrieben:Woher hast du den Wert mit den 65535 Zeichen? Gilt der für mysql oder für OO?
oder zum selber testen:A string variable can store up to 65535 characters.
Code: Alles auswählen
x = ""
For i = 0 To 66000
x = x & "x"
Next i
MsgBox Len(x)
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?
Re: Mehrere SQL-Abfragen im Makro
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!
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!