2016-10-06 5 views
0

Есть несколько сообщений о том, как получить last_insert_id из MySQL и связанных с ним проблем. Я нашел этот пост, связанный с DBExpress: delphi dxExpress MySQL: invalid LAST_INSERT_ID valueDBExpress и 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' 

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

+0

LAST_INSERT_ID() - последний вставленный идентификатор, который был успешно вставлен. Если ваша запись не вставлена ​​или не обновлена, это значение не будет изменено. Много обсуждений на сайте MySQL. Я размещаю запись по полям данных, а затем загружаю поле идентификатора, не доверяя LAST_INSERT_ID(). –

+0

Проблема здесь не в LAST_INSERT_ID() как таковой. Проблема заключается в том, что сочетание DBExpress и MySQL заканчивается тем, что указанный выше запрос недействителен. Получение 0 для идентификатора часто связано с отдельными запросами, принадлежащими двум различным сеансам. –

ответ

0

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

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