(Gelöst) Füllen eines Eingabeformulares mit Vorgabewerte aus

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: (Gelöst) Füllen eines Eingabeformulares mit Vorgabewerte aus

von Frank Lauer » Fr, 29.12.2006 15:40

Hallo zusammen,

ich habe nun eine Weitaus elegantere Lösung gefunden:

Ich verknüpfe die Felder des Formulars nicht mehr mit der Datenbank sondern verwende das Formular nur noch um die Connection zu erhalten (oForm=ThisComponent.drawpage.GetForms.GetByName("MainForm") ).
Den Rest mache ich ohne die Automatik (die mir noch etwas buggy erscheint) über SQL per Makro. Verrückt erweise benötige ich dabei sogar weniger Quelltext.

PS.: Kann es sein, dass StarBasic in Base bein einer Exception einfach anhält ohne die Exception auszugeben (Bei mir war es zumindest son! Bug?)

(Gelöst) Füllen eines Eingabeformulares mit Vorgabewerte aus

von Frank Lauer » Do, 28.12.2006 11:26

Hallo zusammen,

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 Prozedur SIni übernimmt die Daten aus der Abfrage und trägt sie in die Felder des Formulars ein.
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

Nach oben