![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
'Table is busy' - проблема [D5, dBase, FoxPro]
DmitryZ © (2004-12-03 12:31:00)На форме:TDataBase, TTable (Table1), TQuery (Query1),TUpdateSQL, TDAtaSource,TDBGrid, TDBNavigator, TButton и TEdit (Edit1);
Данные из Edit1 попадают в Query1 (работа с TQuery вызвана необходимостью, долго объяснять для чего) посредством UpdateSQL по нажатии кнопки Button2 :
procedure TForm1.Button2Click(Sender: TObject);
begin
Query1.Open;
Query1.Append;
Query1.FieldByname('KOD').asinteger:=123;
Query1.FieldByname('poln').asstring:=Edit1.Text;
with Query1 do
begin
Database1.StartTransaction;
try
ApplyUpdates;
Database1.Commit;
except
Database1.Rollback;
raise;
end;
CommitUpdates;
end;
Query1.Close;
Query1.Open;
end;
Затем при закрытии формы пытаюсь запаковать таблицу TTable (этот компонент находится на форме только для этой цели)
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Query1.close;
Table1.close;
Table1.Exclusive := True;
Table1.Open;
Check(DbiPackTable(Table1.Dbhandle, Table1.Handle, nil, szDBASE, FALSE));
Table1.Close;
end;
Суть проблемы:
Как только дело доходит до Table1.Open выводится сообщение : "Table is busy" и Query1.Close и Table1.Close не помогают. Изначально на форме Table и Query закрыты
Проблема возникает только в том случае, если перед этим вызывался метод Qury1.ApplyUpdates или Qury1.СommitUpdates в по нажатии Button2. Если их заремарить, то все нормально, но без них нельзя :(
Подскажите кто-нибудь, как мне осободить таблицу, ибавиться от "Table is busy" ?
Спасибо
sniknik (2004-12-04 14:12:00) [1]а лучше вовсе не держать открытых таблиц/баз в режиме разработки (открывать при старте в самой программе).
VICTOR_ (2004-12-04 14:01:00) [2]Если запускаеш из Delphi то сообщение правильное. Table1 у тебя не может быть Exclusive(ее держит кроме твоей программы еще и Delhi). Попробуй просто запустить Exe при закрытом Delphi