如何用VB6返回SQLite中AUTO INCREMENT列的值

问题描述 投票:0回答:6

我在 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,有一种方法可以做到这一点。

sqlite vb6 auto-increment
6个回答
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

13
投票

在代码中运行此查询:

SELECT SEQ from sqlite_sequence WHERE name='tablename'

3
投票

我不使用VB,所以我不知道你在数据库中使用的接口,但是,正如bendewey所说,c API中有一个名为

sqlite3_last_insert_rowid()
的函数,它将返回主整数键最后插入的行,因此您可以在界面中查找类似的功能。

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

SELECT last_insert_rowid()

2
投票

您可以在插入后致电

SELECT last_insert_rowid()


0
投票

从3.35版本开始你可以使用

Insert Into <yourtable> Default Values Returning <idcolumn>

使用 ExecuteScalar 运行插入。


-1
投票

如果使用

SELECT last_insert_rowid() 

返回最后一个

rowid
,你可以使用:

SELECT last_insert_rowid() AS rowid FROM table_name LIMIT 1

获取单个表的最后一个

rowid

© www.soinside.com 2019 - 2024. All rights reserved.