Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Delphi 7 - hľadanie záznamu - Locate - VarArrayOf

V Delphi som hľadať potrebný záznam v Table a riešil som to takto:

RecNo := 0;
while (RecNo < RecordCount) and (id <> Fields[7].AsInteger) do
  RecNo := RecNo + 1;
if id <> Fields[7].AsInteger then id := -1;

Všetko bolo v poriadku, až na jeden detail. Po otvorení súboru z disku (v programe) sa takto hľadal správny riadok tabuľky. Na moje zdesenie, tabuľka mala pôvodne dva záznamy a po tomto mala 4. Tretí a štvrtý boli opakovanie prvého a druhého. Zrejme bol problém v tom, že RecNo nadobudol privisoké hodnoty. Zmenil som teda druhý riadok na:

while (RecNo < RecordCount - 1) and (id <> Fields[7].AsInteger) do

No a pre zmenu po prvom riadku tabuľky nasledoval opäť prvý a ako tretí bol pôvodný druhý.

Rozhodol som sa použiť funkciu Locate:

if Locate('ID', id, []) then id := -1;

Delphi nič nenašlo. Tak som to napísal takto (podľa helpu):

if Locate('ID', VarArrayOf([id]), []) then id := -1;

Delphi ma odbíja tým, že nepozná VarArrayOf. V helpe nie je žiadna knižnica a vyzerá to na normálnu funkciu.

Viete mi, prosím, teda niekto poradiť, prečo prvý zápis Locate nejde a prečo mi to nepozná VarArrayOf?

Předmět Autor Datum
Tady mas priklad na hledani v tabulce: Table.First; NaselJsem := False; while not Table.EOF do begi…
Jan Fiala 28.11.2006 12:13
Jan Fiala
Jasné, ďakujem. Kašlem na Locate. O rýchlosť tu rozhodne nejde. Len to musí fungovať.
msx. 28.11.2006 12:20
msx.
Len sa chcem spýtať ešte: Ten zápis s Locate som mal dobre?
msx. 28.11.2006 12:21
msx.
Podle vseho ano, az na to prirazeni, kde melo podle vseho byt: if not Locate() then id := -1;
Jan Fiala 28.11.2006 12:25
Jan Fiala
Áno, už mi funguje aj Locate. Ponechal som radšej dlhší zápis (aspoň mu lepšie rozumiem). Časom sa n… poslední
msx. 28.11.2006 12:38
msx.

Tady mas priklad na hledani v tabulce:

Table.First;
NaselJsem := False;
while not Table.EOF do
begin
  if id = Fields[7].AsInteger then
  begin
    NaselJsem := True;
    Break;    
  end;
  Table.Next;
end;

Funkce VarArrayOf() je definovana v unite Variants, takze pridat do Uses

Zpět do poradny Odpovědět na původní otázku Nahoru