Datenbankänderungen per Makro nicht persistent

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

sameske
Beiträge: 1
Registriert: So, 12.09.2010 14:37

Datenbankänderungen per Makro nicht persistent

Beitrag von sameske »

Moin moin,

ich habe mir eine Rechnungsvorlage (OO-Calc) gebastelt, die einen eigenen Button mitbringt. Dahinter hängt ein kleines Makro-Progrämmchen, welches auf Knopfdruck ein paar Daten aus dieser OO-Calc-Tabelle extrahiert (Rechnungsbetrag, RDatum, Kundennummer, ...), diese in eine Datenbank schreibt und dann das Calc-Dokument abspeichert und schließt.
Das funktioniert soweit ganz gut und die Daten landen dann auch ordnungsgemäß in der Datenbank. Das Problem tritt erst beim Reboot auf. Sprich die Datenbank vergisst alle Änderungen wenn ich den Rechner neu starte (Win7). Es scheint so, als ob die Änderungen die DB zwar erreicht haben, die DB selbst aber nicht nochmal gespeichert wurde. Das sieht man auch am Datum der letzten Änderung des odb-Dokuments.
Interessanterweise werden die Änderungen dauerhaft abgespeichert, wenn man vor dem Reboot das odb-Dokument nochmal kurz aufmacht und reinschaut. Ohne das man irgend eine Änderung vornimmt wird das odb-Dokument inklusive aller aufgelaufenen Änderungen abgespeichert und alles ist gut. Das ist zwar erstmal ein Workaround, ich will aber sicher nicht das odb-Doc nach jeder Änderung auf und zu machem müssen um die Änderungen persistent zu bekommen.

In der Base-Doku hab ich bisher keinen Hinweis gefunden, dass man die Datenbank irgendwie zum Speichern zwingen könnte.

Hier mein Makro in verkürzter Form:

Code: Alles auswählen

Sub save_and_exit()

Dim odoc as Object
...
Dim resultSet as Object
Dim oDBContext as Object
Dim oDBSource as Object
Dim stmt as Object
Dim oDBConnection as Object

odoc = ThisComponent
oDBContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oDBSource = oDBContext.getByName("MySpecialDB")
oDBConnection = oDBSource.getConnection("","")
stmt = oDBConnection.createStatement()

...

'update database
sql_query_date = Trim(Str(Year(bill_date))) + "-" + two_digit(Str(Month(bill_date))) + "-" + two_digit(Str(Day(bill_date)))
sql_query = "INSERT INTO ""bills"" VALUES ('" + _
Str(bill_no) + "', '" + _
Str(cno) + "', '" + _
Str(bill_value) + "', '" + _
Str(bill_value_final) + "', '" + _
sql_query_date + "')"
rc = stmt.executeUpdate(sql_query)

'save the document
...
odoc.storeasurl(savename_url,dummy())

'update last_bill_number in options
sql_query = "UPDATE ""options"" SET ""last_bill_number""=" + bill_no
rc = stmt.executeUpdate(sql_query)

'close this document
stmt.close()
oDBConnection.commit()
oDBConnection.close()
odoc.close(false)
End Sub