Seite 1 von 1
Re: Leeres globales ResultSet nach erstellung eines anderen
Verfasst: Fr, 04.09.2009 10:39
von komma4
anonym hat geschrieben:Das Object
für das Resultset (ist ja eine Kopie) ist global
Kopie? Meinst Du das so, das Du nicht direkt die Daten der Datenbank im Zugriff hast...?
anonym hat geschrieben:Den Code kann ich leider nicht beifügen, selbst ich hab da kaum
Meine Glaskugel sagt mir zu diesem Fall: du verwendest die gleiche
oConnection
Re: Leeres globales ResultSet nach erstellung eines anderen
Verfasst: Fr, 04.09.2009 10:55
von gigabert
Hallo,
es ist wohl bei einigen Datenbanken/Treibern so, dass ein ResultSet nur einmal durchlaufen werden kann. Evtl. hast du ja immer nur 1 ResultSet-Objekt, wenn du es weiterkopierst. Versuche es doch mal mit unterschiedlichen neuen Objekten. Welche DBMS benutzt du denn?
Gruss
Bert
Re: Leeres globales ResultSet nach erstellung eines anderen
Verfasst: Fr, 04.09.2009 14:38
von komma4
ich weiss nicht, was Du machst ... aber hier funktioniert das.
Erweiterung des Beispiels von gestern, auch HSQLDB, unter OOo3.0.1/WinXP pro
Code: Alles auswählen
' zwei RESULTSETs
' 2009-09-04
Sub de27576
' Kontext holen
Dim oDBKontext
oDBKontext = CreateUnoService ( "com.sun.star.sdb.DatabaseContext" )
If IsNull( oDBKontext ) Then
msgbox "kein DB Kontext"
exit sub
End If
' Datenquelle auswählen
' name of OOo registered data source
oDatenquelle = oDBKontext.getByName( "base_hsqldb_Datenbank" )
' Verbindung zur DB herstellen
If Not oDatenquelle.IsPasswordRequired Then
oVerbindung = oDatenquelle.getConnection( "" , "" )
Else
oInteractionHandler = createUnoService( "com.sun.star.sdb.InteractionHandler" )
oVerbindung = oDatenquelle.connectWithCompletion( oInteractionHandler )
End If
' Statement erzeugen
oStatement1 = oVerbindung.createStatement()
sSQL = "SELECT * FROM ""Tabelle1"" WHERE ""datum"" = NOW() "
' Abfrage absetzen
oResultSet1 = oStatement1.executeQuery( sSQL )
Select Case oResultSet1.next()
Case FALSE
msgbox "1: nicht gefunden"
Case TRUE
msgbox "1: Resultset vorhanden"
End Select
oStatement2 = oVerbindung.createStatement()
sSQL = "SELECT * FROM ""Tabelle3"" WHERE ""Nr."" = '50' "
oResultSet2 = oStatement2.executeQuery( sSQL )
Select Case oResultSet2.next()
Case FALSE
msgbox "2: nicht gefunden"
Case TRUE
msgbox "2: Resultset vorhanden"
End Select
print oResultSet1.getString( 2 )
print oResultSet2.getString( 4 )
End Sub
Re: Leeres globales ResultSet nach erstellung eines anderen
Verfasst: Fr, 04.09.2009 15:49
von keksi1970
gehe ich richtig in der annahme, daß
du auf 2 Verschiedene Datenbanken zugreifst ?
also ResultSet1= Verbindung.Datenbank1
ResultSet2 = Verbindung.Datenbank2 ?
LG
Andreas
Re: Leeres globales ResultSet nach erstellung eines anderen
Verfasst: Fr, 04.09.2009 16:56
von komma4
Auch das funktioniert, Andreas:
Code: Alles auswählen
' Variante: 2 HSQLDB
oDatenquelle1 = oDBKontext.getByName( "base_HSQLDB_test" )
oDatenquelle2 = oDBKontext.getByName( "base_HSQL_million" )
' Verbindung zur DB herstellen
If Not oDatenquelle1.IsPasswordRequired Then
oVerbindung1 = oDatenquelle1.getConnection( "" , "" )
Else
oInteractionHandler = createUnoService( "com.sun.star.sdb.InteractionHandler" )
oVerbindung1 = oDatenquelle1.connectWithCompletion( oInteractionHandler )
End If
If Not oDatenquelle2.IsPasswordRequired Then
oVerbindung2 = oDatenquelle2.getConnection( "" , "" )
Else
oInteractionHandler = createUnoService( "com.sun.star.sdb.InteractionHandler" )
oVerbindung2 = oDatenquelle2.connectWithCompletion( oInteractionHandler )
End If
' Statement erzeugen
oStatement1 = oVerbindung1.createStatement()
sSQL = "SELECT * FROM ""Tabelle1"" WHERE ""datum"" = NOW() "
' Abfrage absetzen
oResultSet1 = oStatement1.executeQuery( sSQL )
Select Case oResultSet1.next()
Case FALSE
msgbox "1: nicht gefunden"
Case TRUE
msgbox "1: Resultset vorhanden"
End Select
oStatement2 = oVerbindung2.createStatement()
sSQL = "SELECT * FROM ""tab_5000Adressen"" WHERE ""id"" = '5' "
oResultSet2 = oStatement2.executeQuery( sSQL )
Select Case oResultSet2.next()
Case FALSE
msgbox "2: nicht gefunden"
Case TRUE
msgbox "2: Resultset vorhanden"
End Select
print oResultSet1.getString( 2 )
print oResultSet2.getString( 4 )
Re: Leeres globales ResultSet nach erstellung eines anderen
Verfasst: Sa, 05.09.2009 07:37
von komma4
STRUKTUR ist kein zulässiger Typebezeichner,
wenn ich das noch richtig im Kopf habe kann eine Struct nicht GLOBAL definiert werden, sodass sie den Inhalt behält. Verwendest Du eine zulässige Bezeichnung (INT, STRING) dann bleibt auch der Inhalt erhalten.
Setze das [GELÖST] in den Titel des ersten Postings, damit es in den Übersichten / Trefferlisten erscheint.
Viel Erfolg, noch!
Re: [GELÖST] Re: Leeres globales ResultSet nach erstellung eines
Verfasst: Sa, 05.09.2009 16:13
von komma4
Wenn Du schon C++ (oder eine andere Programmiersprache) kennst/kannst ... mir hat
Andrews Makro Dokument "gelangt" - plus die Beispiele aus dem "alten"
englischen Forum, um die
API-Dokumentation lesen und verstehen zu können.
Bücher bringen IMHO nicht soooviel.
Aber:
up to you, wie Du am Besten lernen kannst