dbexpress和mysql上次插入id

rggaifut  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(369)

有几篇文章是关于如何从mysql中获取最后一个\u insert \u id以及相关问题的。我发现这篇文章与dbexpress:delphi dxexpress mysql:invalid last\u insert\u id值有关
但是,下面的文章并不能帮助我使用下面的代码将注解插入notes表。

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'

如果我先执行insert语句,然后分别执行select语句,则不会出现错误,但返回的id始终为0。有人知道什么需要改变吗?我使用的是c++builder xe3

xkrw2x1b

xkrw2x1b1#

我发现,为了防止创建多个会话,导致最后一个\u insertid函数总是返回0,可以将connections autoclone参数设置为false。那么最后一个insert id函数就可以正常工作了。即:

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

相关问题