Kombinationsfeld und Textfelder

Das Textverarbeitungsprogramm

Moderator: Moderatoren

Ir0nhead7
Beiträge: 9
Registriert: Fr, 17.06.2005 13:34

Kombinationsfeld und Textfelder

Beitrag 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
Onkel Hatti
***
Beiträge: 97
Registriert: So, 15.05.2005 15:44

Beitrag 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
Ir0nhead7
Beiträge: 9
Registriert: Fr, 17.06.2005 13:34

Beitrag 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
Onkel Hatti
***
Beiträge: 97
Registriert: So, 15.05.2005 15:44

Beitrag 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 :wink:
Onkel Hatti
***
Beiträge: 97
Registriert: So, 15.05.2005 15:44

Beitrag 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.
Ir0nhead7
Beiträge: 9
Registriert: Fr, 17.06.2005 13:34

Beitrag 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
Onkel Hatti
***
Beiträge: 97
Registriert: So, 15.05.2005 15:44

Beitrag 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ß
Ir0nhead7
Beiträge: 9
Registriert: Fr, 17.06.2005 13:34

Beitrag 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. :?:
Onkel Hatti
***
Beiträge: 97
Registriert: So, 15.05.2005 15:44

Beitrag 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
Ir0nhead7
Beiträge: 9
Registriert: Fr, 17.06.2005 13:34

Beitrag von Ir0nhead7 »

Alles klar nochmals besten Dank :D
Antworten