Hallo users,
ich hatte schon mal ein ähnliches Problem und stecke jetzt wieder einmal
fest, sodass ich eure Hilfe brauche.
Zur Realisierung eines Makros, das beim Update einer Datenbank die
vorhandenen Daten der alten Version in die Tabelle "Mitglieder" der
neuen Version überträgt habe ich das u.a. Makro erstellt.
Mein Problem:
Alle Daten werden importiert, nur die Spalte 20 (sp20) macht mir Probleme.
Dort steht das Geburtsdatum der Vereinsmitglieder.
Da dies aber nicht bei allen Mitgliedern benötigt wird, sind auch
Datensätze in der Datenbank enthalten, die in diesem Feld keine Einträge
enthalten.
Wenn ich das Makro mit dem INSERT für die Spalte 20 so ausführe, wie es
unten enthalten ist, ('"+sp20+"') importiert es die Daten bis zum ersten
Datensatz, der kein Datum in "Geburtstag" enthält und bleibt dann stehen
mit der Meldung "Wrong data type".
Wenn ich das Makro mit dem INSERT für die Spalte 20 so ausführe (" &
sp20 & ") importiert es Datensätze, die im Feld "Geburtstag" keinen
Eintrag enthalten, bleibt aber beim ersten Datensatz mit Datumseintrag
in diesem Feld stehen. (Zum Test hatte ich in den ersten Datensätzen
die Datums-Inhalte gelöscht).
Ich hab das schon mal in einer anderen Datenbank mit eurer Hilfe
erfolgreich angewendet. Das o.a. Problem ist dort aber nicht
aufgetaucht, da in dieser Datenbank alle Datensätze im Feld Datum einen
Eintrag hatten.
Vielleicht hat ja jemand einen Tipp, wie ich die Sach noch lösen kann.
Vielen Dank im Voraus
Gruß L-H
Hier das Makro:
SUB Datenkopie
dim dbname as string
dbname = InputBox("Datenbankname der Quelldatenbank eingeben")
if dbname = "" then
exit sub
end if
DIM oDatabaseContext AS OBJECT
DIM oDatenquelle AS OBJECT
DIM oDatenquelleQuell AS OBJECT
DIM oVerbindung AS OBJECT
DIM oVerbindungQuell AS OBJECT
DIM oDB AS OBJECT
DIM oSQL_Anweisung AS OBJECT
DIM oSQL_AnweisungQuell AS OBJECT
DIM oAbfrageergebnis AS OBJECT
DIM oAbfrageergebnisQuell AS OBJECT
DIM stSql AS String
DIM stSqlZiel AS STRING
DIM inID AS INTEGER
DIM inIDZiel AS INTEGER
oDB = thisDatabaseDocument
oDatenquelle = thisDatabaseDocument.CurrentController
If NOT (oDatenquelle.isConnected()) THEN
oDatenquelle.connect()
END IF
oVerbindung = oDatenquelle.ActiveConnection()
oDatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
stDir = Left(oDB.Location,Len(oDB.Location)-Len(oDB.Title))
stDir = ConvertToUrl(stDir & ""+dbname+"")
'Quell-Datenbankpfad erstellen
oDatenquelleQuell = oDatabaseContext.getByName(stDir)
'Quell-Datenbankpfad einlesen
oVerbindungQuell = oDatenquelleQuell.GetConnection("","")
'Quell-Datenbankverbindung einlesen
oSQL_AnweisungQuell = oVerbindungQuell.createStatement()
'SQL-Statement für Quelldatenbank erstellen
stSql = "SELECT * FROM ""Mitglieder"""
oAbfrageergebnisQuell = oSQL_AnweisungQuell.executeQuery(stSql)
WHILE oAbfrageergebnisQuell.next
inID = oAbfrageergebnisQuell.getint(1) 'ID (Integer)
sp2 = oAbfrageergebnisQuell.getString(2) 'Text
sp3 = oAbfrageergebnisQuell.getString(3) 'Text
sp4 = oAbfrageergebnisQuell.getString(4) 'Zahl
IF sp4="" THEN
sp4="NULL"
END IF
sp5 = oAbfrageergebnisQuell.getString(5) 'Text
sp6 = oAbfrageergebnisQuell.getString(6) 'Zahl
IF sp6="" THEN
sp6="NULL"
END IF
sp7 = oAbfrageergebnisQuell.getString(7) 'Text
sp8 = oAbfrageergebnisQuell.getString(8) 'Text
sp9 = oAbfrageergebnisQuell.getString(9) 'Text
sp10 = oAbfrageergebnisQuell.getString(10) 'Text
sp11 = oAbfrageergebnisQuell.getString(11) 'Text
sp12 = oAbfrageergebnisQuell.getBoolean(12) 'Ja/Nein
sp13 = oAbfrageergebnisQuell.getString(13) 'Text
sp14 = oAbfrageergebnisQuell.getString(14) 'Text
sp15 = oAbfrageergebnisQuell.getString(15) 'Text
sp16 = oAbfrageergebnisQuell.getString(16) 'Text
sp17 = oAbfrageergebnisQuell.getString(17) 'Text
sp18 = oAbfrageergebnisQuell.getString(18) 'Text
sp19 = oAbfrageergebnisQuell.getString(19) 'Text
sp20 = oAbfrageergebnisQuell.getString(20) 'Datum
IF sp20="" THEN
sp20="NULL"
END IF
oSQL_AnweisungZiel = oVerbindung.createStatement()
stSql = "SELECT ""ID"" FROM ""Mitglieder"" WHERE ""ID"" = '"+inID+"'"
oAbfrageergebnis = oSQL_AnweisungZiel.executeQuery(stSql)
inIDZiel = - 1
WHILE oAbfrageergebnis.next
inIDZiel = oAbfrageergebnis.getInt(1)
WEND
IF inIDZiel = - 1 THEN
stSqlZiel = "INSERT INTO ""Mitglieder""
(""ID"",""Nachname"",""Vorname"",""Eintritt"",""Ehrennadel"",""Ehrenmitglied"",""Vorstand"",""passiv
seit"",""alte
Passive"",""Aktivzeiten"",""Funktion"",""Marke"",""Bemerkungen"",""telnr"",""email"",""IBAN"",""BIC"",""BName"",""Mand-ID"",""Geburtstag"")
VALUES ('"+inID+"','"+sp2+"','"+sp3+"','"+sp4+"','"+sp5+"'," & sp6 &
",'"+sp7+"','"+sp8+"','"+sp9+"','"+sp10+"','"+sp11+"','"+sp12+"','"+sp13+"','"+sp14+"','"+sp15+"','"+sp16+"','"+sp17+"','"+sp18+"','"+sp19+"','"+sp20+"')"
oSQL_Anweisung.executeUpdate(stSqlZiel)
END IF
WEND
MsgBox("Daten wurden übernommen")
end sub