Datenbank: MyBase • Zugriff über: TD Pro
Navigation in DBGrid + Anfangsbuchstabe
Guten Abend,
wie kann ich folgendes umsetzen? Mir fehlt einfach der Ansatz. Ich habe ein DBGrid mit verschiedenen Kontakten. Wenn das DBGrid aktiviert ist und ich die Taste z.B.: "K" drücke, soll er zum 1. Kontakt, der mit "K" anfängt navigieren. Das mit dem Tastendruck und das nur diese Aktion ausgeführt wird, wenn das DBGrid aktiviert ist, bekomme ich hin. Ich weiß nur nicht, wie ich das andere realisieren soll. Wäre für alle Hinweise, Ansätze, etc. dankbar. Gruß, Sven |
Re: Navigation in DBGrid + Anfangsbuchstabe
Ich kenne MyBase überhaupt nicht, aber ein Lösungsansatz könnte so aussehen (ohne jede Gewähr): zunächst den ersten Datensatz mit den gegebenen Kriterien ermitteln.
SQL-Code:
Auf diesen Datensatz nun ein Locate loslassen.
SELECT TOP 1 * FROM Tabelle
WHERE Name LIKE 'K%' ORDER BY Name Das funktioniert natürlich nur, wenn MyBase Limitierung kennt, und da kann die Syntax auch abweichen, zur Not Dokumentation konsultieren. |
Re: Navigation in DBGrid + Anfangsbuchstabe
Das mit Locate sollte Funktionieren aber ich bekomme nicht den 1. Datensatz in Abhängigkeit des Buchstabens.
Delphi-Quellcode:
Hier springt er zu dem Datensatz, setzt aber voraus, dass Ali existiert. Schöner wäre sowas wie "A*" und dann geht es zum 1. Datensatz mit "A".
cds_filme.Locate('TITEL','Ali', [loPartialKey, loCaseInsensitive] ); // loPartialKey = Suchtext kann auch teilweise vorkommen
// loCaseInsensitive = Ignoriert Groß-Kleinschreibung |
Re: Navigation in DBGrid + Anfangsbuchstabe
Zitat:
|
Re: Navigation in DBGrid + Anfangsbuchstabe
sorry habe gerade meinen Post editiert.
|
Re: Navigation in DBGrid + Anfangsbuchstabe
Ich habe noch ein wenig rumgespielt. Ich habe es jetzt hinbekommen.
Delphi-Quellcode:
Dadurch springt er zum 1.Datensatz, wo der Titel mit A anfängt.
cds_filme.Locate('TITEL','A', [loPartialKey, loCaseInsensitive] );
Danke. |
Re: Navigation in DBGrid + Anfangsbuchstabe
Ich habe das mit der Adressen-Sucherei folgendermassen gelöst:
Delphi-Quellcode:
Läuft prima und ist die Luxus-Lösung.
KeySuchStr: string; //allg. als globale Variable in der Unit
procedure TAdressen.DBGrid1KeyPress(Sender: TObject; var Key: Char); begin if Datasource1.state=dsbrowse then begin TimerEingabe.Enabled:=False; if ord(Key)=27 then //bei ESC Sucheingabe löschen begin KeySuchStr:=''; end else begin if ord(Key)<>8 then //bei BackSpace letzes Zeichen löschen begin KeySuchStr:=KeySuchStr+Key; end else begin Delete(KeySuchStr,length(KeySuchStr), 1); end; end; TimerEingabe.Enabled:=True; end; end; procedure TAdressen.TimerEingabeTimer(Sender: TObject); begin PvQuery1.DisableControls; TimerEingabe.Enabled:=False; // PvQuery1.Locate('Name', KeySuchStr, [loCaseInsensitive,loPartialKey]); //alternativ, besser PvQuery1.Params.CreateParam(ftString, 'pName', ptInput); PvQuery1.Close; PvQuery1.SQL.Clear; PvQuery1.SQL.Add('select * FROM Adressen a WHERE name like :pName order by Name'); PvQuery1.Params.ParamByName('pName').AsString:=KeySuchStr+'%'; PvQuery1.Open; PvQuery1.Params.Clear; // PvQuery1.EnableControls; TimerEingabe2.Enabled:=True; end; procedure TAdressen.TimerEingabe2Timer(Sender: TObject); begin TimerEingabe2.Enabled:=False; KeySuchStr:='': end; Der eine Timer fasst die Eingaben zusammmen, so dass nicht bei jedem Buchstaben innert kürzester Zeit eine SQL Abfräge rausgeht, der andere Timer löscht nach einer gewissen Zeit den Suchstring. Mit ESC ist wieder die vollständige Tabelle sichtbar. Gruss Beni |
Re: Navigation in DBGrid + Anfangsbuchstabe
Was zum Teufel hat da ein Timer zu suchen ?? :shock:
|
Re: Navigation in DBGrid + Anfangsbuchstabe
Zitat:
Delphi-Quellcode:
Ausprobieren...
Was ich nicht geschrieben habe, sind die Werte:
TimerEingabe.Interval:=1000; // Das heisst: nach dem letzen Tastendruck verstreicht eine Sekunde, bis die Anfrage als SQL-String an den Server gesendet wird. Mit der obigen Routine kann man nicht nur nach *dem* Anfangsbuchstaben sondern nach einem Anfangs-String suchen. TimerEingabe2.Interval:=2000; //nach 2Sekunden wird der in der Unit definierte Globalstring gelöscht. Irgendwann müssen ja die Anfangsbuchstaben gelöscht werden |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz