Autor |
Beitrag |
Licki
      
Beiträge: 132
Knoppix, Win 95, Win 2000, Win NT, Win 98, Win XP
Delphi 3
|
Verfasst: Mo 29.09.03 11:06
Hallo...
Ich habe mir eine Datenbank erstellt, welche in das StringGrid geladen wird. Nun möchte ich eine Suchfunktion. Wenn man in ein Edit-Feld etwas eingibt und dan auf den Suchen-Button klickt, soll es zu dem nächsten Feld springen mit dem Suchergebnis.
Mein Code:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.SpeedButton1Click(Sender: TObject); begin with Table1 do begin Fieldbyname('KUNDEN_NUM').asString:=Edit1.text; gotoNearest; end; end; |
Sollte doch eigentlich richtig seien, oder? Es kommt aber immer der Fehler, dass die Tabelle nicht im Einfügemodus ist... Was heißt das?
Und gleich noch eine Frage, kann man es auch so machen, dass ALLE Felder durchsucht werden nach dem Suchbegriff. Also nicht nur ein bestimmtes Feld...? Wenn ja, wie geht das?
Danke im Voraus.
Gruss
Andre
|
|
CenBells
      
Beiträge: 1547
Win 7
Delphi XE5 Pro
|
Verfasst: Mo 29.09.03 12:49
Licki hat folgendes geschrieben: | Hallo...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| ... with Table1 do begin Fieldbyname('KUNDEN_NUM').asString:=Edit1.text; gotoNearest; end; ... |
Sollte doch eigentlich richtig seien, oder? Es kommt aber immer der Fehler, dass die Tabelle nicht im Einfügemodus ist... Was heißt das?
|
Hallo,
dein Code ist nicht richtig. Du versuchst mittels FieldByName('Kunden_Num').AsString := Edit1.Text;
in die Tabelle zu schreiben. Da du kein edit aufgerufen hast, kommt auch der Fehler.
Zum suchen musst du nicht in die Tabelle schreiben, sondern sowas wie Table.locate benutzen oder, wenn deine Datenbank das unterstüzt und du weißt wie sowas geht, SQL mit einem Query verwenden.
Als andere Lösung kannst du auch Filter strings verwenden.
Gruß
Ken
_________________ Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Mo 29.09.03 13:55
Hallo,
hier ein Beispiel aus der Delphi-Hilfe zum Thema:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| with Table1 do begin SetKey; FieldByName('Bundesstaat').AsString := 'CA'; FieldByName('Stadt').AsString := 'Santa'; GotoNearest; end; |
Alles weiter kannst Du in der bereits erwähnten Delphi-Hilfe nachlesen.
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
Licki 
      
Beiträge: 132
Knoppix, Win 95, Win 2000, Win NT, Win 98, Win XP
Delphi 3
|
Verfasst: Mo 29.09.03 14:18
Das habe ich nun auch so angewendet, aber beim Starten des Programms bekomme ich den Fehler "kein Index zugeordnet" und die Suchfunktion funktioniert auch nicht. Aus der Delphi Hilfe werde ich auch nicht schlau, ...
|
|
grayfox
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: Mo 29.09.03 16:09
hallo licki!
Zitat: | Aus der Delphi Hilfe werde ich auch nicht schlau ... |
das kann ich gar nicht verstehen
wenn du die fehlermeldung, die du bekommen hast, durchliest, dann sollte dir auffallen, dass die felder nach denen du suchst, indiziert sein müssen (set key und gotofirst, next, etc funktionieren nur mit indizierten feldern)
zur lösung deines suchproblems würde ich dir filter empfehlen. damit funktioniert das am einfachsten und du bist in der wahl der suchfelder flexibel.
bau dir eine eingabemaske mit editfeldern und belege sie mit einem '*' vor. nach dem starten der suchroutine überprüfe die editfelder auf einträge <> '*' und du hast schon die suchfelder und die inhalte nach denen gesucht werden soll.
mfg, stefan
|
|
Licki 
      
Beiträge: 132
Knoppix, Win 95, Win 2000, Win NT, Win 98, Win XP
Delphi 3
|
Verfasst: Di 30.09.03 10:35
Gibt es aber auch einen anderen Weg einen Index zuuordnen? Also so in der Art zu sagen, dass er in Spalte 1 immer suchen soll?
|
|
Licki 
      
Beiträge: 132
Knoppix, Win 95, Win 2000, Win NT, Win 98, Win XP
Delphi 3
|
Verfasst: Di 30.09.03 14:14
Ok, bin nun auf das Problem gekommen. Dieser Code funktioniert:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| with table1 do begin setkey; FieldByName('KUNDEN_NUM').AsString:=Edit1.text; GotoNearest; end; |
Jedoch nur bei Paradox (*.db) Tabellen. Würde diese Funktion aber auch gerne mit dbase (*.dbf) Dateien nutzen. Wie geht dies, kann mir jemand helfen?
|
|
|