ausgehend vom Makro im Gesamtband V50 (S. 447f) versuchte ich, dies in einer Datenbank anzuwenden. Ich erhalte diese Fehlermeldung:
Liegt das an meiner Version: 4.4.5.2?
Sowohl die benutzte Datenbank als auch die Zieldatenbank sind angemeldet. Die Zieldatenbank befindet sich auf einer anderen Festplatte (D:\).
Wie könnte man ein Update der Tabelle in der Zieldatenbank erreichen, also auch geänderte und nicht nur neue Datensätze entsprechen der Ausgangsdatenbank oder alle bestehenden Datensätze der Tabelle in der Zieldatenbank werden gelöscht und alle Datensätze der Ausgangsdatenbank einfügt?
Falls man die Datensätze mehrerer Tabellen anfügen oder updaten will, geht dies, indem man in das Makro Kopien des ursprünglichen Makros mit den entsprechend geänderten Tabellen und Feldnamen einfügt?
Code: Alles auswählen
REM ***** BASIC *****
SUB Datenkopie
DIM oDatabaseContext AS OBJECT
DIM oDatenquelle AS OBJECT
DIM oDatenquelleZiel AS OBJECT
DIM oVerbindung AS OBJECT
DIM oVerbindungZiel AS OBJECT
DIM oDB AS OBJECT
DIM oSQL_Anweisung AS OBJECT
DIM oSQL_AnweisungZiel AS OBJECT
DIM oAbfrageergebnis AS OBJECT
DIM oAbfrageergebnisZiel AS OBJECT
DIM stSql AS String
DIM stSqlZiel AS String
DIM inID AS INTEGER
DIM inIDZiel AS INTEGER
DIM stName AS STRING
DIM stOrt AS STRING
oDB = ThisComponent.Parent
stDir = Left(oDB.Location,Len(oDB.Location)-Len(oDB.Title))
stDir = ConvertToUrl(stDir & "test.odb")
oDatenquelle = ThisComponent.Parent.CurrentController
If NOT (oDatenquelle.isConnected()) THEN
oDatenquelle.connect()
END IF
oVerbindung = oDatenquelle.ActiveConnection()
oDatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oDatenquelleZiel = oDatabaseContext.getByName(stDir)
oVerbindungZiel = oDatenquelleZiel.GetConnection("","")
oSQL_Anweisung = oVerbindung.createStatement()
stSql = "SELECT * FROM ""Tabelle1"""
oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql)
WHILE oAbfrageergebnis.next
inID = oAbfrageergebnis.getInt(1)
stName = oAbfrageergebnis.getString(2)
stOrt = oAbfrageergebnis.getString(3)
oSQL_AnweisungZiel = oVerbindungZiel.createStatement()
stSqlZiel = "SELECT ""ID"" FROM ""Tabelle1"" WHERE ""ID"" = '"+inID+"'"
oAbfrageergebnisZiel = oSQL_AnweisungZiel.executeQuery(stSqlZiel)
inIDZiel = - 1
WHILE oAbfrageergebnisZiel.next
inIDZiel = oAbfrageergebnisZiel.getInt(1)
WEND
IF inIDZiel = - 1 THEN
stSqlZiel = "INSERT INTO ""Tabelle1"" (""ID"",""name"") VALUES
('"+inID+"','"+stname+"')"
oSQL_AnweisungZiel.executeUpdate(stSqlZiel)
END IF
WEND
DIM oDatabaseContext AS OBJECT
DIM oDatenquelle AS OBJECT
DIM oDatenquelleZiel AS OBJECT
DIM oVerbindung AS OBJECT
DIM oVerbindungZiel AS OBJECT
DIM oDB AS OBJECT
DIM oSQL_Anweisung AS OBJECT
DIM oSQL_AnweisungZiel AS OBJECT
DIM oAbfrageergebnis AS OBJECT
DIM oAbfrageergebnisZiel AS OBJECT
DIM stSql AS String
DIM stSqlZiel AS String
DIM inID AS INTEGER
DIM inIDZiel AS INTEGER
DIM stName AS STRING
DIM stOrt AS STRING
oDB = ThisComponent.Parent
stDir = Left(oDB.Location,Len(oDB.Location)-Len(oDB.Title))
stDir = ConvertToUrl(stDir & "test.odb")
oDatenquelle = ThisComponent.Parent.CurrentController
If NOT (oDatenquelle.isConnected()) THEN
oDatenquelle.connect()
END IF
oVerbindung = oDatenquelle.ActiveConnection()
oDatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oDatenquelleZiel = oDatabaseContext.getByName(stDir)
oVerbindungZiel = oDatenquelleZiel.GetConnection("","")
oSQL_Anweisung = oVerbindung.createStatement()
stSql = "SELECT * FROM ""Tabelle2"""
oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql)
WHILE oAbfrageergebnis.next
inID = oAbfrageergebnis.getInt(1)
stName = oAbfrageergebnis.getString(2)
stOrt = oAbfrageergebnis.getString(3)
oSQL_AnweisungZiel = oVerbindungZiel.createStatement()
stSqlZiel = "SELECT ""ID"" FROM ""Tabelle2"" WHERE ""ID"" = '"+inID+"'"
oAbfrageergebnisZiel = oSQL_AnweisungZiel.executeQuery(stSqlZiel)
inIDZiel = - 1
WHILE oAbfrageergebnisZiel.next
inIDZiel = oAbfrageergebnisZiel.getInt(1)
WEND
IF inIDZiel = - 1 THEN
stSqlZiel = "INSERT INTO ""Tabelle2"" (""ID"",""name2"") VALUES
('"+inID+"','"+stname2+"')"
oSQL_AnweisungZiel.executeUpdate(stSqlZiel)
END IF
WEND
END SUB
Grüße
Malt
LibreOffice
Version: 4.4.5.2
Gebietsschema: de_DE
Microsoft Windows 8.1 Home 6.03.9600 x64