AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Navigation in DBGrid + Anfangsbuchstabe
Thema durchsuchen
Ansicht
Themen-Optionen

Navigation in DBGrid + Anfangsbuchstabe

Ein Thema von Piro · begonnen am 9. Jan 2008 · letzter Beitrag vom 29. Jan 2008
Antwort Antwort
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#1

Navigation in DBGrid + Anfangsbuchstabe

  Alt 9. Jan 2008, 18:58
Datenbank: MyBase • Zugriff über: TD Pro
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

Re: Navigation in DBGrid + Anfangsbuchstabe

  Alt 9. Jan 2008, 19:21
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:
SELECT TOP 1 * FROM Tabelle
WHERE Name LIKE 'K%'
ORDER BY Name
Auf diesen Datensatz nun ein Locate loslassen.
Das funktioniert natürlich nur, wenn MyBase Limitierung kennt, und da kann die Syntax auch abweichen, zur Not Dokumentation konsultieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Navigation in DBGrid + Anfangsbuchstabe

  Alt 10. Jan 2008, 09:32
Das mit Locate sollte Funktionieren aber ich bekomme nicht den 1. Datensatz in Abhängigkeit des Buchstabens.

Delphi-Quellcode:
cds_filme.Locate('TITEL','Ali', [loPartialKey, loCaseInsensitive] ); // loPartialKey = Suchtext kann auch teilweise vorkommen
                                                                     // loCaseInsensitive = Ignoriert Groß-Kleinschreibung
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".
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Navigation in DBGrid + Anfangsbuchstabe

  Alt 10. Jan 2008, 09:40
Zitat:
Gibt es bei Locate Wildcards oder vergleichbaren?
Jein, du kannst in de Locateoptions loPartialKey setzen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Navigation in DBGrid + Anfangsbuchstabe

  Alt 10. Jan 2008, 09:41
sorry habe gerade meinen Post editiert.
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Navigation in DBGrid + Anfangsbuchstabe

  Alt 10. Jan 2008, 09:53
Ich habe noch ein wenig rumgespielt. Ich habe es jetzt hinbekommen.
cds_filme.Locate('TITEL','A', [loPartialKey, loCaseInsensitive] ); Dadurch springt er zum 1.Datensatz, wo der Titel mit A anfängt.

Danke.
  Mit Zitat antworten Zitat
bisenegger

Registriert seit: 25. Okt 2006
Ort: Kriens
14 Beiträge
 
#7

Re: Navigation in DBGrid + Anfangsbuchstabe

  Alt 28. Jan 2008, 21:07
Ich habe das mit der Adressen-Sucherei folgendermassen gelöst:

Delphi-Quellcode:
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;
Läuft prima und ist die Luxus-Lösung.
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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: Navigation in DBGrid + Anfangsbuchstabe

  Alt 28. Jan 2008, 23:18
Was zum Teufel hat da ein Timer zu suchen ??
Gruß
Hansa
  Mit Zitat antworten Zitat
bisenegger

Registriert seit: 25. Okt 2006
Ort: Kriens
14 Beiträge
 
#9

Re: Navigation in DBGrid + Anfangsbuchstabe

  Alt 29. Jan 2008, 12:46
Zitat von Hansa:
Was zum Teufel hat da ein Timer zu suchen ??
Ich habe dies noch geschrieben?

Delphi-Quellcode:
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
Ausprobieren...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:16 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