DBExpress和mysql最后插入id

时间:2016-10-06 22:26:45

标签: c++ mysql c++builder dbexpress

有几篇关于如何从MySQL获取last_insert_id及相关问题的帖子。我发现这篇文章与DBExpress相关:delphi dxExpress MySQL: invalid LAST_INSERT_ID value

但是,在该帖子之后,请不要使用以下代码将注释插入注释表。

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

1 个答案:

答案 0 :(得分:0)

我发现为了防止创建多个会话,导致last_insertid函数始终返回0,可以将连接AUTOCLONE参数设置为false。然后最后一个插入ID函数工作正常。我:

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