0

Qt 4.8.3 と MySQL ODBC 3.51 ドライバーを使用しています。ドライバーは、次のようにテストした LastInsertId をサポートしていないようです。

db.driver()->hasFeature(QSqlDriver::LastInsertId)

挿入したばかりの自動インクリメント ID を見つけるために必要です

query.exec("INSERT INTO myTable (MyVal, Created) VALUES ('1', NOW())");
auto insertId = query.lastInsertId().toString();

最善の回避策は何ですか?

編集: 複数のクライアントからこのテーブルへの同時アクセスがあります。

4

3 に答える 3

2

MySQL のドキュメントによると、以下を呼び出すことができます。

SELECT LAST_INSERT_ID();

挿入クエリの後、ODBC を使用している場合でも、現在の接続に挿入された最新の ID を取得します。

于 2012-12-05T02:22:04.390 に答える
1

次のようなことができます。

query.exec("SELECT id FROM myTable ORDER BY id DESC LIMIT 1");

テーブルで最大の ID を取得するには、これが挿入した ID である必要があります。

複数の同時ユーザーを持つことができるアプリケーションを作成している場合は、テーブルにロックを作成し、この 2 番目のクエリを実行した後にロックを解放することを検討する必要があります。

于 2012-12-04T18:12:00.587 に答える