2013-07-31 2 views
0

업데이트 및 읽기가 정상적으로 작동하는 Classic ASP를 통해 qqlite3 db에 새 레코드를 삽입하는 동안 오류가 발생합니다. 기본적으로 표준에 귀결sqlite windows를 삽입 할 수 없습니다 -

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 포함, 모두 완벽하게 제어 할 수있다), 그리고 아무 저널링에 DB를 변경 했어 이 문제로 인해 (Exception Message: Some kind of disk I/O error occurred); 기존 레코드에 대한 읽기 및 업데이트가 좋습니다.

현재 버전의 http://www.ch-werner.de/sqliteodbc/ 32 비트 ODBC 드라이버를 사용하고 있습니다.

(adOpenKeyset, adLockOptimistic)와 같은 다른 레코드 세트 옵션을 설정해 보았습니다. 행운, 같은 오류 메시지. 나는 sqliteodbc 코드를 읽고 지원되는 속성 /이 무엇인지 확인하려고 시도했지만이를 해결하지 못했습니다.

+0

귀하의 코드입니다. 그것은 테이블을 검색하고있다. ('tablename'는 실제로 테이블의 이름을 가지고있다.) 아무것도 삽입하지 않습니다. 레코드를 삽입하려면 [INSERT INTO] 문을 실행하기 위해 [ADO Command] (http://msdn.microsoft.com/en-us/library/ms677502) 개체를 사용하지 않는 것이 어떻습니까? –

+0

'Insert into table'은 실제로 작동합니다. 그러나 루프 내에서 '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

이전에 tack을 변경하고 다른 것을 가지고 간 후에, 나는 다시 다른 문제로 돌아 왔고 문제를 다시 쳤다. Google 검색, 그리고 여기 내 대답없는 질문이 있습니다. 나는 그걸로 돌아 왔고 당신의 접근 방식을 시도해 봤고 나의 sqlite 데이터베이스는'Provider error '8002000a'Out of present range '를 던졌습니다. 그래서 우리가 사용하고있는 드라이버에 약간의 차이가있는 것 같습니다 - 어쩌면 32/64 비트 또는 약간의 멍청한 문제 그런 식으로. 내 코를 따라야하고 지난 번에 내가 어떻게 돌아 왔는지보아야 할 것처럼 보입니다! – frumbert

+0

도움이 필요하면 코드를 보여줘야합니다. 이에 대한 새로운 질문을 게시하십시오. –

관련 문제