![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Упаковка dBAse таблиц
NDR © (2002-07-30 08:57:00)УВАЖАЕМЫЕ МАСТЕРА!
Есть такая (ВАМ ВСЕМ ЗНАКОМАЯ) процедурка:
uses BDE,DB,DBTables
procedure Pack(RegenIndexes:Boolean);
procedure TForm1.Pack(RegenIndexes:Boolean);
const
SPackError="Таблица используется и неможет быть запакована";
begin
if not ((Active) and (Exclusive)) then
raise EDatabaseError.Create(SPackError);
try
Check(dbiPackTable(DBHandle,Handle,Nil,Nil,RegenIndexed));
finally
cursorposChanged;
refresh;
end;
end;
У меня дофига ошибок начиная от названия процедуры и до DBHandle!
Как правильно описать и использовать её????????Если есть другой пример пришлите пожалуйста. мне срочно нужен листинг позволяющий запаковывать таблицы dBase !
NDR (2002-07-30 16:09:00) [1]ОГРОМНОЕ СПАСИБО !!! работает !
Leran2002 (2002-07-30 09:44:00) [2]Ах да еще забыл сказать, что при открытом Дельфе это работать не будет, Дельф будет блокировать таблицу... Ну короче говоря выгружаешь Дельфя и запускаешь свою прогу... Ну и на всякий случай не забудь создать резервную копию таблицы, а то кто его знает ;-))...
Anatoly Podgoretsky (2002-07-30 09:38:00) [3]А правильныйпример из хелпа никак не устраивает?
Leran2002 (2002-07-30 09:37:00) [4]VAleksey, я это тоже оттуды выцарапал ;-))...
VAleksey (2002-07-30 09:35:00) [5]Еще добавь орфографическую ошибку :) "неможет" пишется раздельно, т.е. "не может" :).
В нелпе по функции упаковки таблиц полный листинг для dBase и Paradox. См. файл BDE32.hlp
Leran2002 (2002-07-30 09:34:00) [6]Вот может поможет…
uses BDE;
// Pack a Paradox or dBASE table
procedure PackTable(Table: TTable);
var
Props: CURProps;
hDb: hDBIDb;
TableDesc: CRTblDesc;
begin
if not Table.Active then
raise EDatabaseError.Create("Table must be opened to pack");
if not Table.Exclusive then
raise EDatabaseError.Create("Table must be opened exclusively to pack");
Check(DbiGetCursorProps(Table.Handle, Props));
if Props.szTableType = szPARADOX then begin
FillChar(TableDesc, sizeof(TableDesc), 0);
Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb)));
StrPCopy(TableDesc.szTblName, Table.TableName);
StrPCopy(TableDesc.szTblType, Props.szTableType);
TableDesc.bPack := True;
Table.Close;
Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False));
end
else
if (Props.szTableType = szDBASE) then
Check(DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBASE, True))
else
raise EDatabaseError.Create("Table must be either of Paradox or dBASE " +
"type to pack");
Table.Open;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Table1.Active then Table1.Close;
Table1.Exclusive:=true; // включаем эксклюзивный режим
Table1.Open; // таблица должна быть открыта
PackTable(Table1); // пакуем таблицу
Table1.Close;
Table1.Exclusive:=false; // выключаем эксклюзивный режим
Table1.Open;
end;