[gelöst] Lookup-Problem

19. Februar 2009 12:36

Mahlzeit,

Ich mal wieder mit einer kniffligen Frage:
Der Betreff ist vielleicht etwas ungenau, aber ich wußte nicht, wie ich`s sonst nennen sollte.


Ich möchte meinen Kontakten gern entsprechende Gruppen zuordnen. Dazu hab ich ne "Gruppentabelle" mit den Feldern ID(Primärschlüssel) und Bezeichnung erstellt.
Dazu wollt ich in der Kontakttabelle eine neues Feld machen (Gruppe) mit nem Lookup auf diese Tabelle.

Der Lookup geht aber (logischerweise) nur auf das Schlüsselfeld der Gruppentabelle und die entsprechende ID wird eingetragen.
Allerdings kann ich ja auf der Kontaktkarte wenig mit der ID anfangen, sondern hätte gern die Bezeichnung angezeigt (die ID wiederum nicht).

Ich bräuchte quasi ein Feld auf dem Formular (oder der Tabelle) mit "Speichere die id, aber zeige mir die entsprechende Bezeichnung". Ist sowas irgendwie möglich?



PS: Ein Workaround wäre vielleicht neben dem ID-Feld noch ein Flowfield mit der Bezeichnung in die Tabelle zu setzen.
Dann auf der Kontaktkarte das Flowfield über das ID-Feld zu legen, so dass von der ID nur noch der Lookup-Knopf zu sehen ist, aber das find ich irgendwie "unsauber".


Ich hoffe, die Erklärung ist halbwegs verständlich. Ansonsten einfach nachfragen.
Irgendjemand da draußen ne Idee?


Grüße
enno
Zuletzt geändert von enno am 20. Februar 2009 10:26, insgesamt 3-mal geändert.

Re: Lookup-Problem

19. Februar 2009 12:47

Das würde jetzt zu lange dauern es zu erklären. Wenn ich dich richtig verstanden habe, dann könnte die Tabelle "Post Code" interessant für dich sein. Schau dir dort doch mal die Funktionen an. Musst natürlich ein bisschen umändern, diese Tabelle besteht aus zwei Primärattributen.

Re: Lookup-Problem

19. Februar 2009 12:59

enno hat geschrieben:PS: Ein Workaround wäre vielleicht neben dem ID-Feld noch ein Flowfield mit der Bezeichnung in die Tabelle zu setzen.
Dann auf der Kontaktkarte das Flowfield über das ID-Feld zu legen, so dass von der ID nur noch der Lookup-Knopf zu sehen ist, aber das find ich irgendwie "unsauber".

Nicht nur du :wink:

Pack dir doch anstelle des Feldes der ID ein Control für eine Textvariable auf deine Form. Den Inhalt füllst du im OnAfterGetRecord anhand der ID mit der zugehörigen Beschreibung. Und im OnLookup des Controls setzt du einen Code, der eine Übersichtsform über deine Gruppentabelle öffnet. Also sowas wie
Code:
if form.runmodal(0,Gruppentabelle)=ACTION::LookupOK then
  begin
    GruppenID:=Gruppentabelle.ID;
    ObenErwähnteTextvariable:=Gruppentabelle.Beschreibung;
  end;

Re: Lookup-Problem

19. Februar 2009 15:05

McClane hat geschrieben:
enno hat geschrieben:PS: Ein Workaround wäre vielleicht neben dem ID-Feld noch ein Flowfield mit der Bezeichnung in die Tabelle zu setzen.
Dann auf der Kontaktkarte das Flowfield über das ID-Feld zu legen, so dass von der ID nur noch der Lookup-Knopf zu sehen ist, aber das find ich irgendwie "unsauber".

Nicht nur du :wink:

Pack dir doch anstelle des Feldes der ID ein Control für eine Textvariable auf deine Form. Den Inhalt füllst du im OnAfterGetRecord anhand der ID mit der zugehörigen Beschreibung. Und im OnLookup des Controls setzt du einen Code, der eine Übersichtsform über deine Gruppentabelle öffnet. Also sowas wie
Code:
if form.runmodal(0,Gruppentabelle)=ACTION::LookupOK then
  begin
    GruppenID:=Gruppentabelle.ID;
    ObenErwähnteTextvariable:=Gruppentabelle.Beschreibung;
  end;



das klingt schonmal nach nem guten Lösungsansatz ... sieht zumindest gut aus ... nur das er noch nicht die beiden Variablen aus der IF-Bedingung in die Tabelle zurückschreibt...

soll ich beim Runmodal den aktuellen Rec mit übergeben? das will so recht noch nicht klappen, aber ich probiers weiter :wink:

Re: Lookup-Problem

19. Februar 2009 15:11

Spätestens wenn du den Datensatz verlässt, schreibt er das in die DB. Oder meinst du, dass der neue Wert erst gar nicht auf der Form erscheint? Dann müsstest du testen, welche Action aus der Form zurück kommt (je nach Button kann das auch was anderes als LookupOk sein).

Beim runmodal übergibst du dein gefiltertes rec, das du schon hattest.

Re: Lookup-Problem

19. Februar 2009 15:15

aaahhh, ich habs ...

musste tatsächlich noch das "gruppentabelle" ins runmodal hinter die form schreiben

... jetz muss ich ersmtla grübeln, ob mir das logisch erscheint :lol:

VIELEN DANK

Re: [gelöst] Lookup-Problem

19. Februar 2009 17:31

so, da das so schön funktioniert, würd ich`s gern noch etwas aufbohren :-)

wenn ich den Wert eines normalen Looup-Feld nur zum Teil ausfülle, wird dieses ja automatisch komplett gefüllt ... dies ist hier natürlich nicht der Fall, da das Feld (auf dem Formular) ja eigentlich nix mit der Lookup-Tabelle zu tun hat ...

kriegt man es irgendwie hin, dass dieses Verhalten nachgebaut wird?

Re: Lookup-Problem

19. Februar 2009 18:00

Irgendsoeine Mischung aus Setfilter(Feld,'%1*',Eingabewert) und einem findfirst wird´s schon richten, denke ich.

Re: [gelöst] Lookup-Problem

20. Februar 2009 01:11

enno hat geschrieben:wenn ich den Wert eines normalen Looup-Feld nur zum Teil ausfülle, wird dieses ja automatisch komplett gefüllt ... dies ist hier natürlich nicht der Fall, da das Feld (auf dem Formular) ja eigentlich nix mit der Lookup-Tabelle zu tun hat ...
kriegt man es irgendwie hin, dass dieses Verhalten nachgebaut wird?

Du solltest für das Feld die Eigenschaft TableRelation für die Lookup-Tabelle einstellen. Da du der Trigger OnLookup ausprogrammiert hast, wird dieser den Standard Trigger aus TableRelation ersetzen. Doch die Automatik der TableRelation bei der nicht vollständigen Ausfüllung des Feldes bleibt.

Gruß, Michael

Re: [gelöst] Lookup-Problem

20. Februar 2009 10:25

Mykhaylo Libovych hat geschrieben:
enno hat geschrieben:wenn ich den Wert eines normalen Looup-Feld nur zum Teil ausfülle, wird dieses ja automatisch komplett gefüllt ... dies ist hier natürlich nicht der Fall, da das Feld (auf dem Formular) ja eigentlich nix mit der Lookup-Tabelle zu tun hat ...
kriegt man es irgendwie hin, dass dieses Verhalten nachgebaut wird?

Du solltest für das Feld die Eigenschaft TableRelation für die Lookup-Tabelle einstellen. Da du der Trigger OnLookup ausprogrammiert hast, wird dieser den Standard Trigger aus TableRelation ersetzen. Doch die Automatik der TableRelation bei der nicht vollständigen Ausfüllung des Feldes bleibt.

Gruß, Michael


Das geht ja leider nicht, da die TableRelation ja auf nen PrimaryKey zugreifen will, genau deswegen hab ich ja den manuallen Lookup reingebaut.


McClane hat geschrieben:Irgendsoeine Mischung aus Setfilter(Feld,'%1*',Eingabewert) und einem findfirst wird´s schon richten, denke ich.


Danke...
So hats tatsächlich geklappt, nur dass mit '%1*' wollte net gehn (obwohl eigentlich laut Hilfe syntaktisch richtig findet er da nix in der Tabelle).
Abhilfe schaffte:
Code:
SETFILTER(Gruppe,Name+'*');
FINDFIRST;

Re: [gelöst] Lookup-Problem

20. Februar 2009 10:58

SetFilter(Feld,strsubstno('%1*',Wert)) meinte ich (immer derselbe blöde Fehler ;)

Und ich schätze, dass Michael die Table Relation der Textbox auf der Form meinte.