2009-02-10 49 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'