如何使用 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 码是多少? 如回车 空格