Sửa dùm em đoạn code VB có chức năng tìm kiếm cho access (3 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

huyencodon

Thành viên mới
Tham gia
19/5/10
Bài viết
3
Được thích
0
Mã:
Private Sub tIM_Click()
Dim t As Integer
Dim r As Recordset
Set r = Me.RecordsetClone
t = InputBox("Nhap ma DB GLV can tim")
r.FindFirst "[DBGLVID]='" & t & "'"
If r.NoMatch Then
  MsgBox "Khong co ma DB GLV nay"
Else
  Me.Bookmark = r.Bookmark
End If
r.Close
End Sub




Hiện tại thì đoạn code này chạy rất tốt nếu cột [DBGLVID] của em là dạng text ... nhưng em đổi thành AutoNumber thì đoạn code này báo lỗi "data type mismatch in criteria expression"

Mong các anh sửa lại giúp em cho đoạn code này chạy được khi cột [DBGLV] là dạng AutoNumber

Cám ơn các anh rất nhiều
 
vậy thì nên sửa thành ntn ... mong anh chỉ giúp em :)

em đang làm 1 csdl để quản lý học sinh mà chỉ biết những cái cơ bản khi học access thôi ... còn mấy vụ việc VB này thì chịu thua :(

Cám ơn anh dhn46 nhìu!
 
r.FindFirst "[DBGLVID]= " & trim(t)
 
Theo mình hiểu thì thực chất vấn đề là kiểu dữ liệu của tiêu chuẩn tìm kiếm và dữ liệu tìm kiếm không đồng nhất (giống nhau) nên nó báo lỗi. Thông báo lỗi cũng chỉ rõ điều này. Cụ thể:
-Field DBGLVID thiết lập là AutoNumber. Kiểu dữ liệu: Nummeric.
-t nhập bằng Inputbox: Kiểu dữ liệu dạng String

Hướng giải quyết: Đổi 1 trong 2 theo cái còn lại là được

r.FindFirst "[DBGLVID]= " & Val(t)

Hoặc:

r.FindFirst "Str([DBGLVID])= " & t

(Minh chưa test, bạn test giùm)


 
Hướng giải quyết: Đổi 1 trong 2 theo cái còn lại là được

r.FindFirst "[DBGLVID]= " & Val(t)

Hoặc:

r.FindFirst "Str([DBGLVID])= " & t
Cách 1 của sealand:
Khi dùng toán tử nối chuỗi thì tự động biến thành chuỗi rồi Sealand ạ. Kể cả dùng val xong rồi nối cũng sẽ thành chuỗi. Do đó không cần Val
Ngoài ra, cấu trúc lệnh r.FindFirst yêu cầu 1 chuỗi criteria đi kèm thí dụ "[DBGLVID] = 123", trong đó [DBGLVID] là 1 field và 123 lấy từ 1 textbox

Cách 2 của sealand:
Tương tự như trên, chuỗi sau khi nối sẽ là: Str([DBGLVID])= 123 (Sẽ bị lỗi Type mismatch)
Muốn làm theo hướng này thì làm vầy:

r.FindFirst "Str([DBGLVID])= '" & t & "'"

Sau khi nối chuỗi ta có Str([DBGLVID])= '123', không bị lỗi Type Mismatch

Còn sở dĩ dùng Trim là vì mình tránh trường hợp VBA tự động gán 1 vài ký tự trắng không mong muốn vào, dò tìm sẽ không ra.
 
Lần chỉnh sửa cuối:
Cám ơn anh ptm0412 và anh sealand rất nhiều

Em đã làm được rồi

Nhưng nó lại phát sinh 1 lỗi nho nhỏ là khi mình nhập số thì không sao



nhưng nếu nhập chữ thì nó lại báo debug

em nghĩ có lẽ phải thêm 1 hàm if nhưng chưa biết phải sửa ntn ... mong các anh hướng dẫn :)

PHP:
Private Sub tIM_Click()
Dim t As Integer
Dim r As Recordset
Set r = Me.RecordsetClone
t = InputBox("Nhap ma DB GLV can tim")
r.FindFirst "[DBGLVID]=" & Trim(t)
If r.NoMatch Then
  MsgBox "Khong co ma DB GLV nay"
Else
  Me.Bookmark = r.Bookmark
End If
r.Close
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
PHP:
t = InputBox("Cho so", "Number only")
If Not IsNumeric(t) Then MsgBox "Da noi la cho so roi!": Exit Sub
 
Mã:
Private Sub tIM_Click()
Dim t As Integer
Dim r As Recordset
Set r = Me.RecordsetClone
t = InputBox("Nhap ma DB GLV can tim")
r.FindFirst "[DBGLVID]='" & t & "'"
If r.NoMatch Then
  MsgBox "Khong co ma DB GLV nay"
Else
  Me.Bookmark = r.Bookmark
End If
r.Close
End Sub
Hiện tại thì đoạn code này chạy rất tốt nếu cột [DBGLVID] của em là dạng text ... nhưng em đổi thành AutoNumber thì đoạn code này báo lỗi "data type mismatch in criteria expression"

Mong các anh sửa lại giúp em cho đoạn code này chạy được khi cột [DBGLV] là dạng AutoNumber

Cám ơn các anh rất nhiều

Bạn khai báo t là ở dạng số cho inputbox và trường DBGLVID cũng ở dạng số, nhưng r.FindFirst "[DBGLVID]='" & t & "'" là ở dạng chuổi nên gây ra lỗi. Bỏ cái mình tô đỏ đi là được.
Nếu muốn không gây lỗi khi tìm ở dạng số thì thêm cái bẫy lổi vào là được.

Mã:
Dim t 'As Integer
Dim r As Recordset
Set r = Me.RecordsetClone
    t = InputBox("Nhap ma DB GLV can tim")
        If IsNumeric(t) Then
            r.FindFirst "[DBGLVID]=" & t
          Else
            MsgBox "Truong 'DBGLVID' dang so, vui long nhap so de tim.", vbInformation
            Exit Sub
        End If
    If r.NoMatch Then
        MsgBox "Khong co ma DB GLV nay"
      Else
        Me.Bookmark = r.Bookmark
    End If
r.Close

Lưu ý là phải sửa khai báo biến t ở dạng Variant.
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom