SeVer писал(а):Attid писал(а):SeVer
попробуй другие компоненты доступа, хотябы сократишь круг поиска.
Угу. Проблему решил путем отказа от компонентов, добавления в проект модуля mysq4 и использованием функции
ResID:= mysql_insert_id(MySock);
Для моей задачи самое то.
У меня проблема 1 в 1 можешь детальней написать как делаешь вставку записи и как забираешь последний ID. куском готовой проги.
PS
я тут пост сделал подобный, не посмотрев что уже есть почти такой же...
переношу его сюда... а старый удалаю...
MySQL 4.1 - Lazarus 0.9.22
мне нужно узнавать последний вставленный ID в таблицу. делаю так
- Код: Выделить всё
form1.SQLQuery1.SQL.Clear;
temp1:='insert into people (name,comment) values ("'+form5.Edit1.Text+'","'+form5.Edit2.Text+'")';
form1.SQLQuery1.SQL.Add(temp1);
LastPeopleID:=-1;
try
form1.SQLQuery1.ExecSQL;
finally
form1.SQLQuery1.SQL.Clear;
form1.SQLQuery1.SQL.Add('select last_insert_id()');
form1.SQLQuery1.Open;
LastPeopleID:=form1.SQLQuery1.Fields.Fields[0].AsLongint;
form1.SQLQuery1.Close;
end;
но возвращаетс всегда - LastPeopleID=0
смотрю логи Mysql сервера там следующее
- Код: Выделить всё
10 Connect test@localhost on
10 Init DB test
10 Query insert into people (name,comment) values ("test Name slkfjhslh","No Comment")
10 Quit
11 Connect test@localhost on
11 Init DB test
11 Query select last_insert_id()
11 Quit
в общем просто устанавливаетс новое соединение, а last_insert_id() хранится как переменная соединения, по этому всегда возвращается 0
делать выборку по другим полм, чтобы определить ID не хотелось бы (да и не во всех таблицах это будет возможным). Нужно чтобы "select last_insert_id()" отрабатывала в том же соединении.
(MySQL41Connection1 подключаю и отключаю только 1 раз при старте и при остановке программы соответственно)
Подскажите решение...