Autor Beitrag
Licki
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 132

Knoppix, Win 95, Win 2000, Win NT, Win 98, Win XP
Delphi 3
BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Mo 29.09.03 12:49 
Licki hat folgendes geschrieben:
Hallo...



ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Mo 29.09.03 13:55 
Hallo,

hier ein Beispiel aus der Delphi-Hilfe zum Thema:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 132

Knoppix, Win 95, Win 2000, Win NT, Win 98, Win XP
Delphi 3
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 132

Knoppix, Win 95, Win 2000, Win NT, Win 98, Win XP
Delphi 3
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 132

Knoppix, Win 95, Win 2000, Win NT, Win 98, Win XP
Delphi 3
BeitragVerfasst: Di 30.09.03 14:14 
Ok, bin nun auf das Problem gekommen. Dieser Code funktioniert:

ausblenden 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?