2009-02-10 38 views
9

返回SQLite的自動遞增列的值,我在SQLite的一個表:如何使用VB6

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,而無須發出(從事件類型選擇MAX(EventTypeID))的另一個查詢)自動方式?

我似乎記得從VB6天很久以前,有一種方法可以做到這一點。

+0

的可能的複製[?是否支持SQLite SCOPE \ _IDENTITY(http://stackoverflow.com/questions/304543/does-sqlite-support-scope-identity) – 2015-12-20 22:18:27

回答

14

Does SQLite support SCOPE_IDENTITY?

退房的FAQ。功能將做到這一點。小心 觸發雖然

未經測試,但你應該能夠在一次調用中發送這兩個語句。自從我編寫任何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 
+4

btw,使用ODBC驅動程序,必須將查詢分成2個調用。 – AngryHacker 2009-09-19 01:37:28

+0

那麼Insert()返回什麼呢? - 我知道我可以查看它,但爲了完整起見,這可能很有用,因爲這是我發現這篇文章的方式。 – 2016-09-09 00:58:41

2

我不使用VB,所以我不知道你有你的數據庫使用的界面,但是,正如bendewey說,存在C API的函數調用sqlite3_last_insert_rowid()將返回最後插入的行的主整數鍵,所以你可以在界面中尋找類似的功能。

如果不工作,你可以使用特定的SQLite查詢:

SELECT last_insert_rowid() 
2

您可以在插入後調用SELECT last_insert_rowid()

0

如果使用

SELECT last_insert_rowid() 

返回最後一個您可以使用:

SELECT last_insert_rowid() AS rowid FROM table_name LIMIT 1 

爲獲得最後rowid單個表

3

運行此查詢的代碼裏面:

SELECT SEQ from sqlite_sequence WHERE name='tablename'