如何用VB6返回SQLite中自动递增列的值

如何用VB6返回SQLite中自动递增列的值,sqlite,vb6,auto-increment,Sqlite,Vb6,Auto Increment,我在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.

我在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的方法,而不必发出另一个查询select maxEventTypeID from EventType

我似乎记得很久以前的VB6中,有一种方法可以做到这一点

看看这本书。这个 函数就可以了。小心 尽管如此

未测试,但您应该能够在一个调用中发送这两个语句。我已经有一段时间没有写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

我不使用VB,所以我不知道您在数据库中使用的接口,但是,正如bendewey所说,在c API中有一个名为sqlite3_last_insert_rowid的函数,它将为最后插入的行返回主整数键,因此您可以在接口中查找类似的函数

如果不起作用,可以使用SQLite特定的查询:

SELECT last_insert_rowid()
如果使用,您可以在插入后调用SELECT last_insert_rowid

SELECT last_insert_rowid() 
返回最后一个rowid,您可以使用:

SELECT last_insert_rowid() AS rowid FROM table_name LIMIT 1

要获取单个表的最后一行ID,请在代码中运行此查询:

SELECT SEQ from sqlite_sequence WHERE name='tablename'

顺便说一句,使用ODBC驱动程序,您必须将查询拆分为两个调用。那么Insert返回什么呢?-我知道我可以查到它,但为了完整性,它可能在这里很有用,因为我就是这样找到这篇文章的。可能重复的不是上面说的:last_insert_rowid SQL函数是sqlite3_last_insert_rowid C/C++接口函数的包装器。这意味着不存在单个表的最后一个rowid。