Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

MDX в DBF. [D6, dBase, FoxPro]


Drowsy ©   (2008-03-25 02:32:00) 

Была индексированная таблица Table.dbf с индексным
файлом Table.MDX. Можно ли, если этот файл (MDX) , безнадёжно испорчен, или вообще потерян, средствами BDE восстановить работу с  Table.dbf.  ( Что ни пытаюсь делать, всё вываливается ошибка (" Index does not exists. File : Table.MDX")).


Drowsy   (2008-03-26 02:22:00) [1]

Да, в дельфийском примере есть несовместимость параметров:

 Check(DbiRegisterCallBack(
   nil,                         //Cursor (Optional)
   cbINPUTREQ,                  //Type of Callback
   LongInt(0),                  //Pass-through client data
   sizeof(CBInputDesc),         //Callback buffer len
   cbinfo,                      // ?????????????   Pointer to callback function
   @myfunc                      //????????????? Call back fn being registered

   ));

А так нормально:

 Check(DbiRegisterCallBack(
   nil,                         //Cursor (Optional)
   cbINPUTREQ,                  //Type of Callback
   LongInt(0),                  //Pass-through client data
   sizeof(CBInputDesc),         //Callback buffer len
   @cbinfo,                      // !!!!!!!!!!!!!!   Pointer to callback function
   pfDBICallBack(@myfunc)        //!!!!!!!!!!!!!!!!  Call back fn being registered


Anatoly Podgoretsky   (2008-03-26 00:02:00) [2]

> Drowsy  (25.03.2008 22:26:10)  [10]

Очень просто, если происходит какая либо ошибка и не только, то через callback тебе выдают управления для принятия решения. DBD именно так и работает, но программно возможности больше. Ты внимательно прочитай там справку. Только в каком то примере есть мелкая ошибка, в каком уже не помню.


Drowsy   (2008-03-25 22:26:00) [3]

Да, я именно этого и хотел и тупо запихал этот Example в прогу.
Всё получилось как надо, спасибо огромное!!!
Теперь осталось понять, как это работает. :)


Anatoly Podgoretsky   (2008-03-25 22:21:00) [4]

Вот выписка из примера

Example 1: Create a callback that handles the condition of a missing .MDX file for a dBASE file or a missing .CDX file for a FoxPro file:

Разве ты не это хочешь?


Anatoly Podgoretsky   (2008-03-25 22:19:00) [5]


> Да-а-а, с этим без полбанки не разобраться... :)

Какие еще полбанки, есть справка и прекрасные примеры. Вряд ли ты где то еще найдешь информацию. Примеры аж на двух языках.


Drowsy   (2008-03-25 15:40:00) [6]

О, ни фига не понял как, но с помощью примера в хелпах получилось!!!
Где-бы почитать по азбучному , про механизм dbiRegisterCallback?!


Drowsy   (2008-03-25 15:20:00) [7]

Да-а-а, с этим без полбанки не разобраться... :)


Drowsy   (2008-03-25 14:34:00) [8]

Anatoly Podgoretsky, спасибо.
Описание есть внутри программы.
Если dbiRegisterCallback позволяет отсоединить индекс - то это то, что надо!
Буду посмотреть про эту функцию....


Anatoly Podgoretsky   (2008-03-25 14:30:00) [9]

Если у тебя нет описания индексов, то сделать уже ничего нельзя, ну разве что попробовать хакерскими методами покопаться в файле (если он еще есть), может там еще сохранились отстатки заголовков индексов.
Если же описания есть, то можешь отсоединить индекс и поновому создать

> Но нужно это сделать программно.

Что мешает, работай с БДЕ, а не с VCL - dbiRegisterCallback


Anatoly Podgoretsky   (2008-03-25 14:25:00) [10]

Если у тебя нет описания индексов, то сделать уже ничего нельзя, ну разве что попробовать хакерскими методами покопаться в файле (если он еще есть), может там еще сохранились отстатки заголовков индексов.
Если же описания есть, то можешь отсоединить индекс и поновому создать

> Но нужно это сделать программно.

Что мешает, работай с БДЕ, а не с VCL - dbiRegisterCallback


Drowsy   (2008-03-25 12:22:00) [11]

Спасибо, так можно.  
Но нужно это сделать программно.


Виталий Панасенко(дом)   (2008-03-25 08:45:00) [12]

Попытайся открыть DBD, он должен предложить сделать Deattach индекса(один из вариантов)


Наверх

Титульная страница Поиск, карта сайта Написать письмо