BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

firebird objRec.first

Alles zur Programmierung im LibreOffice.
Antworten
dimpflmoser
Beiträge: 16
Registriert: So 2. Feb 2014, 15:19

firebird objRec.first

Beitrag von dimpflmoser » Sa 24. Nov 2018, 18:52

Hallo zusammen,

ich habe die Datentabellen meiner eingebetteten HSQL-Datenbank zu Firebird konvertieren lassen.

Dabei fiel mir in meinen Basic-Modulen auf, dass die Recordsetmethode .first() wohl nicht mehr existiert...:

Code: Alles auswählen

' Kontaktdaten abfragen
strSql = "SELECT NAME1, NAME2, ANREDE, TITEL, ORTSTEIL, STRASSE, PLZ, ORT, " & _
"PLZPOSTFACH, POSTFACH, ANREDEBRF FROM KONTAKTE " & _
"WHERE KONTAKTNR = " & objForm.getByName("txtKontaktNr").Text
objResult = DbConnect.getResultSet(objForm.ActiveConnection, strSql)
' Auf ersten Datensatz positionieren
objResult.first() ' Hier wird eine Fehlermeldung ausgegeben
' Werte aus Resultset übernehmen
strName1 = objResult.getString(1)
strName2 = objResult.getString(2)
Rem ...
Meine Fragen:
Kann jemand helfen?
Gibt es eine Übersicht über die von Firebird unterstützten Basic Datenbank-Eigenschaften und Methoden?

Danke

F3K Total
Beiträge: 2412
Registriert: So 10. Apr 2011, 10:10

Re: firebird objRec.first

Beitrag von F3K Total » So 25. Nov 2018, 08:54

Moin,
dieser Code funktioniert bei mir, W7 LO 613:

Code: Alles auswählen

Sub Test_First
oController = ThisDatabasedocument.currentController
if not oController.isconnected then oController.connect
oConnection = oController.activeConnection
sQLStatement = oConnection.CreateStatement
strSql = "SELECT NAME1, NAME2, ANREDE, TITEL, ORTSTEIL, STRASSE, PLZ, ORT, " & _
"PLZPOSTFACH, POSTFACH, ANREDEBRF FROM KONTAKTE " & _
"WHERE KONTAKTNR = " & objForm.getByName("txtKontaktNr").Text
objResult = sQLStatement.executequery(strSql)
' Auf ersten Datensatz positionieren
objResult.first() ' Hier wird eine Fehlermeldung ausgegeben
' Werte aus Resultset übernehmen
strName1 = objResult.getString(2)
strName2 = objResult.getString(3)
print strName1
print strName2
Rem ...

end sub
Windows 10: AOO, LO Linux Mint: AOO, LO

dimpflmoser
Beiträge: 16
Registriert: So 2. Feb 2014, 15:19

Re: firebird objRec.first

Beitrag von dimpflmoser » So 2. Dez 2018, 14:43

Vielen Dank für deine Antwort. Sie hat in der Tat sehr geholfen.

Ich habe noch experimentiert und festgestellt, dass das eigentliche Problem früher im Code liegt - hier noch ein Beispiel. Die folgende Funktion ermittelt die Anzahl der Datensätze im Recordset. Anschließend wird der Zeiger wieder auf den ersten Datensatz gestellt:

Code: Alles auswählen

Function getRecordCount(objResult As Object) As Long
	Dim intCount As Long
	
	' Count initialisieren
	intCount = 0
	' ResultSet durchlaufen
	While objResult.Next()
		' Count inkrementieren
		intCount = intCount + 1
	Wend
	' Auf ersten Datensatz positionieren
	objResult.First()
	' RecordCount zurückgeben
	getRecordCount = intCount
End Function
Der Fehler wird erst in der Zeile objResult.First() erzeugt. Kommentiere ich den While-Block bzw. die First()-Zeile aus gibt es keine Probleme. Der Datensatzcursor lässt sich also nicht zurück bewegen. Das ist interessant, da das Recordset wie folgt angelegt wird:

Code: Alles auswählen

Function getResultSet(objDbCon As Object, strSql As String) As Object	
	Dim objStatement As Object
	Dim objResult As Object
	
	' Statement erstellen
	objStatement = objDbCon.createStatement()
	objStatement.ResultSetConcurrency = _
		com.sun.star.sdbc.ResultSetConcurrency.UPDATABLE
	objStatement.ResultSetType = _
		com.sun.star.sdbc.ResultSetType.SCROLL_SENSITIVE
	' Abfrage ausfuehren
	objResult = objStatement.executeQuery(strSql)
	' ResultSet zurückgeben
	getResultSet = objResult
End Function
Mit der internen HSQL-Datenbank hingegen läuft der Code problemlos - werden Recordsets by Firebird stets FORWARD_ONLY angelegt?

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten