DBExpress и MySQL последний идентификатор вставки

Есть несколько сообщений о том, как получить last_insert_id из MySQL и связанных с этим проблем. Я нашел этот пост, связанный с DBExpress: delphi dxExpress MySQL: неверное значение LAST_INSERT_ID

Однако, следуя этому посту, не помогите мне использовать следующий код для вставки заметки в таблицу заметок.

TSQLQuery* tq = new TSQLQuery(NULL);
tq->SQLConnection = atdbDM->SQLConnection1;

stringstream q;
q <<"INSERT INTO note (created_by, note) VALUES ("<<1234<<", \'<none>\');";
q << "SELECT LAST_INSERT_ID() AS lastNoteID;";
tq->SQL->Add(q.str().c_str());
tq->Open();
int noteID = tq->FieldByName("lastNoteID")->AsInteger;
tq->Close();

Когда Open () выполняется, я получаю исключение:

'You have an error in your SQL syntax; Check the manual that correposnds to   your MySQL server version for the right syntax to use near 'SELECT LAST_INSERT_ID... at line1'

Если я сначала выполню оператор вставки и оператор SELECT по отдельности, я не получу ошибки, но возвращаемый идентификатор всегда равен 0.
Кто-нибудь знает, что нужно изменить? Я использую C ++ Builder XE3

0

Решение

Я обнаружил, что для предотвращения создания нескольких сеансов, когда функция last_insertid всегда возвращает 0, можно установить для параметра AUTOCLONE соединений значение false. Тогда последняя функция id вставки работает нормально. то есть:

MySQLConnection->Connected = true;
MySQLConnection->AutoClone = false; //<- makes last_insert_id work as expected!
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector