Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо