Cần giúp về làm form tìm kiếm

lipton

New Member
Hội viên mới
Hi,

Mình không học về access, chỉ mò mẫm trên net. Do hiện đang viết cho nhà chương trình quản lý. muh mình search không thấy nhiều về làm form tìm kiếm nên cuối cùng post lên đây rất mong mọi người giúp.:noinhiu:
Cụ thể như sau:
Mình có 1 table bao gồm: Hovaten, ngaysinh, noisinh, hktt,..v..v

Mình muốn làm 1 form tìm kiếm (tìm theo tên gần đúng), trong form bao gồm một text box để nhập. Sau khi nhập ấn vào button Tìm, những dữ gần đúng sẽ được list ra bên dưới ô List box. Khi đó mình sẽ chọn tên nào muốn xem thì dữ liêu cá nhân sẽ show ra ở những ô Textbox kế bên.

sory, mình ko rành nên cũng ko biết mô tả thế nào, nếu được rất mong được giúp chi tiết về code và nếu có bài mãu thì càng tốt ^^.:motsach:

Thanks,:giavo:
Lipton
-----------------------------------------------------------------------------------------
sau khi mò thì cũng ra tàm tạm nhưng vẫn bị 1 số lỗi mong mọi người xem và chỉnh.

file: http://www.mediafire.com/?zt3maqjonza

Lỗi là nếu trong data có 2 tên trùng nhau, thông tin khác thì khác nhưng khi search ra 2 tên trùng, click vào từng tên thì thông tin nào cũng y chang. không khác gì #_#. vd có 2 Bắp gap.
sau khi find được 2 Bắp gap. click vào xem thì đều y chang nhau không khác gì (mặc dù trong data thì khác nhau). :khocdudoi::khocdudoi::khocdudoi::khocdudoi:

Thanks,
Lipton
 
Sửa lần cuối:
Ðề: Cần giúp về làm form tìm kiếm

^^ Thanks bạn, vì mới post trong 4rum nên ko rõ.

khi tra cứu đánh "Bánh gap" sẽ ra 2 cái trùng tên. nhưng khi click vào để xem chi tiết thì 2 cái đều y chang nhau. mặc dù giá tiến và cái thông tin khác thì khác nhau.:sorrynha:

http://www.mediafire.com/?zt3maqjonza
 
Ðề: Cần giúp về làm form tìm kiếm

Bạn không nên dò tìm theo tên hàng mà nên dò tìm theo mã hàng.
Listbox có thể chứa 2 cột, vậy bạn nên tạo listbox có 2 cột để người dùng gõ tìm theo tên hàng nhưng phía sau đó thì Access sẽ dò tìm theo mã hàng.
 

Đính kèm

  • tracuu.rar
    23.1 KB · Lượt xem: 205
Ðề: Cần giúp về làm form tìm kiếm

Thanks bạn,

Nhưng sau khi làm theo hướng dẫn không biết sao lại bị lỗi. hix bạn xem lại của mình dùm. Có thể do mình để Autonumber nên bị lỗi chăng ?? #_#

http://www.mediafire.com/?w12z45h2jhm

Thanks,
Lipton.

p/s: sau khi mò thì mình nghĩ do để AutoNumber, vậy có cách nào khách ko bạn? vì data của mình hiện cũng nhiều nên ko thể thay đổi #_#
 
Sửa lần cuối:
Ðề: Cần giúp về làm form tìm kiếm

AutoNumber không thể ảnh hưởng gì.
Đúng ra là để AutoNumber sẽ bảo đảm tất cả mã hàng sẽ khác nhau, không sợ trùng, như thế sẽ tìm kiếm chính xác hơn.

Bạn up lại cái file kia đi.
Down về nó có tên là traten.accdb nên không mở bằng Access được.
 
Ðề: Cần giúp về làm form tìm kiếm

^^ mình cũng ko hiểu vì sao. Vì sau khi mình change Masanpham thành autonumber thì bị lỗi liền ^^ bạn xem giúp mình, thanks.

http://www.mediafire.com/?jjnyj1iyzzm

À hiểu rồi.
Ban đầu nó là kiểu text, và bây giờ bạn muốn đổi lại thành kiểu AutoNumber mà vẫn giữ nguyên các mã đã có sẵn.
Rất tiếc là không thể được.
AutoNumber là kiểu mà Access hoàn toàn quản lý tự động bạn không thể can thiệp vào.

Tuy nhiên với table hiện tại bạn không cần phải đổi, vì bạn đã đặt Index = No Duplicates.
Mặc dù như vậy khi nhập mã hàng mới phải tốn công gõ hoặc tính toán giá trị mặc định mớm cho người nhập.
 
Ðề: Cần giúp về làm form tìm kiếm

À hiểu rồi.
Ban đầu nó là kiểu text, và bây giờ bạn muốn đổi lại thành kiểu AutoNumber mà vẫn giữ nguyên các mã đã có sẵn.
Rất tiếc là không thể được.
AutoNumber là kiểu mà Access hoàn toàn quản lý tự động bạn không thể can thiệp vào.

Tuy nhiên với table hiện tại bạn không cần phải đổi, vì bạn đã đặt Index = No Duplicates.
Mặc dù như vậy khi nhập mã hàng mới phải tốn công gõ hoặc tính toán giá trị mặc định mớm cho người nhập.

sorry mình hok hiểu lắm :hi:. Cụ thể thì sau khi down file bạn về mình làm lại cái mới (data mới), nhưng theo của bạn là Text muh của mình chọn là autonumber thì không chạy #_#. vậy ko có cách nào để masanpham là autonumber mà vẫn có thể chạy?
 
Sửa lần cuối:
Ðề: Cần giúp về làm form tìm kiếm

sorry mình hok hiểu lắm :hi:. Cụ thể thì sau khi down file bạn về mình làm lại cái mới, nhưng theo của bạn là Text muh của mình chọn là autonumber thì không chạy #_#. vậy ko có cách nào để masanpham là autonumber mà vẫn có thể chạy?

Nghĩa là data thật của bạn là AutoNumber?
Còn cái hôm qua đưa lên chỉ là file nháp mà bạn quên nên để là kiểu text?
Bây giờ bạn viết code cho data thật thì gặp lỗi, phải không?

Copy đoạn code đó paste lên đây đi cho dễ nói.
 
Ðề: Cần giúp về làm form tìm kiếm

Mã:
Option Compare Database
Dim MyArray() As String, i As Integer


Private Sub Form_Load()

    lstTenSanPham.RowSource = ""
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("tblBanhKeo", dbOpenDynaset)
    rs.MoveFirst
    ReDim Preserve MyArray(DCount("MaSanPham", "tblBanhKeo") - 1, 1)
    For i = 0 To DCount("MaSanPham", "tblBanhKeo") - 1
        MyArray(i, 0) = rs!MaSanPham
        MyArray(i, 1) = rs!TenSanPham
        lstTenSanPham.AddItem rs!MaSanPham & ";" & rs!TenSanPham
        rs.MoveNext
    Next
    Set rs = Nothing
End Sub


Private Sub lstTenSanPham_BeforeUpdate(Cancel As Integer)
    txtFind = lstTenSanPham.Column(1, Me.lstTenSanPham.ListIndex)
    Dim FindMSF
    FindMSF = lstTenSanPham
     frmLoaiSanPham.Value = 1
        txtMaSanPham = DLookup("MaSanPham", "tblBanhKeo", "MaSanPham='" & [FindMSF] & "'")
        txtTenSanPham = DLookup("TenSanPham", "tblBanhKeo", "MaSanPham='" & [FindMSF] & "'")
        txtDVT = DLookup("DVT", "tblBanhKeo", "MaSanPham='" & [FindMSF] & "'")
        txtGiaBan = DLookup("GiaBan", "tblBanhKeo", "MaSanPham='" & [FindMSF] & "'")
        txtGiaHachToan = DLookup("GiaHachToan", "tblBanhKeo", "MaSanPham='" & [FindMSF] & "'")
   
End Sub

Private Sub txtFind_KeyDown(KeyCode As Integer, Shift As Integer)
    Dim MyStr As String, Compare As VbCompareMethod
    Dim FindMSF
    MyStr = txtFind.Text
    Compare = IIf(chkCaseSensitive, vbBinaryCompare, vbTextCompare)
    
    For i = 0 To lstTenSanPham.ListCount - 1
        If InStr(1, lstTenSanPham.Column(0, i), MyStr, Compare) > 0 Then
            If KeyCode = 13 Then 'nhan phim Enter
                lstTenSanPham.Selected(i) = True
                FindMSF = lstTenSanPham.Column(0, i)
               frmLoaiSanPham.Value = 1
                    txtMaSanPham = DLookup("MaSanPham", "tblBanhKeo", "MaSanPham='" & [FindMSF] & "'")
                    txtTenSanPham = DLookup("TenSanPham", "tblBanhKeo", "MaSanPham='" & [FindMSF] & "'")
                    txtDVT = DLookup("DVT", "tblBanhKeo", "MaSanPham='" & [FindMSF] & "'")
                    txtGiaBan = DLookup("GiaBan", "tblBanhKeo", "MaSanPham='" & [FindMSF] & "'")
                    txtGiaHachToan = DLookup("GiaHachToan", "tblBanhKeo", "MaSanPham='" & [FindMSF] & "'")
              
            End If
        End If
    Exit For
    Next
End Sub

Private Sub txtFind_KeyUp(KeyCode As Integer, Shift As Integer)
    lstTenSanPham.RowSource = ""
'On Error GoTo Err_Handler

MainProcedure:
    For i = 0 To UBound(MyArray)
        If InStr(1, MyArray(i, 1), txtFind.Text, IIf(chkCaseSensitive, 0, 1)) > 0 Then
            lstTenSanPham.AddItem MyArray(i, 0) & ";" & MyArray(i, 1)
        End If
        If Len(txtFind.Text) = 0 Then
            lstTenSanPham.Selected(lstTenSanPham.ListIndex) = False
            txtMaSanPham = ""
            txtTenSanPham = ""
            txtDVT = ""
            txtGiaBan = ""
            txtGiaHachToan = ""
        Else
            lstTenSanPham.Selected(lstTenSanPham.ListIndex) = False
        End If
    Next
    Exit Sub
    
End Sub

File: http://www.mediafire.com/?jjnyj1iyzzm

Table: Masanpham - Autonumber
Tensanpham - Text
DVT-text
Giaban - curency
giahachtoan - curency

Thanks,
Lipton
 
Ðề: Cần giúp về làm form tìm kiếm

txtMaSanPham = DLookup("MaSanPham", "tblBanhKeo", "MaSanPham='" & [FindMSF] & "'")

Nó báo lỗi ở chỗ đậm đó vì field MaSanPham là kiểu số.
Bạn sửa lại: bỏ dấu nhá đơn "'" bao 2 bên FindMSF đi:

txtMaSanPham = DLookup("MaSanPham", "tblBanhKeo", "MaSanPham=" & [FindMSF] & "")

Ở những dòng dưới cũng vậy.
 

Đính kèm

  • tracuu.rar
    24.4 KB · Lượt xem: 161
Ðề: Cần giúp về làm form tìm kiếm

wow^^ got it ^^ thanks so much ^^
-----------------------------------------------------------------------------------------
ah, bạn ơi cho mình hỏi có cách nào hide đi cột masanpham ko? trong lstTen chia 2 cột 1 masanpham và 1 tensanpham, mình mún chỉ show ra cột tensanpham thì làm thế nào? thanks.
Lipton.
-----------------------------------------------------------------------------------------
thôi mình làm được roài ^^ set width cho cột =0 vậy ^^ hihi
thanks.
-----------------------------------------------------------------------------------------
ah, bây giờ mình làm thêm 1 button để mở lên xem chi tiết hơn, sau khi search và xem thông tin ở dưới muốn xem chi tiết thì chỉ việc ấn vào đó. mình đã code xong, chỉ có điều làm sao bắt lỗi khi ko nhập vào (ô search để trống?)??

Vì mình tìm theo ID và mở bản chi tiết cũng theo ID, nên khi rỗng thì bị lỗi, mình muốn bắt lỗi này, khi rỗng thì sẽ hiện thông báo hoặc ko hiện " Run time erro 3077"

Mã:
Private Sub Command129_Click()
Dim rs As Object

    DoCmd.OpenForm "Xem chi tiet"
    Set rs = Forms![Xem chi tiet].Recordset.Clone
    rs.FindFirst "ID = " & Me.txtID
    Forms![Xem chi tiet].Bookmark = rs.Bookmark

End Sub

Thanks,
Lipton
 
Sửa lần cuối:

CẨM NANG KẾ TOÁN TRƯỞNG


Liên hệ: 090.6969.247

KÊNH YOUTUBE DKT

Cách làm file Excel quản lý lãi vay

Đăng ký kênh nhé cả nhà

SÁCH QUYẾT TOÁN THUẾ


Liên hệ: 090.6969.247

Top