Autor Beitrag
Klaus D.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 63



BeitragVerfasst: So 08.06.03 11:07 
Hey
Kann mir denn einer sagen(Stichworte reichen) was an folgender Anweisung falsch ist. Das Feld Typ ist ein Nachgeschlagenes Feld. Die eigentlichen Daten stehen in eine andere Tabelle.
-----------------------------------------
SELECT * FROM tbl_Typenschild WHERE Typ = 'Typ'
----------------------------------------------------
Muß ich beide Tabellen in meine Anweisung einbeziehen.
Alfons-G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 307

Win XP Prof, Linux, Win 7
D5 Prof, D7 Architect, D2005 Architect, D2007 Architect
BeitragVerfasst: So 08.06.03 12:34 
So, wie Du diese SQL-Anweisung geschrieben hast, wird nach einem String mit dem Inhalt "Typ" gesucht.
Nachschlagefelder, so wie die BDE sie liefert, sind ein Hilfsmittel zur Eingabe von Daten, aber nicht zum Suchen.

Um ein Nachschlagefeld per SQL zur Suche benützen zu können, musst Du als Nachschlagefeld eine normale List-, bzw. Combobox verwenden, welche Du in einer WHILE-Schleife mit den Daten aus der Nachschlagetabelle füllst. Dann kannst Du (z.B. bei einer ComboBox namens cbLookup) die SQL-Anweisung in Delphi mit strSQL := 'SELECT * FROM tbl_Typenschild WHERE Typ = ' + QuotedStr(cbLookup.Text); erzeugen. Alternativ könnest Du die Daten aus der Nachschlagetabelle auch in ein einspaltiges DBGrid laden und dieses auf ReadOnly setzen. Dann bekommst Du den vom Benutzer ausgewählten Eintrag folgendermaßen (angenommen, die DataSource des Grids heisst dsLookup):strSQL := 'SELECT * FROM tbl_Typenschild WHERE Typ = ' + QuotedStr(dsLookup.Fields[0].AsString);
8)

_________________
Alfons Grünewald
Klaus D. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 63



BeitragVerfasst: So 08.06.03 14:40 
Titel: Re
Hallo
Deine Antwort ist glaube ich für mich erst einmal nachvollziehbar, komme
einer Lösung aber nicht so richtig nahe!
In der Tabelle wo gesucht werden soll, stehen nur Schlüssel drin.
Ich def. für jeden Schlüssel ein Nachschlagefeld.
Dem Benutzer werden aber nur die Nachschlagefelder angezeigt(die Daten).
Ich möchte dann über ein Edit.OnChange Ereignis für dem Benutzer sichtbare Filter setzen.
Da die Datenbank irgendwann einmal im Netzwerk läuft ,möchte ich mit SQL arbeiten.
(DENKFEHLER ?????)
Ich danke im Voraus …Klaus Dabergott
Alfons-G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 307

Win XP Prof, Linux, Win 7
D5 Prof, D7 Architect, D2005 Architect, D2007 Architect
BeitragVerfasst: Mo 09.06.03 12:05 
Du hast also in Deienr Nachschlagetabelle die Schlüsselwerte und eine Textspalte, welche dem User angezeigt wird.
Hier gibt es auch eine einfache Lösung:
Du nimmst, wie gesagt, ein DB-Grid zur Anzeige und setzt die Spalte mit dem Schlüssel auf unsichtbar. Dann kannst Du wie gehabt die Benutzerauswahl abfragen. Du wertest dann einfach die Spalte mit dem Schlüssel aus.
Du kannst das Ganze an das OnDblClick-Ereignis des Grids hängen. So bekommt der User nach einem Doppelklick auf einen Nachschlagewert das Suchergebnis angezeigt.

Für die Lösung mit der Combobox ist dagegen handkodieren angesagt. Du erzeugst eine TStringList, welche Du parallel zur Combobox mit Wertepaaren in der Form Nachschlagewert=Schlüssel füllst. Im OnChange-Ereignis der Combobox fragst Du dann den Schlüsselwert aus der Stringlist ab. Anschließend übergibst Du ihn wie gehabt, der SELECT-Anweisung.

_________________
Alfons Grünewald