![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MySQL. Работа с двумя таблицами, блокировка одной из них. [MySQL]
Aldor © (2004-03-05 19:37:00)Странный exception вылезает при следующей ситуации:
Имеются две таблицы (Буфер и Архив). Буфер надо заблокировать, считать все данные, записать их в Архив (он не блокируется), затем Буфер надо полностью очистить.
ExecSQLInner('LOCK TABLES ' + <BufferTableName> +
' LOW_PRIORITY WRITE');
try
{ Читаем данные из Буфера }
DataSet := OpenSQLInner('SELECT * FROM ' + <BufferTableName>)
{ Пишем их в Архив. StoreQuery - запрос 'INSERT' }
ExecSQLInner(StoreQuery); // здесь ошибка (см. ниже)
{ Очищаем Буфер }
ExecSQLInner('DELETE FROM ' + <BufferTableName>);
finally }
ExecSQLInner('UNLOCK TABLES');
end;
ExecSQLInner есть процедура:
SQLQueryInner.SQL.Text := Query;
SQLQueryInner.ExecSQL;
При попытке записать данные в архив (строкаExecSQLInner(StoreQuery);) вылезает ошибка
'<ArchiveTableName> was not blocked with LOCK TABLES'
Если конкретнее, то на строке
SQLQueryInner.ExecSQL;процедуры ExecSQLInner.
P.S. Если заблокировать обе таблицы, все нормально.
Еще дополнения (2004-03-05 19:46:00) [1]Извиняюсь, допустил ляп:
после finally символ '}' считать недействительным.
Aldor (2004-03-05 19:43:00) [2]Некоторые дополнения:
процедура OpenSQLInner:
function TfrmServerMain.OpenSQLInner(Query: string): TDataSet;
begin
SQLQueryInner.SQL.Text := Query;
SQLQueryInner.Open;
Result := SQLQueryInner;
end;
StoreQuery из строки, где ошибка тоже есть функция:
function StoreQuery: string;, в которой читается все содержимоеDataSet: TDataSet