Alex |
Отправлено: 27.05.2003, 07:18 |
|
Не зарегистрирован
|
Плиз подскажите, как сделать очистку базы (dbf) от удаленных записей, средствами Билдера ? |
|
Admin |
Отправлено: 27.05.2003, 13:29 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Это делается средствами BDE:
Table1->Close();
Table1->Exclusive=true;
Table1->Open();
DbiPackTable(Table1->DBHandle,Table1->Handle, NULL,NULL,true);
|
|
Admin |
Отправлено: 27.05.2003, 14:40 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Кстати, эта функция не подходит для таблиц Paradox,
для них используйте функцию DbiDoRestructure() с опцией bPack
или функцию PackTable() из библиотеки RXLib
Пример: упаковываем все таблицы базы данных Database1
CODE |
DBIResult fDbiDoRestructure(hDBIDb hDb, char *TblName);
// начинаем упаковку
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// получаем имена всех таблиц в ListBox1
Database1->GetTableNames(ListBox1->Items,false);
// если таблицы запаролены- указываем пароль
Session->AddPassword("jIGGAe");
for(int i=0; i<ListBox1->Items->Count; i++){
fDbiDoRestructure(Database1->Handle, ListBox1->Items->Strings[i].c_str());
}
}
DBIResult fDbiDoRestructure(hDBIDb hDb, char *TblName)
{
DBIResult rslt;
CRTblDesc TblDesc;
memset((void *) &TblDesc, 0, sizeof(CRTblDesc));
lstrcpy(TblDesc.szTblName, TblName);
lstrcpy(TblDesc.szTblType, szPARADOX);
TblDesc.bPack = TRUE;
rslt = DbiDoRestructure(hDb, 1, &TblDesc, NULL, NULL,NULL, FALSE);
if(rslt == DBIERR_NONE) ShowMessage("Successful Pack: "+String(TblName));
return rslt;
}
//------------------------------------------------------------------------ |
Отредактировано Admin — 27 May 2003, 14:41
|
|
Alex |
Отправлено: 28.05.2003, 09:03 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 5
|
Дело в том что я пытаюсь отвязаться от BDE, для облегчения переноса программы на компы, где его (BDE) нет. Делаю я это путем копирования необходимых библиотек от BDE в директорию с моей программой.
И вэтом случае
DbiPackTable(Table1->DBHandle,Table1->Handle, NULL,NULL,true);
у меня не работает
Как это лечить ?
|
|
pasha |
Отправлено: 28.05.2003, 17:37 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 62
|
Дело в том что я пытаюсь отвязаться от BDE, для облегчения переноса программы на компы, где его (BDE) нет. Делаю я это путем копирования необходимых библиотек от BDE в директорию с моей программой.
То есть, если BDE стоит не в C:\Program Files\Common Files\Borland Shared\BDE, а в другой папке, то это уже и не BDE вовсе ?
А если Вам понадобиться поставить на эти компы еще несколько
программ в разные директории, то вы в каждую директорию к
программе будете копировать файлы BDE ?
К сожалению я не разбирался досконально с BDE, но возможно
Вы скопировали не все необходимые файлы из BDE
|
|
Alex |
Отправлено: 03.06.2003, 08:53 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 5
|
Проблемма решена, теперь база упаковывается.
Ларчик то просто открывался.
В директорию к программе, помимо файликов:
blw32.dll, idapi32.dll, idr20009.dll, iddbas32.dll, bantam.dll, charset.cvb, usa.btl как указанно в FAQ, надо добавить файлик idbat32.dll
Иначе база с помошью команды:
DbiPackTable(Table1->DBHandle,Table1->Handle, NULL,NULL,true);
не пакуется и выдается следующая ошибка:
Access violation at address 00000001. Read of address 00000001.
|
|
|