Советы по Delphi


Текущий RecNo (dBase/Pdox)


...какой метод вовращает номер текущей записи? (т.е.: Я хочу использовать это вместе с функцией RecordCount и выводить для пользователя в строке состояния нечто вроде: "Запись #n из x")

Вот функция, возвращающая номер текущей записи в наборе данных DataSet. В основном я все скопировал и расставил комментарии, которые теперь лишают меня возможности поговорить на эту тему. Могли бы вы получить эти цифирьки из DBIPROCS.INT?

    function RecordNumber(Dataset: TDataset): Longint; var CursorProps: CurProps; RecordProps: RECProps;
begin

{ Возвращаем 0, если набор данных не Paradox или dBASE } Result := 0;
with Dataset do begin { Набор данных активен? } if State = dsInactive then DBError(SDataSetClosed);
{ Нам необходимо сделать этот вызов, чтобы "захватить" курсор iSeqNums } Check(DbiGetCursorProps(Handle, CursorProps));
{ Синхронизируем курсор BDE с курсором набора данных } UpdateCursorPos;
{ Заполняем RecordProps текущими свойствами записи } Check(DbiGetRecord(Handle, dbiNOLOCK, nil, @RecordProps));
{ С каким типом набора данных мы работаем? } case CursorProps.iSeqNums of 0: Result := RecordProps.iPhyRecNum;  { dBASE   } 1: Result := RecordProps.iSeqNum;     { Paradox } end; { case } end; { with } end; { function }

Затем, в обработчике события OnDataChange DataSet, я использовал команду:

    MyTextVariable := 'Запись ' + IntToStr( RecordNumber( tImport ) ) + ' из ' + IntToStr( tImport.RecordCount ) ;

Mike Downey [000738]



Содержание раздела