0

我在尝试通过 Classic ASP 向 q sqlite3 db 插入新记录时看到一个错误,其中更新和读取工作正常。

ODBC driver does not support the requested properties.
/engine/includes/ajaxed/class_database/database.asp, line 160

这基本上归结为您的标准:

connectionString = "DRIVER=SQLite3 ODBC Driver;Database=" & server.mappath("/site.db") & ";LongNames=0;Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;
set connection = server.createObject("ADODB.connection")
connection.open(connectionString)
set aRS = server.createObject("ADODB.Recordset")

' error raised on next line
aRS.open tablename, connection, adOpenKeyset, adLockPessimistic, adCmdTable

权限是正确的(基本上该文件拥有所有人的完全控制权,包括 IUSR),由于这个问题,我不得不将数据库更改为无日志(异常消息:发生某种磁盘 I/O 错误);对现有记录的读取和更新都很好。

我正在使用http://www.ch-werner.de/sqliteodbc/ 32 位 odbc 驱动程序的当前版本。

我尝试设置其他记录集选项,例如 (adOpenKeyset, adLockOptimistic); 没有运气,同样的错误信息。我尝试阅读 sqliteodbc 代码以查看支持的属性 /are/,但无法解决。

4

1 回答 1

0

以下代码适用于我:

Const adOpenKeyset      = 1
Const adLockPessimistic = 2
Const adCmdTable        = 2

db = "C:\test.db"
connectionString = "DRIVER=SQLite3 ODBC Driver;Database=" & db & _
  ";LongNames=0;Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;"

Set conn = CreateObject("ADODB.Connection")
conn.Open connectionString
Set rs = CreateObject("ADODB.Recordset")

tablename = "a"
rs.Open tablename, conn, adOpenKeyset, adLockPessimistic, adCmdTable

cols   = Array("id", "name")
values = Array(3, "baz")
rs.AddNew cols, values
rs.Update

例子:

C:\>sqlite3 test.db "CREATE TABLE a (id integer, name varchar(20));"

C:\>sqlite3 test.db "INSERT INTO a VALUES (1, 'foo');"

C:\>sqlite3 test.db "INSERT INTO a VALUES (2, 'bar');"

C:\>sqlite3 test.db "SELECT * FROM a;"
1|foo
2|bar

C:\>cscript //NoLogo C:\path\to\sample.vbs

C:\>sqlite3 test.db "SELECT * FROM a;"
1|foo
2|bar
3|baz
于 2013-08-01T14:09:46.273 回答