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?

查看常见问题解答sqlite3_last_insert_rowid() 函数会做到这一点。 不过要小心触发器

未经测试,但您应该能够在一次调用中发送两个语句。自从我编写任何 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 所说,c API 中有一个函数sqlite3_last_insert_rowid()将返回最后插入的行的主整数键,因此您可以在界面中寻找类似的功能。

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

SELECT last_insert_rowid()
于 2009-02-10T05:20:22.993 回答
2

您可以SELECT last_insert_rowid()在插入后致电

于 2009-02-10T05:21:09.467 回答
-1

如果使用

SELECT last_insert_rowid() 

返回最后一个rowid,您可以使用:

SELECT last_insert_rowid() AS rowid FROM table_name LIMIT 1

获取rowid单个表的最后一个

于 2014-03-20T08:15:00.277 回答