AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Ähnliche Datensätze in TDataSet finden
Thema durchsuchen
Ansicht
Themen-Optionen

Ähnliche Datensätze in TDataSet finden

Ein Thema von sirtoby73 · begonnen am 18. Dez 2003 · letzter Beitrag vom 18. Dez 2003
Antwort Antwort
sirtoby73

Registriert seit: 17. Sep 2003
19 Beiträge
 
Delphi 7 Professional
 
#1

Ähnliche Datensätze in TDataSet finden

  Alt 18. Dez 2003, 14:47
Ich möchte ein Formular zur Anzeige von Personendaten (Nachname, Adresse etc.), dessen Inhalte aus einer TADOQuery kommen, per Tastatureingabe auf einen Datensatz positionieren.
Beispiel: Bei Eingabe von "M" soll auf den ersten mit M beginnenden Nachnamen (z.B. "Mahr") positioniert werden.

Die Datensätze sind schon alphabetisch nach Nachname sortiert.
Locate zieht offensichtlich nur bei exakter Übereinstimmung, ich bräuchte sowas wie den LIKE-Operator in SQL. SQL kann ich aber nicht nehmen, weil ich die Datenmenge ja nicht einschränken will, sondern nur eine Positionierung nach Eingabe des Buchstabens vorgenommen werden soll. Es sollen weiterhin alle Datensätze im Recordset vorhanden sein, damit man per Datensatznavigationsleiste durchsteppen kann.

Ideen ?
  Mit Zitat antworten Zitat
Benutzerbild von Smokey
Smokey

Registriert seit: 10. Nov 2003
Ort: Puerto de la Cruz
158 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Ähnliche Datensätze in TDataSet finden

  Alt 18. Dez 2003, 15:08
schau dir mal die Filtereigenschaften an und Prozeduren wie FindFirst

ka in wie weit TADOQuery die hat, aber sollten da auch drin sein.

Dann kannst du einen Filter setzten mit beispielsweise:

'nachname = "' + txtFeld.Text + '*"' dann entweder FindFirst() oder einfach filtern, den ersten datensatz merken, filter wieder rausmachen und auf den datensatz springen.
Greif dir ein gutes Stück Fleisch auf deinem Weg nach draussen !!!
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#3

Re: Ähnliche Datensätze in TDataSet finden

  Alt 18. Dez 2003, 15:45
Wenn Du nicht Filtern möchtest, könntest Du es in etwa so machen
Delphi-Quellcode:
procedure DeinForm.DeinDbGridKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (Key = 83) and (ssCtrl in Shift) then begin // Ctrl+S - wie Suchen
      Key := 0;
      DeinEdit.SetFocus;
  end;
end;

procedure DeinForm.DeinEditKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var
  LenSearch : Integer;
  DerAusgangsPunkt : TBookmark;
  Gefunden : Boolean;
begin
  if (Key in [VK_RETURN,VK_ESCAPE]) then FlbxList.SetFocus
    DeinEdit.Color := clWindows; // Farbe normalisieren
    DeinEdit.Text := ''; // Suchtext löschen
    DeinDbGrid.SetFocus; // Suchedit verlassen und ins Grid springen
  else begin
    if Key in [8,13,33..40,45..46,65..90,186,192,219,222] then begin // Gültige bzw. suchbare Buchstaben
      LenSearch := length(DeinEdit.Text);
      Gefunden := False;
      if LenSearch > 0 then begin
        DerAusgangsPunkt := DeinDataSet.GetBookmark;
        DeinDataSet.DisableControls; // Es soll ja nicht Flimmern nicht wahr?
        DeinEdit.Color := $00CECEFF; // SuchEdit leicht rot färben
        Gefunden := False;
        DeinDataSet.First;
        While not DeinDataSet.Eof do begin
          if (copy(DeinDataSet.FieldByName('DeinSuchFeld').AsString,1,LenSearch) = DeinEdit.Text)
          then begin
            Gefunden := True;
            Break;
          end;
          DeinDataSet.Next;
        end;
      end;
      if Gefunden then begin
        DeinEdit.Color := $00CEFFCE; // Edit leicht grün (Erfolg)
      end else begin
        DeinEdit.Color := $00CECEFF; // Edit leicht rot (Mißerfolg)
        DeinDataSet.GotoBookmark(DerAusgangsPunkt);
      end;
      DeinDataSet.EnableControls;
      FreeAndNil(DerAusgangsPunkt);
    end;
  end;
end;
Mann - bin ich wieder nett heute - na ja - bald ist Weihnachten
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
sirtoby73

Registriert seit: 17. Sep 2003
19 Beiträge
 
Delphi 7 Professional
 
#4

Re: Ähnliche Datensätze in TDataSet finden

  Alt 18. Dez 2003, 16:32
@smokey:
Der von Dir vorgeschlagene Filteransatz scheint nicht zu klappen, bei Drücken der Taste 'k' wird mit
Delphi-Quellcode:
 filter:= 'nachname = "' + Key + '*"'
filtered:= true;
kein einziger Datensatz gefunden, während die SQL-Abfrage
WHERE nachname like "k*" mehrere Datensätze liefert.
Bist Du sicher, dass der Stern in der Filtereigenschaft zulässig ist ? Ich denke, man kann nur auf Gleichheit abfragen. Die Filterfunktion ist doch ziemlich eingeschränkt.
  Mit Zitat antworten Zitat
Benutzerbild von Garby
Garby

Registriert seit: 17. Mär 2003
Ort: Tirol
199 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Ähnliche Datensätze in TDataSet finden

  Alt 18. Dez 2003, 16:44
Hallo,

wenn du nur die jeweils erste Übereinstimmung des eingegebenen Parameters finden willst, dann funktioniert Locate normalerweise schon. Du musst nur die LocateOptions korrekt setzen:DataSet.Locate('nachname', Edit1.Text, [loCaseInsensitive, loPartialKey])
Walter
Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)
  Mit Zitat antworten Zitat
sirtoby73

Registriert seit: 17. Sep 2003
19 Beiträge
 
Delphi 7 Professional
 
#6

Re: Ähnliche Datensätze in TDataSet finden

  Alt 18. Dez 2003, 17:30
@Garby: Das war genau das, was ich suchte. Einfach, schnell und elegant...

Danke natürlich auch für die anderen Hinweise. Wieder viel gelernt heute
  Mit Zitat antworten Zitat
Benutzerbild von Smokey
Smokey

Registriert seit: 10. Nov 2003
Ort: Puerto de la Cruz
158 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Ähnliche Datensätze in TDataSet finden

  Alt 18. Dez 2003, 17:50
Hm jo hab vergessen dir zu sagen, dass in den Filteroptions noch was eingestellt werden muss. Aber steht ja alles in der DelphiHilfe 8)

Schau mal nach dem Thema Setting the Filter property

Das Locate ist zum Teil ne Tolle Sache, aber bei mir völlig unnütz.

Ich habe RefID's die so zB aussehen:

1-1-1
1-1-116
1-3-45

Wenn ich dann im Suchfeld 1-1-11 eingebe, soll er logischerweise auf den 2ten Datensatz. Nur tut er das mit Locate nicht und bleibt immer schön auf Datensatz 1-1-1

Kann auch an mir liegen, weil ich irgendwas nicht bedacht habe...aber habs ja dann anders hinbekommen
Greif dir ein gutes Stück Fleisch auf deinem Weg nach draussen !!!
  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 09:23 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