這個問題在這里已經有了答案: ASP 3.0 宣告包含 ADOVBS.inc 的 ADO 常量 (3 個答案) 2天前關閉。
我有一段查詢 MS Access 資料庫的 VBScript。當記錄集查詢在表上時,我可以通過我的記錄集并執行 rs.MoveFirst 以回到開頭。但是,當記錄集查詢在查詢中時,rs.MoveFirst 失敗并顯示錯誤“此類物件不支持操作”代碼:800004005。
這是已知的限制嗎?我可以通過以不同的方式打開記錄集來解決它嗎?我已經嘗試了 rs.Open 和網上的許多示例一樣,但rs.Open strQuery, Cn, adOpenDynamic, adLockPessimistic, adCmdText由于“引數型別錯誤、超出可接受范圍或相互沖突”而失敗。
此代碼有效,因為 MyTable 是一個表:
Set rs = CreateObject("ADODB.Recordset")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyAccessDB.accdb;Mode=Read;"
connection.Open strConnection
Set rs = connection.Execute("SELECT * FROM MyTable")
MsgBox(rs.fields(1))
rs.MoveNext
rs.MoveFirst
MsgBox(rs.fields(1))
此代碼失敗,因為 MyQuery 是資料庫中的查詢
Set rs = CreateObject("ADODB.Recordset")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyAccessDB.accdb;Mode=Read;"
connection.Open strConnection
Set rs = connection.Execute("SELECT * FROM MyQuery")
MsgBox(rs.fields(1))
rs.MoveNext
rs.MoveFirst
MsgBox(rs.fields(1))
使用 rs.Open 和定義常量不起作用。這在 rs.movefirst 命令上顯示了相同的錯誤“這種型別的物件不支持操作”。
const adOpenDynamic = 2
const adLockPessimistic = 2
const adCmdText = 1
Set connection = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyAccessDB.accdb;Mode=Read;"
connection.Open strConnection
strsql = "SELECT * FROM MyQuery"
rs.Open strsql, connection, adOpenDynamic, adLockPessimistic, adCmdText
Do While Not rs.EOF
msgbox(rs.fields(1))
rs.movenext
msgbox(rs.fields(1))
rs.movefirst
msgbox(rs.fields(1))
Loop
uj5u.com熱心網友回復:
有一種更簡單的方法可以解決這個問題,那就是ADODB.Recordset完全否定,而不必擔心游標和鎖定支持。值得一提的是,這僅適用于讀取資料。
用于GetRows()檢索二維陣列并使用它來導航資料。
Dim strConnection, connection, rs, data
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyAccessDB.accdb;Mode=Read;"
Call connection.Open(strConnection)
Set rs = connection.Execute("SELECT * FROM MyTable")
If Not rs.EOF Then data = rs.GetRows()
'Release recordset as it's no longer needed.
Call rs.Close()
Set rs = Nothing
Dim row, rows
Const fld_field1 = 1
If IsArray(data) Then
rows = UBound(data, 2) 'Number of rows
row = 0
Call MsgBox(data(fld_field1, row) 'Second column of First Row
row = 1
Call MsgBox(data(fld_field1, row) 'Second column of Second Row
row = 0
Call MsgBox(data(fld_field1, row) 'Second column of First Row
'If you want to loop the data
For row = 0 To rows
Call MsgBox(data(1, row) 'Second Column of N Row
Next
End If
uj5u.com熱心網友回復:
這將起作用。
您不需要宣告 const、變數等。
您只需要設定對 ADODB 的參考,在您的情況下是對 Microsoft Activex 資料物件 2.8 庫的參考。
沒有理由這不起作用。
Set Connection = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Dim strConnection
Dim sql
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyAccessDB.accdb;Mode=Read;"
Connection.Open strConnection
sql = "SELECT * FROM MyQuery"
rs.Open sql, Connection, adOpenStatic, adLockReadOnly, adCmdText
MsgBox (rs.Fields(1))
rs.MoveNext
MsgBox (rs.Fields(1))
rs.MoveFirst
MsgBox (rs.Fields(1))
rs.Close
Set rs = Nothing
Connection.Close
Set Connection = Nothing
編輯:我忽略了你寫“一段 vbscript”的事實。如果您在 vbs 檔案中使用此代碼,則需要宣告常量
Const adOpenStatic = 3
Const adLockReadOnly = 1
Const adCmdText = &H0001
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/433074.html
上一篇:MSAccess表單控制元件只會一起移動,但不會分組或堆疊
下一篇:SQL-如何使用聯合獲取列的總和
