ResultSets kopieren (Inhalt übertragen)?

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

geimist
****
Beiträge: 191
Registriert: Fr, 15.02.2008 16:10

ResultSets kopieren (Inhalt übertragen)?

Beitrag von geimist »

Hallo Zusammen,

derzeit schreibe ich gerade ein UpDate-Makro. Wenn es eine neue Version meiner Datenbank gibt, welche ich 'verteile', so müssen die Anwender ja irgendwie ihre Daten von der alten DB in die neue DB bekommen.
Ich habe nun 2 ResultSets (eins von der neuen und eins von der alten DB).
Kann mir jemand helfen, wie ich die Daten am einfachsten übertragen kann. Mit dem nachstehenden Code übertrage ich ja schon mal den 1. Datensatz. Vermutlich müsste ich das mit einer Schleife realisieren (deswegen auch der Datensatzzähler), aber da bin ich noch nicht so firm drin.

Code: Alles auswählen

	sSQLOld = "SELECT ""Name"", ""ID"" FROM ""Adressen"" "	
	oErgSetOld = oStatementOldDB.executeQuery( sSQLOld )
	oErgSetOld.last()
	oErgSetOldRows = oErgSetOld.getRow() 'zeig die Anzahl der Datensätze
	
	oErgSetOld.absolute(1)
	sName= oErgSetOld.getstring(1) 
	sID = oErgSetOld.getstring(2) 

'========= Daten schreiben: 
		    
	sSQLNew = "INSERT INTO "+CHR(34)+"Adressen"+CHR(34)+"( ""Name"", ""ID"") VALUES  ('"+sName+"', '"+sID+"')"
	
	oStatementNewDB.executeUpdate(sSQLNew)
Zuletzt geändert von geimist am Mo, 28.09.2009 12:56, insgesamt 1-mal geändert.
Gruß
Stephan

LibreOffice 5.3 - MAC OS/X 10.11
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: ResultSets kopieren?

Beitrag von eBayer »

mach es doch in einer Schleife....
Mehr sollte nicht notwendig sein!
Und zum Schluß immer schön alles mit close abschließen (erst ErgSet, dann Statement), sonst gibt es Probleme.
Gruß eBayer

while oErgSetOld.next()
sName= oErgSetOld.getstring(1)
sID = oErgSetOld.getstring(2)

'========= Daten schreiben:

sSQLNew = "INSERT INTO "+CHR(34)+"Adressen"+CHR(34)+"( ""Name"", ""ID"") VALUES ('"+sName+"', '"+sID+"')"
oStatementNewDB.executeUpdate(sSQLNew)
Wend
oErgSetOld.close()
oStatementNewDB.close()
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
geimist
****
Beiträge: 191
Registriert: Fr, 15.02.2008 16:10

Re: ResultSets kopieren (Inhalt übertragen)?

Beitrag von geimist »

Vielen Dank. Das Kopieren funktioniert schon mal.
Sicherheitshalber möchte ich die Datenintegrität prüfen.
Am einfachsten wollte ich die Daten aus der neuen Tabelle auslesen und dann das neue mit dem alten ResultSet vergleichen:

Code: Alles auswählen

	sSQLNew = "SELECT ""Name"", ""ID"" FROM ""Adressen"" "	
	oErgSetNew = oStatementNewDB.executeQuery( sSQLNew )	
	
	If oErgSetNew <> oErgSetOld Then
		msgbox "Daten wurden nicht fehlerfrei kopiert! ",48,"FEHLER"
	End If
Hier kommt der Fehler: Falscher Wert für Eigenschaft. Das war wohl etwas zu einfach gedacht?
Hast du eine andere Idee?
Gruß
Stephan

LibreOffice 5.3 - MAC OS/X 10.11
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: ResultSets kopieren (Inhalt übertragen)?

Beitrag von eBayer »

ja, da musst Du schon etwas fleissiger sein..... *grins
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: ResultSets kopieren (Inhalt übertragen)?

Beitrag von komma4 »

geimist hat geschrieben:Vielen Dank. Das Kopieren funktioniert schon mal.
Sicherheitshalber
Das ist nicht nötig. Wenn die Datenstrukturen (Zeichenkettenlänge! , nummerische Spaltendefinitionen) gleich sind klappt das schon.

Ansonsten Spalte für Spalte vergleichen.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
geimist
****
Beiträge: 191
Registriert: Fr, 15.02.2008 16:10

Re: ResultSets kopieren (Inhalt übertragen)?

Beitrag von geimist »

OK. Da werde ich mich erst einmal auf die ganzenTabellen stürzen.
Dazu gleich zur nächsten Frage (es kommt doch immer neues dazu :? ):

In einer Tabelle befindet sich eine Spalte mit dem Datentyp "LONGVARBINARY" - ein Bild sozusagen.
Wie muss ich diesen Datentyp abfragen. .getObject() geht nicht und führt direkt zu einem Fehler und bei .getBinaryStream() kommt beim absetzen des SQLs ein Fehler (Falscher Wert für Eigenschaft).
Gruß
Stephan

LibreOffice 5.3 - MAC OS/X 10.11
Antworten