13

SQLiteにテーブルがあります:

CREATE TABLE "EventType" 
(
[EventTypeID] INTEGER PRIMARY KEY, 
[EventTypeName] VARCHAR(50) NOT NULL UNIQUE
);

EventTypeIDは整数であり主キーであるため、自動的に自動インクリメント列になり、正常に機能します。

テーブルに行を挿入し、VB6から新しくインクリメントされた値を取得したいと思います。

Dim oRs as Recordset
dim oCmd as new Command

oCmd.ActiveConnection = GetConnection()
oCmd.Source = "insert into EventType (EventTypeName) values ('blah')"
oCmd.Execute

別のクエリを発行せずに、新しく作成されたEventTypeIDを自動的に取得する方法はありますか(EventTypeからmax(EventTypeID)を選択))?

ずっと前のVB6から、それを行う方法があったことを覚えているようです。

4

5 に答える 5

17

SQLiteはSCOPE_IDENTITYをサポートしていますか?

FAQをチェックしてください。sqlite3_last_insert_rowid () 関数がそれを行います。ただし、トリガーには注意してください

テストされていませんが、1回の呼び出しで両方のステートメントを送信できるはずです。VB6を書いてからしばらく経ちました。また、これはSQLインジェクションに対して安全ではありません。

Dim oRs as Recordset
dim sSql as String
sSql = "INSERT INTO EventType (EventTypeName) VALUES ('blah'); SELECT last_insert_rowid() FROM EventType"
oRs.Open sSql oConn
于 2009-02-10T05:15:56.717 に答える
13

コード内で次のクエリを実行します。

SELECT SEQ from sqlite_sequence WHERE name='tablename'
于 2015-11-19T04:24:04.537 に答える
3

私はVBを使用していないので、データベースで使用しているインターフェイスはわかりませんが、bendeweyが言ったようにsqlite3_last_insert_rowid()、最後に挿入された行のプライマリ整数キーを返す関数がcAPIにあります。 、そのため、インターフェイスで同様の関数を探すことができます。

それが機能しない場合は、SQLite固有のクエリを使用できます。

SELECT last_insert_rowid()
于 2009-02-10T05:20:22.993 に答える
2

SELECT last_insert_rowid()挿入後に呼び出すことができます

于 2009-02-10T05:21:09.467 に答える