2013-01-02 29 views
5

tôi đang cố gắng để truy vấn cơ sở dữ liệu MySQL với mã dưới đây:rowSet không hỗ trợ di chuyển ngược

'declare the variables 
Dim Connection 
Dim Recordset 
Dim SQL 

'declare the SQL statement that will query the database 
SQL = "SELECT * FROM CUSIP" 

'create an instance of the ADO connection and recordset objects 
Set Connection = CreateObject("ADODB.Connection") 
Set Recordset = CreateObject("ADODB.Recordset") 

'open the connection to the database 
Connection.Open "DSN=CCS_DSN;UID=root;PWD=password;Database=CCS" 

Recordset.CursorType=adOpenDynamic 

'Open the recordset object executing the SQL statement and return records 

Recordset.Open SQL,Connection 
Recordset.MoveFirst 

If Recordset.Find ("CUSIP_NAME='somevalue'") Then 
    MsgBox "Found" 
Else 
    MsgBox "Not Found" 
End If 


'close the connection and recordset objects to free up resources 
Recordset.Close 
Set Recordset=nothing 
Connection.Close 
Set Connection=nothing 

Bất cứ khi nào tôi thực hiện trên, chúng tôi nhận được một lỗi 'rowset không hỗ trợ di chuyển lạc hậu', bất cứ đề nghị?

+0

theo http://msdn.microsoft.com/en-us/library/ee275542%28v=bts.10%29.aspx bạn không sử dụng.Đúng chính xác. –

Trả lời

6

adOpenDynamic không được khai báo trong VBScript và do đó bằng Empty, được chuyển đổi thành 0 khi bạn gán thuộc tính CursorType.
0adOpenForwardOnly và chỉ chuyển tiếp không hỗ trợ di chuyển ngược, khả năng phương thức Find muốn.

Bạn nên thay thế adOpenDynamic với giá trị văn chương của nó:

Recordset.CursorType = 2 'adOpenDynamic 

Để tránh lớp này lỗi hoàn toàn, đặt Option Explicit như dòng đầu tiên của kịch bản của bạn.

+0

Điều đó đã làm được điều đó! Cảm ơn !! btw bạn sẽ biết tại sao 'recordset.recordcount' trả về -1 khi có 5 hàng trong cơ sở dữ liệu và cursortype thay đổi thành động? –

+0

@TelsonAlva Vì nó được [tài liệu] (http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms676701 (v = vs.85) .aspx) để làm như vậy: 'Kiểu con trỏ của đối tượng Recordset ảnh hưởng đến việc có thể xác định số lượng bản ghi hay không. Thuộc tính RecordCount sẽ trả về -1 cho con trỏ chỉ chuyển tiếp; số đếm thực tế cho con trỏ tĩnh hoặc keyset; và là -1 hoặc số đếm thực tế cho con trỏ động, tùy thuộc vào nguồn dữ liệu.' – GSerg

+0

Ồ, tôi hiểu ngay! Vì vậy, tôi cần phải thay đổi kiểu con trỏ thành tĩnh để có được số đếm. Nếu không, vì nó là năng động, có khả năng cho bản ghi thay đổi động. Cảm ơn ! –

0

Đó là bởi vì các rowset không cho phép di chuyển lạc hậu; như thông báo lỗi cho thấy. Mã của bạn không sử dụng chúng; vì vậy bạn nên thay thế dòng

Recordset.CursorType = adOpenDynamic với Recordset.CursorType = adOpenForwardOnly (hoặc giá trị tương đương 0)

Better rời khỏi dây chuyền hoàn toàn; mặc định là con trỏ chuyển tiếp.

+0

Bạn đã làm theo cách khác. Phương thức 'Find' muốn khả năng di chuyển ngược. – GSerg

Các vấn đề liên quan