ich löse über eine Tabellenspalte eines Formular ein Event aus.
Versuch mich dabei mit Hilfe des Handbuchs "Base" S. 392ff durchzukämpfen.
Ich möchte nach dem Aktualisieren eines Wertes, den einer anderen Spalte berechnen und anschließend per Update eintragen.
(Umrechnung von verschiedenen Ausgangseinheiten aus Auswerteeinheiten ,z.B. MWh -> kWh, MWh(ho) -> kWh, t(Pellet) -> kWh usw. beliebig erweiterbar.)
Dazu muss aber noch ein zugehöriger Umrechnungsfaktor aus einer anderen Tabelle in der Datenbank herausgefiltert werden.
Die Beziehung zwischen Einheiten und meiner Tabelle ist 1:n, eine entsprechende Indexspalte ist vorhanden.
Die SQL-Anweisung lautet z.B.
Code: Alles auswählen
"SELECT Umrechnungsfaktor, ID FROM Einheiten WHERE ID = 3"
Löse ich Sie im Code aus, gibt's jedoch eine Fehlermeldung:
Code: Alles auswählen
SUB Energiebezug_berechnen(oEvent as object)
' allg Formobjecte
dim oFeld as Object
dim oForm as Object
dim oTabForm as Object
' allg DB Objecte
DIM oConnection as object
DIM oDatasource as object
' SQL - Teil
DIM oSQL_Statement as object
DIM stSQL as STRING
DIM oResult as object
DIM stSQL2 as STRING
dim iREsult as INTEGER
DIM stTabelle1 as string
DIM stTabelle2 as string
DIM nName as Integer
DIM nSpalte as Integer
DIM stSpalte as String
DIM stIDSpalte as String
DIM stErgSpalte as String
'Datensatzinhalte
DIM ID1 as Integer
DIM ID2 as Integer
DIM Einheit1 as String
DIM Einheit2 as String
DIM Bezugsmenge as double
DIM Energie2 as double
DIM Faktor as double
oFeld = oEvent.Source
oTabForm = oFeld.Parent
oForm = oTabForm.Parent
oConnection = oForm.activeConnection()
oDatasource = thisComponent.Parent.dataSource
' oDatasource = thisDatebaseDocument.CurrentController
' IF NOT ( oDatasource.isConnected()) THEN oDatasource.connect()
'oConnection = oDatasource.getConnection("","")
' oConnection = oDatasource.ActiveConnection
oSQL_Statement = oConnection.createStatement
stTabelle1 = "WEZEnergie"
stSpalte = "Bezugsmenge"
stErgSpalte = "Energiebezug"
nName = oForm.findColumn(stSpalte)
Bezugsmenge = oForm.getDouble(nName)
stErgSpalte = "Einheit"
nName = oForm.findColumn(stErgSpalte)
Einheit1 = oForm.getString(nName)
stIDSpalte = "EinheitID"
nName = oForm.findColumn(stIDSpalte)
ID1 = oForm.getLong(nName)
stSQL2 = "SELECT ""Umrechnungsfaktor"", ""ID"" FROM ""Einheiten"" WHERE ""ID"" = 3" ' & ID1
oSQL_Statement = oConnection.prepareStatement(stSQL2)
oResult = oSQL_Statement.executeQuery(stSQL2)
stErgSpalte = "Umrechnungsfaktor"
nName = oResult.findColumn(stErgSpalte)
Faktor = oResult.getDouble(nName)
Code: Alles auswählen
Energie2 = Bezugsmenge * Faktor
stSQL = "UPDATE " & stTabelle1 _
& " SET Energiebezug = " & Energie2
END SUB
BASIC-Laufzeitfehler: Es ist eine Exception aufgetreten Type com.sun.star.sdbc.SQLException Message : No Data is available.
D.h. die Tabelle sei leer (warum auch immer)
Im oberen Teil habe ich auf verschiedene Wege Versucht (gem. Handbuch ) mich an die Datenbank anzukoppeln, das thisDatabase-Objekt kennt die Sub jedoch nicht, sodass ich mich im Moment an die Form gehängt habe.
Wir kann ich auf alle Tabellen der Datenbank zugreifen, auch solche die nicht auf dem Formular angezeigt werden?
Und wie funktioniert das mit den this... Objekten, wann kann ich auf die Zugreifen.
(Ich benutze OpenOffice 3.4.1)
Gruss Franky