Seite 1 von 1
Kombinationsfeld und Textfelder
Verfasst: Fr, 17.06.2005 13:42
von Ir0nhead7
Hallo,
ich habe eine Datenbank erstellt und mit Daten gefüllt. (Open Office 2.0 Beta)
Beispiel
Firma Ardesse Tel
Fuchs Ag Strasse 12 12345
Nun habe ich ein Kombinationsfeld auf mein Formular gezogen und dem Kombifeld die Spalte Firma zugeordnet. Soweit so gut.
Desweiterern habe ich 2 Textfelder. Planmässig sollen die sich auf das Kombinationsfeld beziehen.
Das heisst wenn ich im Kombinationsfeld Fuchs Ag auswähle, soll im ersten Textfeld die dazugehörige Adresse stehen und im anderen Textfeld die Telefonnummer.
Aber irgendwie reagiert er garnicht auf veränderung des Kombinationsfeld.
Frage: Wie bekomme ich eine zuordung bzw verknüpfung erstellt?
schonmal dankeschön im vorraus
Verfasst: Di, 21.06.2005 16:45
von Onkel Hatti
Moin
Ich nutze dabei ein weiteres Kombifeld (Combobox), namens "dummy".
Auf das Ereignis "Text modifiziert" rufe ich ein Makro auf.
Diese Makro entnimmt aus der Combobox den Text.
Dann erstelle ich ein SQL-Statement
Select 'Adresse1' from "Adresse" Where 'Name'='text aus der Combobox'
Dieses SQL-Statement ordne ich mittels
DummyCombobox.ListSource=SQL-Statement der Combobox "dummy" zu.
Mittels getItem(0) hole ich das Erste Ergebnis der Abfrage aus der Combobox "dummy" (Es sollte ja eigentlich nur ein Ergebnis geben).
Und mit
textFeld.Text=dummyText.getItem(0) weise ich den Text dem eigentlichen Textfeld zu.
Hier ein Codefragment:
Sub MakeGenre
oDoc=thiscomponent
oForm = oDoc.drawpage.forms(0)
Combo1 = oForm.getByName("Combobox")
GeText = oForm.getByName("Textfeld")
dummy = oForm.getByName("dummy")
dummyText = oDoc.getCurrentController.GetControl(dummy)
sSQL = "Select ""GKurz"" from ""Genre"" where ""GLang"" = '" & Combo1.Text & "'"
dummy.ListSource = sSQL
GeText.Text=dummyText.getItem(0)
GeText.Commit()
End Sub
Verfasst: Mi, 22.06.2005 09:08
von Ir0nhead7
Hallo,
erstmal danke für die Antwort.
Mein Quellcode sieht etwas anders aus, da ich das dummyfeld nicht benutze.
Allerdings funktioniert das SQL Statement nicht. Habe ich vieleicht irgendwo ein Syntaxfehler?
dim hilf as string
dim oDBConnection, oDBContext, oDataSource, oStatement, oResultset as Object
sDBName = "AN_Tabelle2"
oDBContext=CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource=oDBContext.GetByName(sDBName)
oDBConnection=oDataSource.GetConnection("","")
oStatement=oDBConnection.createStatement()
hilf=oStatement.executeQuery(SELECT "PLZ" FROM "An_Tabelle")
oDoc=thiscomponent
oForm = oDoc.drawpage.forms(0)
text1= oForm.getByName("TextBox")
text1.text=hilf
Verfasst: Mi, 22.06.2005 18:28
von Onkel Hatti
Ir0nhead7 hat geschrieben:Hallo,
erstmal danke für die Antwort.
Mein Quellcode sieht etwas anders aus, da ich das dummyfeld nicht benutze.
Allerdings funktioniert das SQL Statement nicht. Habe ich vieleicht irgendwo ein Syntaxfehler?
dim hilf as string
dim oDBConnection, oDBContext, oDataSource, oStatement, oResultset as Object
sDBName = "AN_Tabelle2"
oDBContext=CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource=oDBContext.GetByName(sDBName)
oDBConnection=oDataSource.GetConnection("","")
oStatement=oDBConnection.createStatement()
hilf=oStatement.executeQuery(SELECT "PLZ" FROM "An_Tabelle")
oDoc=thiscomponent
oForm = oDoc.drawpage.forms(0)
text1= oForm.getByName("TextBox")
text1.text=hilf
Hmmm, die Variable sDBName heisst AN_Tabelle2, die SQL-Abfrage bezieht sich auf AN_Tabelle, das kann aber nur ein Fehltipper sein...
1.
Das Statement selber besteht aus der Variable SELECT, dem String PLZ, der Variable FROM und dem String AN_Tabelle.
Das heisst, das SELECT und so weiter muss ebenfalls in Gänsefüße gestellt werden.
hilf=oStatement.executeQuery("SELECT ""PLZ"" FROM ""An_Tabelle""")
Das sollte es sein.
Man kann das im Debugger überprüfen, wenn man vorher eine Variable definiert
sSQL="SELECT ""PLZ"" FROM ""An_Tabelle"""
hilf=oStatement.executeQuery(sSQL)
2.
Das Ergebnis eines SELECT Statements ist ein ResultSet.
Der Zugriff auf ein Resultset erfolgt anders, die Lösung hab ich aber nicht parat, deshalb nutze ich die "Dummy" Box

Verfasst: Mi, 22.06.2005 18:35
von Onkel Hatti
Anonymous hat geschrieben:Quellcode:
oDoc=thiscomponent
oForm = oDoc.drawpage.forms(0)
Combo = oForm.getByName("ComboBox2")
dim oDBConnection, oDBContext, oDataSource, oStatement, oResultset as Object
sDBName = "Bibliography"
oDBContext=CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource=oDBContext.GetByName(sDBName)
oDBConnection=oDataSource.GetConnection("","")
oStatement=oDBConnection.createStatement()
Combo.Listsource=oStatement.execute("SELECT Author FROM biblio WHERE Identifier='BOR02a'")
Das ist jetzt mein aktueller Quellcode. Doch wenn ich das Makro ausführe bekomme ich immer diesen Fehler:
Der Inhalt eines Kombinations oder Listenfeldes konnte nicht ermittelt werden.
Syntax error in SQl Expression
Zwei Fehler, die mir sofort auffallen:
1. ist das Fehlen jeglicher Gänsefüße im SQL-Statement.
Tabellenspalten müssen in Gänsefüße gestellt werden, Werte in einfache Füße
("SELECT ""Author"" FROM ""biblio"" WHERE ""Identifier""='BOR02a'")
2. Die Combobox macht das Ausführen von Statements selber, das ist das Schöne, also kein "Statement.execute" setzen.
einfach
Combo.Listsource="SELECT ""Author"" FROM ""biblio"" WHERE ""Identifier""='BOR02a'"
Dat machted. Und kann man überprüfen, das auf dem Reiter "Daten" der Eigenschaften der Combobox das SQL Statement dort auftaucht.
Der Inhaltstyp muss dafür auf SQL stehen.
Verfasst: Do, 23.06.2005 13:58
von Ir0nhead7
Super jetzt funktioniert es.
Wenn ich mehrere Felder ausfüllen möchte, kann ich die dann in einer dummyCombobox reinschreiben und dann mit
GeText1.Text=dummyText.getItem(0)
GeText2.Text=dummyText.getItem(1)
GeText3.Text=dummyText.getItem(2)
zuweisen?! oder brauche ich für jedes Feld eine eigene DummyCombobox
Select:
"Select" "Feld1" , "Feld" , "Feld3" "From" "Tabelle"
Wie ist das eigentlich mit den Kommas ? müssen die auch irgendwie in speziellen Zeichen gesetzt werden? Denn so funktioniert es auch nicht
"Feld1"",""Feld"","
und wenn ich die Kommas nicht in Gänsefüschen setze kommt eine Fehlermeldung
Verfasst: Do, 23.06.2005 18:21
von Onkel Hatti
Ir0nhead7 hat geschrieben:Super jetzt funktioniert es.
Wenn ich mehrere Felder ausfüllen möchte, kann ich die dann in einer dummyCombobox reinschreiben und dann mit
GeText1.Text=dummyText.getItem(0)
GeText2.Text=dummyText.getItem(1)
GeText3.Text=dummyText.getItem(2)
zuweisen?! oder brauche ich für jedes Feld eine eigene DummyCombobox
Select:
"Select" "Feld1" , "Feld" , "Feld3" "From" "Tabelle"
Wie ist das eigentlich mit den Kommas ? müssen die auch irgendwie in speziellen Zeichen gesetzt werden? Denn so funktioniert es auch nicht
"Feld1"",""Feld"","
und wenn ich die Kommas nicht in Gänsefüschen setze kommt eine Fehlermeldung
Nein, du brauchst keine weiteren Boxen, das geht genau so, wie dus beschrieben hast.
Die Kommas gehören zur SQL-Anweisung, dürfen also selber nicht in Gänsefüße gesetzt werden.
testVar="Select * from ""Tab1"",""Tab2"" where ""test""='hallo'"
daraus wird dann die SQL Anweisung
Select * from "Tab1","Tab2" where "test"='hallo'
Wie gesagt, nachprüfen kann man das auf dem "Daten"-Reiter der Eigenschaft der Combobox (hier also der Dummy-Box.
Nachdem das Makro durchgelaufen ist, steht dort der zugewiesene SQL-Befehl im Klartext. In der Dummy-Box selber sind natürlich die Werte der Abfrage eingetragen.
Gruß
Verfasst: Fr, 24.06.2005 08:17
von Ir0nhead7
Moin,
also wenn ich mit den Stern Arbeite gibt er mir immer nur die erste Spalte aus.
Select
dummy.Listsource="SELECT * FROM""Haupt""WHERE""Firma""='" & Combo.Text & "'"
Die Listbox beinhaltet dann nur einen Wert.

Verfasst: So, 26.06.2005 15:49
von Onkel Hatti
Ja, leider kann die Combobox nicht mehr.
Wenn du mehr haben willst, dann musst du auf die Datenbank einen Select-Befehl loslassen, der dann über das Resultset ausgewertet wird.
Grußinger
Verfasst: Di, 28.06.2005 13:13
von Ir0nhead7
Alles klar nochmals besten Dank
