Versuch's mal damit.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69:
| procedure TForm1.edt1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_Return then edt1Change(Self); end;
procedure TForm1.edt1Change(Sender: TObject); var feldname : string; suchwort : string; DS : TDataset; begin if (Length(edt1.text) >2) or (sender <> edt1) then begin feldname := cbb1.text; suchwort := Edt1.Text; DS := DBGrid.DataSource.DataSet; DS.active := FALSE; DS.Filter := Feldname + ' = '#39 + SuchWort + '*'#39; DS.Filtered := TRUE; DS.active := TRUE; if DS.Recordcount = 0 then begin Information(suchwort + ' nicht gefunden'); end else begin SuchRoutine(DS); end; end; end;
procedure Fehler(s: string); begin messageDlg(s, mtError, [mbOk], 0); end;
procedure Information(s: string); begin messageDlg(s, mtInformation, [mbOk], 0); end;
procedure Hilfe(s: string); begin messageDlg(s, mtInformation, [mbHelp], 1); end;
procedure Warnung(s: string); begin messageDlg(s, mtWarning, [mbOk], 0); end;
function Bestaetigung(s: string): Boolean; begin Bestaetigung := (messageDlg(s, mtConfirmation, [mbYes, mbNo], 0) = mrYes); end;
procedure TForm1.Suchroutine(DS : TDataset); var Erg : boolean; begin Erg := DS.FindFirst; DBGrid1.SelectedField := DS.FieldByName(Feldname); while Erg do begin if Bestaetigung('Weitersuchen?') then Erg := DS.FindNext; end; end; |
Das sollte eigentlich funktionieren. Habe es allerdings nicht getestet. Die Routinen FindFirst, Findnext, Findprior und FindLast sind bei der Komponente TDataset definiert, um in gefilterten Datensätzen zu suchen. Dazu musst Du dann die Tabelle filtern, wie hier gezeigt, und dann in der gefilterten Datentabelle suchen lassen. Allerdings ist dann auch die Anzeige gefiltert!!
Habe Dir auch noch die Routinen für Messageboxen dazugepackt, die ich benutze. Denn ich habe nicht ständig Lust, nach irgendwelchen mtxxx oder mbxxx nachzusuchen.
Um den Puristen hier gleich das Wort vorweg zu nehmen. Ich achte nicht bei jeder Sache darauf, ob sie optimale Performance haben. Es muss nur sicher funtionieren. Und manchmal habe ich festgestellt, dass eine optimale Performance nicht immer das Sicherste ist. Mag ja sein, dass dies an meinen - selbst angeeigneten - Programmierfähigkeiten liegt, aber so bin ich nun mal.

Toleranz ist eine Grundvoraussetzung für das Leben.