Задавайте вопросы, мы ответим
Вы не зашли.
Я понимаю, что для делфи есть свои форумы, но у меня проблема кажется с mysql.
delphi2007, mysql 4.1, dbExpress, таблица myisam. Не работает код:
procedure Tfrm.Button1Click(Sender: TObject);
var
Id : Integer;
begin
try
with SQLQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('LOCK TABLES contragents Write');
ExecSQL;
SQL.Clear;
SQL.Add('Insert into contragents () values ()');
ExecSQL;
SQL.Clear;
SQL.Add('SELECT id FROM contragents ORDER BY id DESC limit 1');
Open;
id := FieldByName('id').AsInteger;
SQL.Clear;
SQL.Add('UNLOCK TABLES');
ExecSQL;
Close;
end;
except on E:exception do
begin
messagedlg('Ошибочное значение :' + E.Message + '!', mtError, [mbOk], 0);
end;
end;
messagedlg(IntToStr(id), mtInformation, [mbOk], 0);
end;
В таблице автоинкрементное поле Id. Цель: при вставке надо узнать идентификатор вставленной строки и дальше его использовать. На Open программа встает без сообщений, ошибок и т.п. Неужели клиент поставивший блокировку на запись, не может выполнить чтение?
В какую сторону копать, чтобы добиться заданной выше цели?
Неактивен
Какая именно ошибка возникает?
Последнее вставленное значение можно получить с помощью:
Неактивен
> rgbeast Какая именно ошибка возникает?
Никакая, программа встает намертво, ощущение что ждет окончания блокировки.
Хотя все тоже самое через программу-администратора heidiSQL выполняется правильно.
>Последнее вставленное значение можно получить с помощью:
>SELECT last_insert_id();
Я знаю, но у меня во всех случаях возвращает 0. last_insert_id() налагает требование, чтобы
все было в одной сессии, я не знаю как это проконтролировать, а транзакции myisam не
поддерживает. Если бы last_insert_id() сработал, мне не пришлось бы блокировать таблицу,
так как он возвращает значение именно для этой сессии и действия других клиентов на
это никак не влияют. Остается либо перейти с myisam на другой тип, пока базы пустые,
либо попробовать доступ через другие компоненты, так как есть косвенные подозрения,
что это глючит dbExpress.
Неактивен
Заменил dbExpress на Zeos и все заработало, даже last_insert_id
Неактивен