2013-07-31 63 views
0

我看到一个错误,试图插入新的记录到q sqlite3数据库通过经典的ASP,其中更新和读取工作正常。sqlite窗口无法插入 -

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),并且我已经到数据库更改为无日志型由于这个问题(Exception Message: Some kind of disk I/O error occurred);对现有记录的读取和更新都很好。

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

我试着设置其他记录集选项,如(adOpenKeyset,adLockOptimistic);没有运气,相同的错误信息。我试图读取sqliteodbc代码来查看支持的属性/是/,但无法实现。

+0

你的代码(这为我工作,当我测试)不符合你的目标。它正在检索一个表(提供的'tablename'实际上包含了表的名字)。它不会插入任何东西。如果要插入记录,为什么不使用[ADO命令](http://msdn.microsoft.com/zh-cn/library/ms677502)对象来运行“INSERT INTO”语句? –

+0

“插入表”确实有效。但是有一个记录集,在这个记录集中,然后发布诸如'aRS.addNew().. aRS.update,',在一个循环中说,不起作用。基本上我不能有一个记录集,我可以作为一个活动的连接记录集进行遍历,因为我无法确定活动记录集的受支持属性。 – frumbert

+0

就我个人而言,我会选择一些有用的东西,而不是挂在没有的东西上。然而,如果你想坚持'aRS.Update'路由,你需要显示失败的代码(包括错误消息等),也就是你在'aRS.Open'和'aRS.Update '。我们无法帮助您处理已经工作的代码。 –

回答

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
+0

先前已经改变了方向,并与别的东西一起走了,然后我又回到另一个问题,再次出现问题。谷歌搜索,这里是我的未答复的问题了。我回到它并尝试你的方法,并且我的sqlite数据库抛出提供程序错误'8002000a'超出当前范围。“因此它看起来像我们正在使用的驱动程序有一些差异 - 可能是32/64位或一些愚蠢的问题像那样。看起来我必须跟着我的鼻子,看看我上次如何解决它! – frumbert

+0

如果你需要帮助,你需要显示你的代码。为此发布一个新问题。 –