SOS HELP! Delphi + Query + Grid + kurzor
2005-11-17T14:34:38+01:00
2005-11-17T17:15:28+01:00
2022-07-19T22:06:16+02:00
shindel
Sziasztok! A problémám a következő: a formon van 1 dbgrid-em, 1 query-m és 1 editbox-om, na mármost azt kellene megoldanom, hogy az editbox-ba beírt x karakter alapján megtaláljon adatokat a progi és a dbgridben jelölje, hogy melyik sorban találta az adatot. Tehát, ahogy írok az editbox-ba, "ugráljon" a sorkijelölés, ahogy szűkül a keresésnek megfelelő sorok száma. pl.:elkezdem beírni, hogy K, akkor álljon az első K-val kezdődő sorra, ha folytatom, mondjuk O-val (KO), akkor az azzal kezdődő sorra. Aki tud segítsen plz, mert sürgős lenne, előre is köszi. Nekem eddig ez van meg és működik is, csak a kjelölést nem tudom, hogy kell megoldani :
procedure TForm1.Button1Click(Sender: TObject);
var
Mezo1 :String;
talalat: string;
begin
Mezo1:='%'+edit1.text+'%';
Query1.SQL.Clear;
Query1.SQL.Add('SELECT Ugyfelneve FROM Ugyfelek');
Query1.SQL.Add(' WHERE (Ugyfelneve LIKE '''+Mezo1+''')');
Query1.ExecSQL;
Query1.Open;
talalat:=query1.FieldByName('Ugyfelneve').asstring;
showmessage('Megtaláltam a(z) '+talalat+' nevű ügyfelet!');
end;
Mutasd a teljes hozzászólást!
Vagyis:
procedure TForm1.Button1Click(Sender: TObject); begin Table1.Locate('Ugyfelneve', edit1.text, [loPartialKey, loCaseInsensitive]); end;
Gondolom az, hogy ki legyen írva, hogy megtaláltam, az nem fontos...
Mutasd a teljes hozzászólást!

  • Ha jól értelmezem, akkor valójában van egy Query-d (Nevezzük mondjuk FoQuery-nek.) nyitva, benne az Ugyfelek tábla minden sora, és amit beír a TEdit-be, azt egy másik Queryvel (Ez a Query1) szeded ki.

    Erre nincs szükség, a Querynek van kereső metódusa, azt használd! Jelen esetben(fejből írom lehet, hogy van benn hiba):
    FoQuery.Locate('Ugyfelneve', edit1.text, [loPartialKey]);
    Ez megkeresi a Queryben az első edit1.text-nek megfelelő sort és ráállítja a kurzort. Természetesen nem árt, ha a Query rendezve van az adott mezőre (ORDER BY Ugyfelneve), mert akkor ezek egymás alatt lesznek láthatók, de ez nem kötelező.
    Mutasd a teljes hozzászólást!
  • Ez a Locate funkció nem valami megbízható. Én már jártam úgy, hogy ott volt előttem, amit kerestettem vele, de nem találta meg.
    Mutasd a teljes hozzászólást!
  • Hali! Nincs még 1 query, csak ez és nem is akarok mégegyet, valami más megoldás kellene, de azért köszi. Mint látod a kereséssel nincs gond, mert az általam feltett forrásrész utsó sora ki is írja, csak a kurzort nem tudom odaállítani. Mondták a setfocust is, de abban csak a táblára tudom állítani, nem csak 1 sorra, szal tovább próbálkozom!
    Mutasd a teljes hozzászólást!
  • Akkor viszont nem értem az alap problémát.
    Ezek szerint a Grid a Quer1-re van kötve, és amikor a gomb meg van nyomva automatikusan csak azok a tételek jönnek fel benne, amik megfelelnek az Edit-be beírt értéknek és a Gridben a kurzor rááll az első ilyenre (ami jelenleg a gridben az első sor).

    Akkor most mit akarsz kijelölni?
    Mutasd a teljes hozzászólást!
  • Hi!

    Csuri írja jól, te érted félre.
    Van ugye egy dbGrid-ed, aminek van egy DataSource-ja, annak egy DataSet-je. (Ami egy Query, vagy Table.) Na, ennek a DataSet-nek kell a Locate metódusát használni az általa írt módon. Nem kell plusz Query.

    Alex
    Mutasd a teljes hozzászólást!
  • Csatlakozom az előttem szólókhoz. Sztem jó az neked amit Csuri írt.
    Beteszed az Edit OnChange eseményébe, és amit beírsz, oda ugrik. Az uccsó paraméterbe még beteheted ezt: [loPartialKey, loCaseInsensitive], és akkor nem különbözteti meg a kis-nagy betűket.
    Mutasd a teljes hozzászólást!
  • Hi! Úgy látszik, nem sikerült érthetően leírnom, megpróbálom újra. A datasourcenak egy table a dataset-je, mert a gridben mindig kell látszania az egész ügyféltörzsnek. A query külön van, csak azért, hogy az editboxba beírt dolgot azzal szűrjem ki. Meg is csinálja a beleírt sql parancsokat, csak azt nem tudom, hogyan lehet kijelölni a gridben a select eredményeképp megkapott sort!?
    Mutasd a teljes hozzászólást!
  • Amit eddig leírtam, az tökéletes erre, csak akkor nem Query.Locate-et, hanem Table.Locate-et kell használni.(Illetve ha van index az adott mezőre és az a jelenleg kiválasztott index, akkor a FindKey is jó, de ezt már nézd meg a helpben.) Ebben az esetben a Query-re semmi szükség.
    Mutasd a teljes hozzászólást!
  • Vagyis:
    procedure TForm1.Button1Click(Sender: TObject); begin Table1.Locate('Ugyfelneve', edit1.text, [loPartialKey, loCaseInsensitive]); end;
    Gondolom az, hogy ki legyen írva, hogy megtaláltam, az nem fontos...
    Mutasd a teljes hozzászólást!
  • Akkor úgy látszik, túlbonyolítottam kicsit a dolgot és nem is kellenek az SQL-es cuccok!? Mind1, amit leírtál működik, úgyhogy ott a pont! Köszi
    Mutasd a teljes hozzászólást!
abcd