LAST_INSERT_ID() возвращает ноль

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Сообщение alu » 30.06.2007 11:01:39

SeVer писал(а):
Attid писал(а):SeVer
попробуй другие компоненты доступа, хотябы сократишь круг поиска.

Угу. Проблему решил путем отказа от компонентов, добавления в проект модуля mysq4 и использованием функции
ResID:= mysql_insert_id(MySock);
Для моей задачи самое то.


У меня проблема 1 в 1 можешь детальней написать как делаешь вставку записи и как забираешь последний ID. куском готовой проги. :wink:

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 раз при старте и при остановке программы соответственно)

Подскажите решение...
Аватара пользователя
alu
новенький
 
Сообщения: 33
Зарегистрирован: 15.01.2007 12:54:14
Откуда: Саратов

Сообщение alu » 30.06.2007 15:57:58

разобрался в общем использую параметры из MySQL41Connection1 чтобы сделать второе подключение, в "s" сам запрос, возвращает ID вставленной строки, если не вставилась -1
Код: Выделить всё
function Insert_and_get_id(s:string):longint;
var
  sock : PMYSQL;
  qmysql : MYSQL;
begin
Insert_and_get_id:=-1;
sock:=nil;
mysql_init(PMySQL(@qmysql));
sock:=mysql_real_connect(PMysql(@qmysql),pchar(form1.MySQL41Connection1.hostname),pchar(form1.MySQL41Connection1.UserName),pchar(form1.MySQL41Connection1.Password),pchar(form1.MySQL41Connection1.DatabaseName),0,nil,0);
if sock=Nil then exit;
if (mysql_query(sock,pchar(s)) < 0) then  mysql_close(sock) else begin
Insert_and_get_id:=mysql_insert_id(sock);
mysql_close(sock);
end;
end;
Аватара пользователя
alu
новенький
 
Сообщения: 33
Зарегистрирован: 15.01.2007 12:54:14
Откуда: Саратов

Сообщение debi12345 » 30.06.2007 19:41:59

разобрался в общем использую параметры из...

Вот это геморрой !
Неужели нет людского пути сделать настолько ходовую "вещь" ?
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение alu » 30.06.2007 23:00:41

debi12345 писал(а):
разобрался в общем использую параметры из...

Вот это геморрой !
Неужели нет людского пути сделать настолько ходовую "вещь" ?

ну вместо использовани параметров можеш указывать строки

Код: Выделить всё
sock:=mysql_real_connect(PMysql(@qmysql),'localhost','User','Password','DBname',0,nil,0);


если конечно ты это имел ввиду, а другого гемороя не вижу.
А про людской способ - это всмысле чем меньше телодвижений, тем лучше? Далеко не все можно предусмотреть языками высокого уровня (уж тем более объектными и визуальными). Приходится иногда и Ассемблером пользоваться...
Аватара пользователя
alu
новенький
 
Сообщения: 33
Зарегистрирован: 15.01.2007 12:54:14
Откуда: Саратов

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 96

Рейтинг@Mail.ru