2012-04-03 4 views
6

Mam składnik TTable, który używa BDE do dostępu do tabeli DBase. W tabeli nie ma indeksu, więc kolejność sortowania jest fizyczną kolejnością rekordów w tabeli. Jeśli odczytam właściwość RecNo, zawiera ona oczekiwaną liczbę dla bieżącego rekordu.Dlaczego ustawienie właściwości RecNo tabeli nie przenosi się do tego rekordu?

Miałem wrażenie, że dzięki tej konstelacji (BDE + DBase) możliwe jest również ustawienie właściwości RecNo w celu przejścia do odpowiedniego rekordu. Ale najwyraźniej to nie działa w moim programie.

A więc: Czy pamiętam to niepoprawnie? Czy jest coś specjalnego, co muszę zrobić, aby to zadziałało?

(proszę nie radzę o upuszczenie BDE. Jestem świadoma swoich problemów i jesteśmy już migracji z dala od niego.)

Odpowiedz

8

TBDEDataSet realizuje RecNo setter tylko dla Paradox (nie DBase).

unit DBTables; 
... 
procedure TBDEDataSet.SetRecNo(Value: Integer); 
begin 
    CheckBrowseMode; 
    if (FRecNoStatus = rnParadox) and (Value <> RecNo) then 
    begin 
    DoBeforeScroll; 
    if DbiSetToSeqNo(Handle, Value) = DBIERR_NONE then 
    begin 
     Resync([rmCenter]); 
     DoAfterScroll; 
    end; 
    end; 
end; 

Można spróbować coś rodzajowe tak:

procedure SetRecNo(DataSet: TDataSet; const RecNo: Integer); 
var 
    ActiveRecNo, Distance: Integer; 
begin 
    if (RecNo > 0) then 
    begin 
    ActiveRecNo := DataSet.RecNo; 
    if (RecNo <> ActiveRecNo) then 
    begin 
     DataSet.DisableControls; 
     try 
     Distance := RecNo - ActiveRecNo; 
     DataSet.MoveBy(Distance); 
     finally 
     DataSet.EnableControls; 
     end; 
    end; 
    end; 
end; 
+0

Albo znajdź coś przez jej klucz podstawowy [dbase]. Lub zapytanie o klucz podstawowy [sql]. –

Powiązane problemy