• Cách tạo form truy vấn thông tin nhân viên
  • Cách tạo form truy vấn thông tin nhân viên

    matran241091 > 03-05-20, 12:52 PM

    Mình đang có 1 cơ sở dữ liệu về thông tin nhân viên, trong đó có 1 trường là MASONV
    bây giờ mình muốn lập 1 form (hoặc report) trong đó có MASONV (có thể đánh tay vào )
    khi mình đánh MASONV vào thì thông tin của form sẽ thay đổi
    Ai rành chỉ mình với
  • RE: Cách tạo form truy vấn thông tin nhân viên

    Xuân Thanh > 03-05-20, 01:16 PM

    (03-05-20, 12:52 PM)matran241091 Đã viết: Mình đang có 1 cơ sở dữ liệu về thông tin nhân viên, trong đó có 1 trường là MASONV
    bây giờ mình muốn lập 1 form (hoặc report) trong đó có MASONV (có thể đánh tay vào )
    khi mình đánh MASONV vào thì thông tin của form sẽ thay đổi
    Ai rành chỉ mình với

    Dùng hàm Dloookup mà làm
    Ví dụ : txtHoten = Dlookup("Hoten","tblNhanvien", "MasoNV = txtMaso")
    txtHoten và txtMaso là tên các textbox trên form. MasoNV và Hoten là các trường của tblNhanvien
  • RE: Cách tạo form truy vấn thông tin nhân viên

    thuyyeu99 > 03-05-20, 01:33 PM

    Hình như trong even textbox có các sự kiện key nữa đó bạn nhét đoạn code trên vào cho nó pro hihihi.
  • RE: Cách tạo form truy vấn thông tin nhân viên

    matran241091 > 04-05-20, 11:12 AM

    (03-05-20, 01:16 PM)Xuân Thanh Đã viết:
    (03-05-20, 12:52 PM)matran241091 Đã viết: Mình đang có 1 cơ sở dữ liệu về thông tin nhân viên, trong đó có 1 trường là MASONV
    bây giờ mình muốn lập 1 form (hoặc report) trong đó có MASONV (có thể đánh tay vào )
    khi mình đánh MASONV vào thì thông tin của form sẽ thay đổi
    Ai rành chỉ mình với

    Dùng hàm Dloookup mà làm
    Ví dụ : txtHoten = Dlookup("Hoten","tblNhanvien", "MasoNV = txtMaso")
    txtHoten và txtMaso là tên các textbox trên form. MasoNV và Hoten là các trường của tblNhanvien
    Mình mới tập sử dụng access , bạn chỉ kĩ hơn cho mình được không
    - mình nên sử dụng form hay query hay report;
    - hàm txtHoten = Dlookup("Hoten","tblNhanvien", "MasoNV = txtMaso") là điền ở chỗ nào nhỉ
    Mình có thử dùng query để filter theo MASONV, rồi tạo form theo query, nhưng form đó không autoupdate khi mình thay đổi MASONV
    có cách nào để nó autoupdate không
    [color=#333333][size=small][font=Tahoma, Verdana, Arial, sans-serif][Hình: l6pLuQv.png]

    [Hình: p3h5NYx.png]
  • RE: Cách tạo form truy vấn thông tin nhân viên

    tranthanhan1962 > 04-05-20, 06:00 PM

    Cách dễ nhất đây. Cũng có thể lấy form nhập dữ liệu nhân viên sử dụng cũng được. Không cần phải tạo thêm query hoặc sub form gì cả. Nếu rảnh thì copy form nhập liệu thành một form khác, form này chỉ để xem mà không cho nhập, sửa.
    Trên form tạo thêm một textbox đặt tên là TIMMASONV hoặc tên gì đó cũng được , quan trọng là có tên để viết code.
    Tạo đoạn code như sau:
    Private Sub TIMMASONV_AfterUpdate()
        Dim rs As Object
        Set rs = Me.Recordset.Clone
        rs.FindFirst "[MASONV] = '" & Me![TIMMASONV] & "'"
        If Not rs.EOF Then Me.Bookmark = rs.Bookmark
    End Sub

    Khi gõ đúng MASONV tự động form sẽ chạy đến record nhân viên đó. Để dễ dàng hơn có thể thay textbox bằng combobox dùng danh sách combobox để chọn
  • RE: Cách tạo form truy vấn thông tin nhân viên

    yamakashi2003 > 05-05-20, 10:43 AM

    (04-05-20, 06:00 PM)tranthanhan1962 Đã viết: Cách dễ nhất đây. Cũng có thể lấy form nhập dữ liệu nhân viên sử dụng cũng được. Không cần phải tạo thêm query hoặc sub form gì cả. Nếu rảnh thì copy form nhập liệu thành một form khác, form này chỉ để xem mà không cho nhập, sửa.
    Trên form tạo thêm một textbox đặt tên là TIMMASONV hoặc tên gì đó cũng được , quan trọng là có tên để viết code.
    Tạo đoạn code như sau:
    Private Sub TIMMASONV_AfterUpdate()
        Dim rs As Object
        Set rs = Me.Recordset.Clone
        rs.FindFirst "[MASONV] = '" & Me![TIMMASONV] & "'"
        If Not rs.EOF Then Me.Bookmark = rs.Bookmark
    End Sub

    Khi gõ đúng MASONV tự động form sẽ chạy đến record nhân viên đó. Để dễ dàng hơn có thể thay textbox bằng combobox dùng danh sách combobox để chọn
        Set rs = Me.Recordset.Clone

        If Not rs.EOF Then Me.Bookmark = rs.Bookmark
    Bac ơi cho em hỏi ở 2 dòng code này,
    .clone, .EOF, .Bookmark có nghĩa gì ạ
    Em xin cảm ơn
  • RE: Cách tạo form truy vấn thông tin nhân viên

    tranthanhan1962 > 05-05-20, 11:29 AM

    (05-05-20, 10:43 AM)yamakashi2003 Đã viết:     Set rs = Me.Recordset.Clone
        If Not rs.EOF Then Me.Bookmark = rs.Bookmark
    Bac ơi cho em hỏi ở 2 dòng code này,
    .clone, .EOF, .Bookmark có nghĩa gì ạ
    Em xin cảm ơn
    Thay vì khai báo hàng loạt các kiểu biến, CSDL, bảng...rồi gán biến là table cụ thể, với lệnh Dim rs As Object và Set rs = Me.Recordset.Clone bạn gán biến rs làm trực tiếp với table liên kết là record source của form.
    Đã set biến rs là bảng làm recordsource của form. Thì:
    rs.BOF: record đầu tiên của table.
    Rs.EOF: record cuối cùng của table
    Bookmark: Đánh dấu, rs.Bookmark => record trên table được đánh dấu. Me.Bookmark => record trên form được đanh dấu
    Có thể dịch như thế này.
    Private Sub TIMMASONV_AfterUpdate() <thủ tục riêng của form textbox TIMMASONV sau khi thay đổi>
        Dim rs As Object  <đặt biến rs có kiễu đối tượng>
        Set rs = Me.Recordset.Clone   <gán biến rs là bảng làm recordsource của form>
        rs.FindFirst "[MASONV] = '" & Me![TIMMASONV] & "'"   <tìm trong rs record có giá trị của field MASONV bằng với giá trị textbox TIMMASONV trên form>
        If Not rs.EOF Then Me.Bookmark = rs.Bookmark   <tìm liên tục trên bảng cho đến record cuối cùng và nếu tìm thấy thì đánh dấu vị trí của nó, và đó cũng là vị trí record của form>
    End Sub
    Vì vậy có thể thay thế textbox bằng combobox để khi bấm vào danh sách nó sẽ tìm ngay tránh việc gõ sai mã nó sẽ không tìm được.
  • RE: Cách tạo form truy vấn thông tin nhân viên

    yamakashi2003 > 05-05-20, 11:52 AM

    (05-05-20, 11:29 AM)tranthanhan1962 Đã viết:
    (05-05-20, 10:43 AM)yamakashi2003 Đã viết:     Set rs = Me.Recordset.Clone
        If Not rs.EOF Then Me.Bookmark = rs.Bookmark
    Bac ơi cho em hỏi ở 2 dòng code này,
    .clone, .EOF, .Bookmark có nghĩa gì ạ
    Em xin cảm ơn
    Thay vì khai báo hàng loạt các kiểu biến, CSDL, bảng...rồi gán biến là table cụ thể, với lệnh Dim rs As Object và Set rs = Me.Recordset.Clone bạn gán biến rs làm trực tiếp với table liên kết là record source của form.
    Đã set biến rs là bảng làm recordsource của form. Thì:
    rs.BOF: record đầu tiên của table.
    Rs.EOF: record cuối cùng của table
    Bookmark: Đánh dấu, rs.Bookmark => record trên table được đánh dấu. Me.Bookmark => record trên form được đanh dấu
    Có thể dịch như thế này.
    Private Sub TIMMASONV_AfterUpdate() <thủ tục riêng của form textbox TIMMASONV sau khi thay đổi>
        Dim rs As Object  <đặt biến rs có kiễu đối tượng>
        Set rs = Me.Recordset.Clone   <gán biến rs là bảng làm recordsource của form>
        rs.FindFirst "[MASONV] = '" & Me![TIMMASONV] & "'"   <tìm trong rs record có giá trị của field MASONV bằng với giá trị textbox TIMMASONV trên form>
        If Not rs.EOF Then Me.Bookmark = rs.Bookmark   <tìm liên tục trên bảng cho đến record cuối cùng và nếu tìm thấy thì đánh dấu vị trí của nó, và đó cũng là vị trí record của form>
    End Sub
    Vì vậy có thể thay thế textbox bằng combobox để khi bấm vào danh sách nó sẽ tìm ngay tránh việc gõ sai mã nó sẽ không tìm được.
    Em cám ơn bác
    Em lại dịch ra câu: If Not rs.EOF Then
    Ra là: Nếu không phải record cuối cùng thì ............. nên chằng hiểu gì  021 021 021
  • RE: Cách tạo form truy vấn thông tin nhân viên

    tranthanhan1962 > 05-05-20, 12:07 PM

    (05-05-20, 11:52 AM)yamakashi2003 Đã viết: Em cám ơn bác
    Em lại dịch ra câu: If Not rs.EOF Then
    Ra là: Nếu không phải record cuối cùng thì ............. nên chằng hiểu gì  021 021 021
    Dịch vậy cũng đúng, nhưng mà chính xác là nó chưa phải thì cứ tìm chừng nào phải thì nghỉ. Ngôn ngữ máy mà. Đoạn mà này khi biên dịch cho CPU chỉ còn là 01,10...
  • RE: Cách tạo form truy vấn thông tin nhân viên

    ongke0711 > 05-05-20, 12:13 PM

    (05-05-20, 11:52 AM)yamakashi2003 Đã viết:
    Trích dẫn:Có thể dịch như thế này.
    Private Sub TIMMASONV_AfterUpdate() <thủ tục riêng của form textbox TIMMASONV sau khi thay đổi>
        Dim rs As Object  <đặt biến rs có kiễu đối tượng>
        Set rs = Me.Recordset.Clone   <gán biến rs là bảng làm recordsource của form>
        rs.FindFirst "[MASONV] = '" & Me![TIMMASONV] & "'"   <tìm trong rs record có giá trị của field MASONV bằng với giá trị textbox TIMMASONV trên form>
        If Not rs.EOF Then Me.Bookmark = rs.Bookmark   <tìm liên tục trên bảng cho đến record cuối cùng và nếu tìm thấy thì đánh dấu vị trí của nó, và đó cũng là vị trí record của form>
    End Sub

    Em lại dịch ra câu: If Not rs.EOF Then
    Ra là: Nếu không phải record cuối cùng thì ............. nên chằng hiểu gì  021 021 021

    Cái này bạn phải dịch theo toàn bộ ngữ cảnh của nó. nó phải đi kèm với câu lệnh rs.FindFirst ở trên.
    Khi dùng "rs.FindFirst" là Access sẽ tự động tìm dữ liệu bắt đầu từ dòng đầu tiên và nhảy qua dòng kế tiếp (bạn không cần dùng câu lệnh rs.MoveFirst như các cấu trúc lệnh khác). Khi vòng lập thưcj hiện, nhảy liên tục cho đến dòng cuối thì chạy lệnh như diễn giải ở trên.