Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Текущий номер записи набора данных

Delphi , Базы данных , DBASE и DBF

Текущий номер записи набора данных


{Извлекает физический номер записи xBase. Требует наличие модулей
DBITYPES, DBIPROCS, и DBIERRS в списке используемых модулей.
Функция требует на входе один аргумент типа TTable (например, Table1).}

function Form1.Recno(oTable: TTable): Longint;
var
  rError: DBIResult;
  rRecProp: RECprops;
  szErrMsg: DBIMSG;
begin
  Result := 0;
  try
    oTable.UpdateCursorPos;
    rError := DbiGetRecord(oTable.Handle, dbiNOLOCK, nil, @rRecProp);
    if rError = DBIERR_NONE then
      Result := rRecProp.iPhyRecNum
    else
      case rError of
        DBIERR_BOF: Result := 1;
        DBIERR_EOF: Result := oTable.RecordCount + 1;
      else
        begin
          DbiGetErrorString(rError, szErrMsg);
          ShowMessage(StrPas(szErrMsg));
        end;
      end;
  except
    on E: EDBEngineError do
      ShowMessage(E.Message);
  end;
end;

Перевод контента на русский язык:

Функция Delphi Recno извлекает физический номер записи (phyRecNum) таблицы в базе данных xBase с помощью библиотеки DBI (Database Interface).

Разбивка кода:

  1. Функция принимает единственный аргумент oTable типа TTable, представляющий таблицу в базе данных xBase.
  2. Инициализирует локальную переменную Result с значением 0, которая будет хранить физический номер записи.
  3. Пытается обновить позицию курсора с помощью метода UpdateCursorPos объекта TTable.
  4. Вызывает функцию DbiGetRecord, чтобы извлечь свойства записи (RECprops) для текущей записи в таблице. Функция DbiGetRecord принимает несколько аргументов:
    • Handle: Обратный handle базы данных.
    • dbiNOLOCK: Режим блокировки, указывающий, нужно ли блокировать запись исключительно или нет.
    • nil: Указатель на буфер, где будут храниться свойства записи.
    • @rRecProp: Указатель на структуру RECprops, которая будет хранить свойства записи.
  5. Если функция DbiGetRecord возвращает ошибку (DBIERR_ NONE), извлекает физический номер записи из структуры RECprops и присваивает его переменной Result.
  6. Если возникает ошибка при вызове DbiGetRecord, код проверяет код ошибки с помощью оператора case. Он обрабатывает две конкретные ошибки:
    • DBIERR_ BOF (Начало файла): В этом случае устанавливает Result в 1.
    • DBIERR_EOF (Конец файла): В этом случае устанавливает Result в количество записей плюс 1.
  7. Если возникает любая другая ошибка, код извлекает сообщение об ошибке с помощью функции DbiGetErrorString и отображает его с помощью оператора ShowMessage.
  8. Наконец, если возникает исключение при выполнении кода (например, из-за неудачной попытки подключения к базе данных), код ловит исключение с помощью блока try-except и отображает сообщение об ошибке с помощью другого оператора ShowMessage.

Альтернативное решение:

Вместо использования функции DbiGetRecord можно использовать функцию DbiSeek, чтобы переместить курсор к желаемой записи и затем извлечь ее физический номер. Это может быть более эффективно и проще для использования.

Пример:

function Form1.Recno(oTable: TTable): Longint;
var
  rError: DBIResult;
begin
  Result := 0;
  try
    oTable.UpdateCursorPos;
    rError := DbiSeek(oTable.Handle, dbiBOF);
    if rError = DBIERR_NONE then
      Result := oTable.RecordCount
    else
      case rError of
        DBIERR_EOF: Result := oTable.RecordCount + 1;
      end;
  except
    on E: EDBEngineError do
      ShowMessage(E.Message);
  end;
end;

В этом коде функция DbiSeek перемещает курсор к началу файла (dbiBOF) и затем извлекает количество записей. Если курсор уже находится на конце файла, устанавливается результат в количество записей плюс 1.

Функция Form1.Recno извлекает физический номер записи xBase для указанного объекта TTable, требуя наличия модулей DBITYPES, DBIPROCS и DBIERRS в списке используемых модулей.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: DBASE и DBF ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:49:00/0.0056309700012207/1