Di chuyển trong Recordset

  • Thread starter Thread starter anhthuan
  • Ngày gửi Ngày gửi
Liên hệ QC

anhthuan

Thành viên hoạt động
Tham gia
10/12/06
Bài viết
106
Được thích
264
Chào cả nhà
Mình có đoạn code liên quan đến việc di chuyển trong recordset như sau
Mã:
Set rst = New ADODB.Recordset
dim i as long
With rst
        .Open ql, cnn ' liên kết cnn đã đc tạo và hoạt động bình thường
        If Not .EOF Then
            [COLOR=Red].MoveLast[/COLOR] ' [COLOR=RoyalBlue]lỗi thư nhất nằm ở đây[/COLOR]
            Do While Not .EOF
                for i=0 to rst.Recordcount
                     [COLOR=Red]rst.move (i)[/COLOR]  ' [COLOR=RoyalBlue]lỗi thứ 2 nằm ở đây[/COLOR]
                     Activesheet.cells(i,2).value=rst.fields(0)
                next i
            Loop
        End If
End With
Và đây là thông báo lỗi
- Lỗi thứ nhất:
Mã:
Run-time error '-2147217884(80040e24)'
                      Rowset does not support fetching backwark
- Lỗi thứ hai:
Mã:
Run-time error '3021'
                      Either BOF and EOF is True, or the curren record has been deleted
                      Requested operation required a curren record
Mình chưa thể sửa được hai cái lỗi này. Các cao thủ nào biết được thì chỉ cho mình với
Cám ơn rất nhiều
B/S: trong du lieu truy cập đã có sẵn 2 bản ghi thoa mãn điều kiện
 
Chỉnh sửa lần cuối bởi điều hành viên:
Mã:
Rowset does not support fetching backwark
xem lại kiểu con trỏ xem, google ra ngay
Mã:
for i=0 to rst.Recordcount
sửa thành
Mã:
for i=0 to rst.Recordcount-1
vì từ 0 đến 2 là 3 record rồi.
 
Chỉnh sửa lần cuối bởi điều hành viên:
To: anhthuan,
Thông thường, để xét một Recordset thì chúng ta sẽ dùng đoạn code sau:
Mã:
If rsObj Is Nothing Then
    'Kiểm tra xem biến rsObj có tạo chưa

ElseIf rsObjrs.BOF And rsObj.EOF Then
    'Nếu Recordset không có record nào
    
Else
    'Nếu Recordset có giá trị thì thực hiện các đoạn code tiếp sau
    
End If

Đoạn code của bạn có thể sửa lại như sau: (giả sử rằng bạn đã tạo và lấy dữ liệu về và gán cho biến recordset)
Mã:
i= giá trị hàng đầu tiên bạn muốn đặt giá trị
With rst
        Do While Not .EOF
                Activesheet.cells(i,2).value=.fields(0) 
                'Nên thay ActiveSheet thành đối tượng worksheet cụ thể
                .MoveNext
                i=i+1
        Loop
End With

Lê Văn Duyệt

Ps: Bạn có thể download ebook về ADO về đọc, hoặc tra cứu.
 
Lần chỉnh sửa cuối:
To: anhthuan,
Thông thường, để xét một Recordset thì chúng ta sẽ dùng đoạn code sau:

Góp vui:

Mã:
Public Function blnDataReturned(ByRef RS As ADODB.Recordset) As Boolean
'******************************************************************************
'*                                                                            *
'* Name:    blnDataReturned                                                   *
'*                                                                            *
'* Purpose: Test to see if an ADO recordset has data in it.                   *
'*                                                                            *
'* Returns: Boolean - True (data returned); False (otherwise)                 *
'*                                                                            *
'******************************************************************************
On Error GoTo blnDataReturned_Error


  '// Assume no data returned
  blnDataReturned = False

  
  '// If Nothing ... no data
  If RS Is Nothing Then Exit Function

  
  '// If no records ... no data
  If RS.BOF And RS.EOF Then Exit Function

  
  '// All's well. Data was returned.
  blnDataReturned = True


blnDataReturned_Done:
  Exit Function

blnDataReturned_Error:
  Call Process_Error(MODULE_NAME, "blnDataReturned")
  Resume blnDataReturned_Done

End Function

How to use:
Mã:
...
If Not blnDataReturned(oRS) Then Goto PROC_DONE
...
 
Web KT

Bài viết mới nhất

Back
Top Bottom