seit einigen Tagen versuche ich ein Formular zu erstellen das mir Daten aus 2 unterschiedlichen DB's anzeigt.
Meine Ausgangs-Situation:
Ich benutze OOo 3.2.1 unter Linux.
Mit der integrierten HSQL-DB habe ich eine Datenbank zur Zeiterfassung und Rechnungsstellung für Subunternehmer erstellt (Montage.odb).
In einem Hauptformular ("Rechnungen") habe ich u.a. ein Unterformular ("UebrsOffen") das mir in einem Tabellenkontrollfeld
die noch nicht als bezahlt markierten Rechnungen auflistet. "UebersOffen" ist SQL-basiert da die Daten aus verschiedenen Tabellen stammen.
Mit Hilfe eines Makros lese ich den Inhalt eines nicht verknüpften Datumsfeld aus und schreibe es ins Feld "BezAm" der entspechenden Tabelle "eigRechn".
Als Onlinebanking-Programm nutze ich KMyMoney. Darin ordne ich den Konto-Buchungen u.a. die Kategorie "Ein19%" zu.
KMyMoney kann seine Daten in einer MySQL-Datenbank speichern. Für diese Datenbank habe ich (MySQL-jdbc) eine "kmysql.odb" erstellt
und bei OOo registriert. "kmysql.odb" enthält eine funktionierende Abfrage "SucheRechnungsEingänge".
Was ich erreichen möchte:
Ich möchte in "Montage.Rechnungen" die Daten von "kmysql.SucheRechnungsEingänge" anzeigen und per Makro das Konto-Buchungs-Datum als "BezAm"
in "Montage.eigRechn" eintragen.
Was ich versucht habe:
Im der Oberfläche von Base habe ich keine Möglichkeit gefunden in der bestehenden Montage.odb eine weitere Datenbank auszuwählen.
(Ich fürchte das hat seinen Grund)
Meine Versuche in Basic eine weitere DB als Verbindung unterzujubeln sind leider auch gescheitert:
Code: Alles auswählen
Sub KontoAuszug1
'***************
' holt die Zahlungseingänge vom Konto
globalscope.basiclibraries.loadlibrary("MRILib")
Dim oDoc
Dim oDraw
Dim oFormKonto
Dim oDrMan
Dim oDr
Dim oCon
oDoc = ThisComponent
oDraw = oDoc.Drawpage
oDrMan = CreateUnoService("com.sun.star.sdbc.DriverManager")
oDr = oDrMan.getDriverByUrl("sdbc:mysql:jdbc:localhost:3306/kmymoney)"
Dim oParms(1) As New com.sun.star.beans.PropertyValue
oParms(0).name = "user"
oParms(0).value = "root"
oParms(1).Name = "password"
oParms(1).value = "meinPasswort"
oCon = oDr.Connect("sdbc:mysql:jdbc:localhost:3306/kmymoney",oParms)
oFormKonto = oDoc.CreateInstance("com.sun.star.form.component.Form")
oFormKonto.ActiveConnection = oCon
oFormKonto.CommandType=com.sun.star.sdb.CommandType.COMMAND
oFormKonto.Command = "SELECT `kmmPayees`.`name`, `kmmSplits`.`valueFormatted`, `kmmSplits`.`postDate`, `kmmSplits`.`memo` " &_
"FROM `kmymoney`.`kmmSplits` AS `kmmSplits`, `kmymoney`.`kmmPayees` AS `kmmPayees`, `kmymoney`.`kmmAccounts` AS `kmmAccounts` " &_
"WHERE `kmmSplits`.`payeeId` = `kmmPayees`.`id` AND `kmmSplits`.`accountId` = `kmmAccounts`.`id` " &_
"AND ( `kmmAccounts`.`accountName` LIKE 'Befr-ein' OR `kmmAccounts`.`accountName` LIKE '19%-ein' )"
'kleiner Test
oFormKonto.execute()
oFormKonto.first()
print oFormKonto.getString(1)
'liefert Daten
oDraw.Forms.InsertByName ("Konto",oFormKonto)
Mri oFormKonto
End Sub
auswählen (Auswahl-Liste in Eigenschaften/Daten/DatenFelder hat keine Einträge).
Desweiteren habe ich das Formular "Rechnungen" mal als eigenes .odt Dokument gespeichert. (Kopie speichern unter ...)
Jetzt kann ich zwar wie gewünscht die zweite Datenbank als Quelle hinzufügen und bekomme auch die Daten aus beiden DB's richtig angezeigt,
aber wenn ich versuche per Makro das Buchungs-Datum als "BezAm" zu speichern bleibt das updateRow() ohne Wirkung.
Um doppelte Verbindungen zur HSQL zu vermeiden, habe ich OOo erst komplett geschlossen und dann das eigenständige Formular geöffnet.
Code: Alles auswählen
' nur der Teil in dem ich speichern will
SQLstr = "SELECT * FROM eigRechn WHERE " + Teilstr 'den neuen SQL-String erstellen
Dim rsBezAm As Object
rsBezAm = createUnoService("com.sun.star.sdb.RowSet")
With rsBezAm
.DataSourceName="Montage"
.CommandType=com.sun.star.sdb.CommandType.COMMAND
.Command=SQLstr
.execute()
End With
While rsBezAm.next
rsBezAm.updateDate(4,Datumstruct) 'Datum in der aktuellen Reihe eintragen
rsBezAm.updateRow() 'aktuelle Reihe speichern
Wend
Muss ich mir die Anzeige der Konto-Daten selbst zusammen basteln oder gibt es doch einen Weg ein Tabellen-Kontrollfeld zu benutzen.
Im Netz findet man zwar viele Beispiele wie man sich mit einer einzigen Datenbank verbindet,
zu meheren DB's gleichzeitig habe ich aber leider nichts gefunden.
Danke für's lesen und eventuelle Anregungen
Gruß aus Bremen
Jörn