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

Posted

技术标签:

【中文标题】如何使用 VB6 在 SQLite 中返回 AUTO INCREMENT 列的值【英文标题】:How to return the value of AUTO INCREMENT column in SQLite with VB6 【发布时间】:2010-10-06 13:51:04 【问题描述】:

我在 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))?

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

【问题讨论】:

Does SQLite support SCOPE_IDENTITY?的可能重复 【参考方案1】:

Does SQLite support SCOPE_IDENTITY?

查看FAQ。这 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

【讨论】:

顺便说一句,使用 ODBC 驱动程序,您必须将查询拆分为 2 个调用。 那么 Insert() 返回什么? - 我知道我可以查找它,但它可能对完整性有用,因为这就是我找到这篇文章的方式。【参考方案2】:

在您的代码中运行此查询:

SELECT SEQ from sqlite_sequence WHERE name='tablename'

【讨论】:

【参考方案3】:

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

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

SELECT last_insert_rowid()

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

如果使用

SELECT last_insert_rowid() 

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

SELECT last_insert_rowid() AS rowid FROM table_name LIMIT 1

获取单个表的最后一个rowid

【讨论】:

这不是documentation 所说的:“last_insert_rowid() SQL 函数是 sqlite3_last_insert_rowid() C/C++ 接口函数的包装。”这意味着单个表没有最后一个 rowid 这样的东西。

以上是关于如何使用 VB6 在 SQLite 中返回 AUTO INCREMENT 列的值的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ATL activex 控件将错误字符串和错误代码返回到 VB6?

VB6.0 中 CHR() 函数如何使用? 还有特殊符号的 ASCII 码是多少? 如回车 空格

如何从 ATL 返回正错误代码到 VB6?

如何从 C# 中的方法返回等效的 VB6 Variant 类型

如何在 SQLite 的插入查询中返回自动增量值?

VB6.0中如何实现逐行读入文本文件?