ich bastle gerade an einer DVD Datenbank (alles komplett in einer Basedatei). Im Eingabefenster sollen einige Werte aus einer Abfrage als Vorgabewerte übernommen werden. Ich habe zwar eine Lösung gefunden, die aber eher schlecht als echt funktioniert. Vielleicht hat jemand von euch eine bessere Idee.
Hier erstmal meine Lösung:
Code: Alles auswählen
Sub SIni
DIM oForm as Object
DIM oStatement as Object
DIM oResults as Object
DIM oFeld as Object
oForm=ThisComponent.drawpage.GetForms.GetByName("MainForm")
oStatement=oForm.ActiveConnection.createStatement()
oResults=oStatement.executeQuery("SELECT ""Filme"".""DVDNr"", ""Filme"".""Filmname"", ""Filme"".""Genere"", ""Filme"".""Sprache"", ""Filme"".""ID"" FROM ""Filme"" ""Filme"", ""MAXID"" ""MAXID"" WHERE ( ""Filme"".""ID"" = ""MAXID"".""MaxID"" )")
oResults.next()
oFeld=oForm.getByName("EDVD")
OFeld.Text=oResults.getInt(1)
oFeld=oForm.getByName("EID")
OFeld.Text=oResults.getInt(5)+1
oFeld=oForm.getByName("txtFilmname")
OFeld.Text=oResults.getString(2)
oFeld=oForm.getByName("EGenere")
OFeld.Text=oResults.getString(3)
oFeld=oForm.getByName("ESprache")
OFeld.Text=oResults.getString(4)
oForm.UpdateInt(1,oResults.getInt(5)+1)
oForm.UpdateFloat(2,oResults.getInt(1))
oFeld=oForm.getByName("txtFilmname")
oForm.UpdateString(3,OFeld.Text)
oFeld=oForm.getByName("EGenere")
oForm.UpdateString(4,OFeld.Text)
oFeld=oForm.getByName("ESprache")
oForm.UpdateString(5,OFeld.Text)
End Sub
Sub LoadIni
DIM oForm as Object
DIM oFeld as Object
oForm=ThisComponent.drawpage.GetForms.GetByName("MainForm")
oFeld=oForm.getByName("EID")
If oFeld.Text="0" Then SIni
End Sub
Die Datenbankverbindung bekomme ich über oStatement=oForm.ActiveConnection.createStatement(). Gibt es noch einen anderen Weg die Datenbankverbindung zu der gerade aktiven Basedatei zu bekommen (ohne über die Datenbankregistrierung und die Dateiposition auf der Festplatte zu gehen)?
Dann fülle ich die verschiedenen Felder des Formulares. Dabei ist mir aufgefallen, dass der Text zwar in den Feldern steht, aber nicht ins Formular übernommen wurde. Das war erst behoben, als ich die oForm.UpdateString(3,OFeld.Text) noch zusätzlich einfügte. Ist das normal oder mache ich etwas falsch.
Das nächste Problem ist es diese Prozedur beim Öffnen des Formulars auszuführen. Ich hatte das erst über das "Beim Laden" Ereignis des Formulars versucht, dann wurden aber die Felder nicht mehr in die Abfrage übernommen sondern wieder nur gefüllt.
Das habe ich umgangen, indem ich die Prozedur LoadIni beim ersten Fokuserhalt eines Eingabefeldes aufrufe. Das funktioniert zwar, scheint mir aber äußerst unelegant.
Vielen Dank im Voraus.
Gruß
Frank Lauer