2016-10-06 14 views
0

MySQLからのlast_insert_idの入手方法と関連する問題がいくつかあります。私はDBExpressに関連したこの1つの投稿を見つけました:delphi dxExpress MySQL: invalid LAST_INSERT_ID valueDBExpressとmysqlの最後の挿入ID

しかし、そのポストに従うと、次のコードを使ってノートをノートテーブルに挿入するのを手伝ってください。

'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が常にある:オープン()が実行されると、私は例外を取得

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(); 

0. 変更する必要があることを知っている人は誰ですか?私はC++ Builder XE3を使用しています

+0

LAST_INSERT_ID()は、正常に挿入された最後に挿入されたIDです。レコードが挿入または更新されない場合、この値は変更されません。 MySQLサイトに関する多くの議論。私は、LAST_INSERT_ID()を信頼しないで、IDフィールドを読み込んで、データフィールドでレコードを探しています。 –

+0

ここでの問題は、LAST_INSERT_ID()自体ではありません。問題は、上記のクエリが無効であると言ってDBExpressとMySQLの組み合わせであるようです。 idを0にすることは、2つの異なるセッションに属する別々のクエリに関連付けられることがよくあります。 –

答えて

0

私は、last_insertid関数が常に0を返すように、複数のセッションを作成しないようにするために、接続AUTOCLONEパラメータをfalseに設定できることを発見しました。最後のinsert id関数はうまくいきます。 I:

MySQLConnection->Connected = true; 
MySQLConnection->AutoClone = false; //<- makes last_insert_id work as expected! 
関連する問題