Seite 1 von 1
Datenbankinhalt in Calc-Dokument
Verfasst: Di, 25.04.2006 15:36
von Mihilist
Hi!
Ich versuche mich grad in die Wirren von OOo einzufinden, und möchte gerade versuchen, die aus einer Datenbank abgefragten Werte in ein Calc-Dokument zu schreiben.
Dazu hab ich mir das da zusammengebastelt:
Code: Alles auswählen
[...]
for i = 0 to oTable.Count-1
oNewDoc.Sheets(0).getCellByPosition(i, 0).String = oTable.getByIndex(i).Label
next
j = 1
oForm.getRow(0)
do
for i = 0 to oTable.Count-1
oNewDoc.Sheets(0).getCellByPosition(i, j).String = oForm.getString(i+1)
next
j = j+1
loop while oForm.Next
Das Problem ist nur, dass OOo abstürzt, sobald er damit fertig ist, und ich hab keine Ahnung warum
Hoffe ihr könnt mir helfen.
Verfasst: Di, 25.04.2006 21:08
von Toxitom
Hey Mihilist,
hmm, wenig Code. Einzig eins fällt mir auf:
Ich nehme mal an, dass oForm dein ResultSet ist. Wenn dem so währe, so lasse ich meine Schleifen immer andersherum laufen also:
Das funktioniert. Ich nehme an, dein Code stürzt ab, weil der letzte Durchlauf nicht mehr funktioniert? Nur so eine Idee. Ansonste kann ich wenig finden.
Sicher, er stürzt hier ab? Was kommt denn danach?
Gruss
Thomas
Verfasst: Di, 25.04.2006 21:50
von Mihilist
Das is ja das Problem, danach kommt nur End Sub.
Und er stürtzt dort ab, weil er die gesamte Tabelle ins Calc-Sheet schreibt, ich kann auch das Sheet speichern und alles. nur wenn ich zum Formular zurückkehre, dass das Makro gestartet hat, reagiert er erst nichtmehr und nach ein paar Sekunden stürzt er ab
das oForm ist das Formular, das mit der entsprechenden Datenbankabfrage verwurstet ist. Wundert mich, dass das überhaupt getString und Next besitzt, aber anscheinend tut's das - bin noch ziemlicher n00b
edit: bei "Do... Loop while..." sollte er am Ende die BEdingung testen und bei false nicht mehr durchlaufen. Daran hab ich garnicht gedacht, aber wenn es daran läge müsste er doch eine Fehlermeldung bringen und nicht einfach kommentarlos abstürzen

Verfasst: Mi, 26.04.2006 07:53
von Toxitom
hey Mihilist,
das oForm ist das Formular, das mit der entsprechenden Datenbankabfrage verwurstet ist. Wundert mich, dass das überhaupt getString und Next besitzt, aber anscheinend tut's das
Hmm, ich denke, hier liegt der Fehler. Ich kann die zwar nicht sagen, warum dein Formular diese Eigenschaften und Methoden unterstützt (wundert mich auch), kann mir aber nur vorstellen, dass dieses Formular quasi den Resultset beinhaltet und insofern ähnlich funktioniert. Der richtige Weg ist das aber nicht - daher vielleicht auch die nicht zu erklärenden Abstürze.
Also, wie gesagt, wenn du mit Basic arbeitest, solltest du an sich "nativ" arbeiten (obwohl es auch da noch Fehler und merkwürdige Phänomene gibt

) und die Methode getString() oder next() wird üblicherweise auf ein sogenanntes ResultSet angewendet .
Gruss
Thomas
Verfasst: Mi, 26.04.2006 16:26
von Mihilist
Also, um nochmal Laut zu geben: Laut DevelopersGuide (dieses 1141-Seiten-pdf) besitzt ein Datenformular alle RowSet-Eigfenschaften, war also nicht so daneben, was ich da gestern hingemurkst hab.
Ich dachte mir dann, dass das Problem sein könnte, dass er nach all den .Next's damit durch ist und das nicht kapiert, nu hab ich eben noch am Ende oForm.reload eingefügt, nun geht es.
Aber... Irgendwie find ich die Vorstellung, dass er nach der Aktion die Datenbankabfrage wiederholt nicht sonderlich elegant
...naja, wenigstens kackt er nichtmehr ab
