Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Lỗi] A/C giup lenh tim kiem
#1
A/c giup gium cau lenh sai nhu the nao minh ko chay duoc.
minh muon tim kiem truc tiep tren form, khi hoso trung thi load hoso do ra form.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim rs As Recordset
Dim thongbao As Boolean
Set rs = CurrentDb.OpenRecordset("bang_th", dbOpenTable)' table co ten la bang_th
rs.MoveFirst
thongbao = False
Do While Not rs.EOF
If rs.Fields("id") = idhoso.Value Then ' trong table co file id, tren form co textbox: idhoso
thongbao = True
Exit Do
End If
rs.MoveNext
Loop
If thongbao = False Then
MsgBox "ko tom thay "
Else
Me.Bookmark = rs.Bookmark
Chữ ký của nvthanghcm Xin chào, mình là nvthanghcm, Tham gia http://thuthuataccess.com/forum từ ngày 07-10 -14.
Reply
Những người đã cảm ơn
#2
(07-10-14, 05:43 PM)nvthanghcm Đã viết: A/c giup gium cau lenh sai nhu the nao minh ko chay duoc.
minh muon tim kiem truc tiep tren form, khi hoso trung thi load hoso do ra form.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim rs As Recordset
Dim thongbao As Boolean
Set rs = CurrentDb.OpenRecordset("bang_th", dbOpenTable)' table co ten la bang_th
rs.MoveFirst
thongbao = False
Do While Not rs.EOF
If rs.Fields("id") = idhoso.Value Then ' trong table co file id, tren form co textbox: idhoso
thongbao = True
Exit Do
End If
rs.MoveNext
Loop
If thongbao = False Then
MsgBox "ko tom thay "
Else
Me.Bookmark = rs.Bookmark

Lỗi báo thế nào bạn? Mà nguồn DL của form có không
Chữ ký của vulhu06 Xin chào, mình là vulhu06, Tham gia http://thuthuataccess.com/forum từ ngày 15-06 -12.
Reply
Những người đã cảm ơn
#3
(07-10-14, 05:43 PM)nvthanghcm Đã viết: A/c giup gium cau lenh sai nhu the nao minh ko chay duoc.
minh muon tim kiem truc tiep tren form, khi hoso trung thi load hoso do ra form.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim rs As Recordset
Dim thongbao As Boolean
Set rs = CurrentDb.OpenRecordset("bang_th", dbOpenTable)' table co ten la bang_th
rs.MoveFirst
thongbao = False
Do While Not rs.EOF
If rs.Fields("id") = idhoso.Value Then ' trong table co file id, tren form co textbox: idhoso
thongbao = True
Exit Do
End If
rs.MoveNext
Loop
If thongbao = False Then
MsgBox "ko tom thay "
Else
Me.Bookmark = rs.Bookmark

A.Trước tiên mình có vài góp ý về thủ tục trên và các khả năng gây lỗi:

1/ khai báo biến Recordset không tường minh, bạn nên khai báo rõ :
Dim rs As DAO.Recordset hoặc ADO.Recordset

2/nếu sử dụng linked tables thì câu này sẽ bị lỗi :
Mã:
Set rs = CurrentDb.OpenRecordset("bang_th", dbOpenTable)
phải thay dbOpenTable bằng dbOpenDynaset hoặc dbOpenSnapshot (nếu chỉ mở ra để làm cơ sở tìm kiếm thì nên định kểu cho Recordset là Snapshot)

3/Khi bạn mở ra một Recordset khác thì câu này hoàn toàn không chắc mang lại kết quả mong muốn:
Me.Bookmark = rs.Bookmark
bởi vì Bookmark của Recordset làm nguồn cho form chưa chắc đã trùng với rs, đặc biệt là các form có dữ liệu được join từ nhiều bảng khác nhau

B.Vậy hướng giải quyết sẽ như thế nào?

Theo như thủ tục trên thì bạn đang có một bound form với nguồn là bảng [bang_th] có trường [id] là khóa chính và trên form có một text box dủng để nhập dữ liệu (id) cần tìm có tên "idhoso" ?

Nếu đúng vậy thì cách đơn giản và hiệu quả nhất, ít tốn tài nguyên máy là:
bạn code cho sự kiện

Mã:
Private Sub Idhoso_AfterUpdate()
    With Me
        .txtID.SetFocus  'txtID là text box trên from và có nguồn là trường [id]
        DoCmd.FindRecord .Idhoso
        If .txtID.Value <> .Idhoso.Value Then
            MsgBox "Khong tim thay du lieu yeu cau"
            .txtID.SetFocus
        End If
    End With
        
End Sub

-Nếu bạn muốn dùng DAO cho hoành tráng (014) thì code như sau:
Tạo ra một bản sao của Recordset hiện đang làm nguồn cho form (với thuộc tính Recordset.Clone ) và tìm kiếm trên đó
Mã:
Sub FindRecord()
    Dim rs As DAO.Recordset
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[id] = " & Nz(Me.Idhoso, "")
    If rs.NoMatch Then
        MsgBox "Khong tim thay: " & Me.Idhoso
    Else
        Me.Bookmark = rs.Bookmark
    End If
    
    Set rs = Nothing
End Sub

-Thực ra để tìm kiếm dữ liệu trên trường có lập chỉ mục (như khóa chính) thì dùng Seek là nhanh nhất, nhưng phương pháp này cũng không dùng được với linked tables
bạn có thể tham khảo thêm tại đây

Chúc bạn thành công! 015
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Help] Chỉnh giúp Form thống kê hoanghai902 2 125 28-10-16, 06:15 PM
Bài mới nhất: hoanghai902
  Xin giúp tạo 1 trường trong table đánh số tự động thay cho autonumber trungminh 7 450 16-09-16, 05:17 PM
Bài mới nhất: maidinhdan
  Giúp đỡ về form với trungminh 9 492 10-09-16, 09:17 PM
Bài mới nhất: trungminh
Lightbulb Hướng Dẫn Tạo form tìm kiếm theo nhiều tiêu chí khác nhau khanhduycsgt 18 8,687 04-08-16, 10:29 PM
Bài mới nhất: huuduy.duy
  [Help]Tạo nút lệnh tiếp tục khanhnevn30 6 409 18-06-16, 08:39 PM
Bài mới nhất: maidinhdan

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ