Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

FAQ - Вопросы - ответы - советы - Базы данных

Вопрос:

[DBF] Как можно открыть DBF-файл с признаком индекса, если индексный файл отсутствует?

Ответ:

С помощью BDE CALLBACKS. Пример для DELPHI 2.0, на первом не проверял:

UNIT CALLBACK;

INTERFACE

USES BDE, CLASSES, FORMS, DB, DBTABLES;

TYPE
  TFORM1 = CLASS(TFORM)
    TABLE1: TTABLE;
    PROCEDURE FORMCREATE(SENDER: TOBJECT);
    PROCEDURE FORMDESTROY(SENDER: TOBJECT);
  PRIVATE
    CBACK: TBDECALLBACK; // определение BDE CALLBACK
    CBBUF: CBINPUTDESC;  // просто буфер
    FUNCTION CBFUNC(CBINFO: POINTER): CBRTYPE; // CALLBACK-функция
  PUBLIC
  END;

VAR FORM1: TFORM1;

IMPLEMENTATION

{$R *.DFM}

PROCEDURE TFORM1.FORMCREATE(SENDER: TOBJECT);
BEGIN
  SESSION.OPEN; // В это время сессия ещё не открыта
  CBACK := TBDECALLBACK.CREATE(SESSION {Например},NIL,CBINPUTREQ,@CBREGBUF,
    SIZEOF(CBBUF),CBFUNC,FALSE);  // Определили CALLBACK
  TABLE1.OPEN;
//^^^^^^^^^^^ - здесь возможна ошибка с индексом, ETC.
END;

PROCEDURE TFORM1.FORMDESTROY(SENDER: TOBJECT);
BEGIN
  CBACK.FREE;  // Освобождаем CALLBACK
END;

FUNCTION TFORM1.CBFUNC(CBINFO: POINTER): CBRTYPE;
BEGIN
  WITH PCBINPUTDESC(CBINFO)^ DO
  CASE ECBINPUTID OF
    CBIMDXMISSING {, CBIDBTMISSING - можно ещё и очищать BLOB-поля}:
    BEGIN
      ISELECTION := 3; // Номер варианта ответа (1-й - открыть только        // 
для чтения, 2-й - не открывать, 3-й - отсоединить индекс).
        // Возможный источник неприятностей: а вдруг в последующих версиях
        // BDE номера будут другими?
      RESULT := CBRCHKINPUT; // Обрабатывать введённый ответ
    END;
  END;
END;

END.

PS: конечно, это лишь пример, делающий минимум необходимого. В рамках данного письма невозможно дать какое-то описание BDE CALLBACKS. Информацию я взял из BDE32.HLP, BDE.INT и DB.PAS. В VCL.HLP совсем ничего нет по этому поводу.

Вообще, руки бы оторвал тем, кто писал справку по Дельфям: я неделю мучался с сабжем, пока случайно не набрёл на CALLBACKS.

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог