Seite 1 von 1

Textfeldinhalte auf ID verlinken

Verfasst: Mo, 28.01.2008 17:09
von Gabriel123
Hallo,

ein besserer Titel für mein thema ist mir nicht eingefallen. Folgendes will ich versuchen:
In meiner Tabelle sind Kundedaten und zu jedem Kunden ein Feld Warenempfänger. Hat ein Kunde 2 Warenempfänger ist er auch zwei mal in der tabelle.
ID
1. Kunde1 KNR1 Name Vorname WarenempfängerXY WarenempfängerXY_Name
2. Kunde1 KNR1 Name Vorname WarenempfängerZZ WarenempfängerZZ_Name

Diese Daten habe ich nun an ein Array übergeben. Solange die KNR1 gleich bleibt werden die Warenempfänger ins Array geschrieben. ich habe also zu Kunde1 alle Warenempfänger erfasst. Dann gebe ich sie in einem textfeld wieder aus. Wenn ich im Formular also Kunde1 aktiv habe sehe im besagten Textfeld sofort alle Warenempfänger.

Nun wäre es genial wenn ich im Textfeld die Daten der Warenempfänger verlinken könnte. Klicke ich auf WarenempfängerXY springt das Formular zum entsprechenden Datensatz.(1.) Klicke ich auf den zweiten WarenempfängerZZ springt das Formular zum Datensatz (2.) Die ID habe ich im Array mit erfasst. Ich muss also nur wenn die daten aus dem Array ins Textfeld fließen eine Art Hyperlink schaffen auf eine ID.

So sieht der Code aus:

Code: Alles auswählen

Sub Abfrage
sKundenNr = thisComponent.drawpage.forms.getByName("gafuform").getByName("Kundennr.").Text
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSourceName = DatabaseContext.getByName("DBImportF4")
Verbindung = DataSourceName.GetConnection("","")
SQL_Anweisung = Verbindung.createStatement()
sql = "SELECT COUNT(*) FROM ""Adressen"" WHERE ""Kundennr."" = '" & sKundenNr & "' "

Ergebnis = SQL_Anweisung.executeQuery(sql)
   While Ergebnis.next()
   msgbox "Anzahl : " & Ergebnis.getString( 1 )
	wend
  
sql1 = "SELECT * FROM ""Adressen"" WHERE ""Kundennr."" = '" & sKundenNr & "' "
Ergebnis1 = SQL_Anweisung.executeQuery(sql1)
While Ergebnis1.next()
If Ergebnis1.getstring(3) = sKundennr then
A(0,j)=Ergebnis1.getstring(22)'anrede des Warenempf.
A(1,j)=Ergebnis1.getstring(24)'vorname des Warenempf.
A(2,j)=Ergebnis1.getstring(25)'nachname des Warenempf.
msgbox  A(0,j)&A(1,j)&A(2,j)
j=j+1
EndIf
wend
For l=0 to j
 sum=sum &A(0,l)&A(1,l)&A(2,l)&chr(13)
next
thisComponent.drawpage.forms.getByName("gafuform").getByName("sumbox").text = sum
 end sub
Ich suche irgendeine Möglichkeit bei klick auf den Text im Textfeld (kann auch eine liste werden oder so) eine aktion / Makro auszulösen. dann könnte ich einen filter setzen ...

Kann noch jemand diesen wüsten Gedanken folgen ?:)

Re: Textfeldinhalte auf ID verlinken

Verfasst: Mo, 28.01.2008 17:19
von Toxitom
Hei Gabriel,
Gabriel123 hat geschrieben:Kann noch jemand diesen wüsten Gedanken folgen ?:)
Ja, kann ich ;-)

Nimm statt einem Textfeld eine Listbox. Die Zeilen bereitest du doch sowieso schon per Basic auf - da kannst du auch sehr schön die Listbox-Zielen aufbereiten.
Die Listbox bietet diverse Ereignisse an: Einfacher Klick: Statusänderung , Doppelklick: Auslösen - da kanst du dann entsprechende Makros hinterlegen - der selektierte Eintrag ist dann immer auch der Eintrag, auf den "geklickt" wurde :-) - und den kannst du auslesen, oder den Index übernehmen.

Gruss
Thomas

Re: Textfeldinhalte auf ID verlinken

Verfasst: Mi, 30.01.2008 08:39
von Gabriel123
danke, das ist gut! werde ich probieren! Ich frage mich aber grad, warum ich nicht einfach ein TableControl nehm und diesen immer auf die aktuelle Kundennummer begrenze. Dann würde er mir doch auch nur alle Einträge mit gleicher Kundennummer anzeigen oder? Kann man TableControl eingrenzen? Einen Filter setzen? Wäre ja fast die elegenatere Lösung:)

Gabriel

Re: Textfeldinhalte auf ID verlinken

Verfasst: Mi, 30.01.2008 15:00
von Gabriel123
Ich habe jetzt mal alles in eine Liste ausgegeben:

Code: Alles auswählen

sql1 = "SELECT * FROM ""Adressen"" WHERE ""Kundennr."" = '" & sKundenNr & "' "
Ergebnis1 = SQL_Anweisung.executeQuery(sql1)
While Ergebnis1.next()
If Ergebnis1.getstring(3) = sKundennr then
A(j)=Ergebnis1.getstring(22)&Ergebnis1.getstring(24)&Ergebnis1.getstring(25)'anrede
j=j+1
EndIf
wend
thisComponent.drawpage.forms.getByName("gafuform").getByName("listbox1").StringItemList= A()
   end sub
Das klappt soweit. Nur wie genau kann ich jetzt den Sprung zum jeweiligen Kundendatensatz machen wenn ich auf einen Eintrag in der Liste klicke? Mein Array musste ich jetzt1 Dimensional machen. Die ID kann ich mit in die Listbox füllen, wie kann ich sie da aber wieder auslesen wenn alles ein Text ist?

Re: Textfeldinhalte auf ID verlinken / Listbox

Verfasst: Mi, 30.01.2008 16:45
von Gabriel123
Ich habe jetzt einfach mal die Listbox eingegrenzt ohne ein array:

Code: Alles auswählen

  Sub ListBox
    dim oDoc as object, oForm as object
    dim oListboxModel as object
    dim ssql(0) as string
	dim sKundennr
    sKundenNr = thisComponent.drawpage.forms.getByName("gafuform").getByName("Kundennr.").Text
    oDoc = ThisComponent
    oForm = oDoc.DrawPage.Forms.getbyname("gafuform")
    oListboxModel = oForm.getByName("ListBox2")
    ssql(0) = "select CONCAT("+CHR(34)+"Kundennr.1"+CHR(34)+", CONCAT(""Vorname1"",""Name1"")) AS ""NAME2"" from ""Adressen"" WHERE ""Kundennr.""= '" & sKundenNr & "' "
    oListboxModel.ListSource() = ssql()
    oListboxModel.refresh()
End Sub

Habe in der Listbox nun die korrekten daten. Ich bekomme aber zwischen den Daten in der listbox kein Leerzeichen hin. Da wird alles aneinander geklatscht und ich kanns kaum noch lesen. Anschließend muss bei Klick noch im Formular der entsprechende Datensatz angezeigt werden. Wie mach ich das denn?=) Von Weitem betrachtet versuche ich eigentlich eine Listbox als TableControl zu nutzen:)

Kann jemand weiter helfen? Was macht mehr sinn, der weg übers array oder das eingrenzen? Auch hier das Problem wieder sauber die ID auszulesen wenn sie in der Listbox steht...

Re: Textfeldinhalte auf ID verlinken

Verfasst: Mo, 04.02.2008 12:16
von Gabriel123
Keine Ideen?

Re: Textfeldinhalte auf ID verlinken

Verfasst: Mo, 04.02.2008 12:30
von Toxitom
Hey Gabriel,

na, du hast die Lösung doch sowieso schon selbst gefunden. Musst halt mit ConCat auch noch die Leerzeichen mit hinzufügen....
bsp:

Code: Alles auswählen

CONCAT("VorName", CONCAT(" ", "Nachname")
ergibt dein gewünschtes Ergebnis mit Leerzeichen. Musst du natürlich bei dir im Context doppelt maskieren - halt so wie der REst.

Gruss
Thomas

Re: Textfeldinhalte auf ID verlinken

Verfasst: Mo, 04.02.2008 14:44
von Gabriel123
Danke Thomas,

Ja das mit den Leerzeichen ist das kleinere Übel. Ich habe jetzt alles in der Listbox. Die ID steht an erster Stelle in der Listbox, wie kann ich die nun wieder auslesen? Das ganze Item der Listbox besteht ja durch CONCAT aus recht viel text.

Gabriel