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

Ваш аккаунт

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

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

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

Проблема с DbiPackTable!!!

5.7K
10 ноября 2003 года
outlaw
2 / / 10.11.2003
Дело в том, что я удаляю запись из базы, она естесственно только помечается на удаление, значит надо сделать
DbiPackTable(Table->DBHandle,Table->Handle,NULL,NULL,true);

Но не так то все просто. Таблица при этом остается занятой и не дает этого сделать.
Вот моя функция переупаковки таблицы:

void __fastcall TVDHMainForm::PackTable(TTable *Table)
{
Table->Close();
Table->Exclusive = true;
Table->Open();

DbiPackTable(Table->DBHandle,Table->Handle,NULL,NULL,true);

Table->Close();
Table->Exclusive = false;
Table->Open();
}

без Table->Exclusive = true; почему-то работает, а сним не хочет :( хротя говорят что это нужно.
2.0K
11 ноября 2003 года
Tristan
27 / / 17.10.2002
Я пользуюсь DbiDoRestructure, вроде работает...

//---------------------------------------------------------------------------

#include <DBTables.hpp>
#pragma hdrstop

#include "PackTabl.h"
//---------------------------------------------------------------------------

#pragma package(smart_init)
bool __fastcall PackTabl(TTable *SourceTable)
{
bool h=SourceTable->Active;
SourceTable->Active=false;
hDBIDb hDb=0; // Handle to the Database
hDBICur hCur = 0; // Handle to the cursor (table)
DBIResult rslt; // BDE error code
CRTblDesc TblDesc; // Create Table Descriptor
Check(DbiInit(NULL));
Check(DbiOpenDatabase(
NULL, // Database name (NULL for standard Database)
NULL, // Database type (NULL for standard Database)
dbiREADWRITE, // Open mode (read-write or read-only)
dbiOPENEXCL, // Excluzive mode (shared or exclusive)
NULL, // Password (not needed for the STANDARD database)
NULL, // Number of optional parameters
NULL, // Field desc for optional parameters
NULL, // Values for the optional parameters
hDb)); // Handle to the database

AnsiString PN;
if((SourceTable->DatabaseName.SubString(2,1)==":")||(SourceTable->DatabaseName.SubString(2,1)=="\\"))
{PN=SourceTable->DatabaseName+"\\";
PN=PN+SourceTable->TableName;
}

else
{TStringList *MyStringList = new TStringList();
try
{Session->GetAliasParams(SourceTable->DatabaseName,MyStringList);
PN=MyStringList->Strings[0].SubString(6,MyStringList->Strings[0].Length()-5);
}
__finally
{
delete MyStringList;
}
PN=PN+"\\";
PN=PN+SourceTable->TableName;
}
memset((void *) &TblDesc, 0, sizeof(CRTblDesc));

lstrcpy(TblDesc.szTblName, PN.c_str());
lstrcpy(TblDesc.szTblType, szPARADOX);
TblDesc.bPack = true;
rslt = DbiDoRestructure (hDb, 1, &TblDesc, NULL, NULL, NULL, FALSE);
if (rslt == DBIERR_NONE)
{SourceTable->Active=h;
return(true);
}
DbiError(rslt);
if (hCur != 0)
Check(DbiCloseCursor(hCur));
if (hDb != 0)
Check(DbiCloseDatabase(hDb));
Check(DbiExit());
SourceTable->Active=h;
return(false);
}
5.7K
12 ноября 2003 года
outlaw
2 / / 10.11.2003
[QUOTE]Originally posted by Tristan
Я пользуюсь DbiDoRestructure, вроде работает...

//---------------------------------------------------------------------------

Насколько я помню DbiDoRestructure для таблиц Paradox, а мне надо для FoxPro, DBase ... вот
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог