• Thao tác với bản ghi thông qua Form
  • Thao tác với bản ghi thông qua Form

    tuhocvba.net > 15-04-20, 09:00 AM

    Chào các bạn thuthuataccess.
    Công việc của mình không sử dụng access, nhưng mình muốn tìm hiểu về nó. Hiện đang tìm hiểu về tạo Form. Có vấn đề sau không hiểu, mong nhận được hồi đáp của các bạn.

    Nôị dung: Mình đọc tài liệu nhập môn có đoạn sau:

    Chúng ta sẽ sử dụng phương thức GotoRecord của đối tượng DoCmd để thao tác với bản ghi.
    Mã:
    DoCmd.GotoRecord [,DataObjectType] [,ObjectName] [,AcRecord] [,Offset]
    Ví dụ:
    Mã:
    Private Sub NextB_Click()

        On Error Resume Next

        DoCmd.GoToRecord acDataForm, "DSNV", acNext

    End Sub

    Private Sub EndB_Click()

        DoCmd.GoToRecord acDataForm, "DSNV", acLast

    End Sub


    Private Sub BeforeB_Click()

        On Error Resume Next

        DoCmd.GoToRecord acDataForm, "DSNV", acPrevious

    End Sub

    Private Sub QuayVeDauB_Click()

        DoCmd.GoToRecord acDataForm, "DSNV", acFirst

    End Sub

    Private Sub LamMoiB_Click()

        DoCmd.GoToRecord acDataForm, "DSNV", acNewRec

    End Sub


    Điều không hiểu: Không có file demo nên không hiểu.
    Nội dung nhờ giúp đỡ: Vậy phiền anh chị nào có kinh nghiệm, có thể tạo file demo ứng với nội dung trên được không? Mình đang dùng Office 2013, cảm thấy rất khó khăn khi tạo form.
  • RE: Thao tác với bản ghi thông qua Form

    tranthanhan1962 > 15-04-20, 09:51 AM

    (15-04-20, 09:00 AM)tuhocvba.net Đã viết: Chào các bạn thuthuataccess.
    Công việc của mình không sử dụng access, nhưng mình muốn tìm hiểu về nó. Hiện đang tìm hiểu về tạo Form. Có vấn đề sau không hiểu, mong nhận được hồi đáp của các bạn.

    Nôị dung: Mình đọc tài liệu nhập môn có đoạn sau:

    Chúng ta sẽ sử dụng phương thức GotoRecord của đối tượng DoCmd để thao tác với bản ghi.
    Mã:
    DoCmd.GotoRecord [,DataObjectType] [,ObjectName] [,AcRecord] [,Offset]
    Ví dụ:
    Mã:
    Private Sub NextB_Click()

    On Error Resume Next

    DoCmd.GoToRecord acDataForm, "DSNV", acNext

    End Sub

    Private Sub EndB_Click()

    DoCmd.GoToRecord acDataForm, "DSNV", acLast

    End Sub


    Private Sub BeforeB_Click()

    On Error Resume Next

    DoCmd.GoToRecord acDataForm, "DSNV", acPrevious

    End Sub

    Private Sub QuayVeDauB_Click()

    DoCmd.GoToRecord acDataForm, "DSNV", acFirst

    End Sub

    Private Sub LamMoiB_Click()

    DoCmd.GoToRecord acDataForm, "DSNV", acNewRec

    End Sub


    Điều không hiểu: Không có file demo nên không hiểu.
    Nội dung nhờ giúp đỡ: Vậy phiền anh chị nào có kinh nghiệm, có thể tạo file demo ứng với nội dung trên được không? Mình đang dùng Office 2013, cảm thấy rất khó khăn khi tạo form.
    Chỉ có thể dịch một cách tương đối
    DoCmd.GotoRecord [,DataObjectType] [,ObjectName] [,AcRecord] [,Offset] [/Code]
    Do: Thực hiện, Cmd viết tắt của Command Prompt: lệnh có sẳn trong hệ điều hành => DoCmd: thực hiện lệnh có sẳn trong hệ điều hành, ở đây là window
    DataObjectType: hằng số quy định kiểu đối tượng
    ObjectName: Tên đối tượng
    AcRecord: Kiểu xử lý những record trên đối tượng.
    Offset: Bổ sung diều kiện gì đó

    Private Sub NextB_Click(): Thủ tục riêng tên NextB_Click
        On Error Resume Next: Gặp lỗi đi đến Resume Next
        DoCmd.GoToRecord acDataForm, "DSNV", acNext: Thực hiện lệnh di chuyển đến record đối tựợng là dữ liệu của Form, tên form là [DSNV],kiểu xử lý về record kế tiếp của bảng dữ liệu, 
        'Thiếu đoạn mã này
         Resume Next:
         'Có thể có lệnh tại đây khi gặp lỗi để thủ tục thực hiện, nếu để trống gặp lỗi sẽ bỏ qua
    End Sub: Hết thủ tục

    Private Sub EndB_Click()
        DoCmd.GoToRecord acDataForm, "DSNV", acLast:Thực hiện lệnh di chuyển record đối tựợng là dữ liệu của Form, tên form là [DSNV],kiểu xử lý về cuối bảng dữ liệu,
    End Sub

    Một dòng lệnh tương đối đầy đủ:
    DoCmd.GoToRecord acDataForm, "DSNV", acGoTo, 7:Thực hiện lệnh di chuyển record đối tựợng là dữ liệu của Form, tên form là [DSNV],kiểu xử lý di chuyển trong bảng dữ liệu, record thứ 7, Gặp lệnh này máy sẽ biên dịch để rerord hiện hành là record thứ 7 trong form
    Đoạn mã: On Error Resume Next sẽ tạo ra một bẩy lỗi tên là Resume Next, khi gặp lỗi thủ tục (sub) sẽ không tiếp tục thực hiện tiếp các lệnh trong sub, mà sẽ chay lến dòng lệnh Resume Next: để thực hiện các lệnh của nhánh này nên buột phải có Resume Next:
    Ví dụ:
    Private Sub ABC()

        On Error Bị Lỗi
             Lệnh của sub......
        Bị Lỗi:
             Lệnh khi gặp lỗi
    End Sub
  • RE: Thao tác với bản ghi thông qua Form

    tuhocvba.net > 15-04-20, 10:07 AM

    Cảm ơn bạn tranthanhan1962 đã phản hồi và diễn giải giúp mình.
    Thật là rất ngại nhưng nếu có thể, bạn có thể tạo một file demo giúp mình được không ạ. Mình đang thực hành tạo form và quả thực rất khó khăn khi tạo demo dựa trên các đoạn code trên.

    Việc này thực sự sẽ làm mất thời gian của bạn, vì vậy, nếu lúc nào đó rảnh, bạn làm giúp mình có được không ạ? Mình không gấp nhưng lại không có kinh nghiệm, nên chưa thể tạo được file demo để mô phỏng code trên. Rất mong nhận được sự giúp đỡ của bạn.
  • RE: Thao tác với bản ghi thông qua Form

    tranthanhan1962 > 15-04-20, 10:44 AM

    Nếu ở trên form thì rất đơn giản không phức tạp lắm đâu.
  • RE: Thao tác với bản ghi thông qua Form

    tranthanhan1962 > 15-04-20, 11:46 AM

    Ở trên fom không cần phải có đủ các thông số, đây là các đoạn mã lệnh di chuyển record:
    Bạn tạo một nút lệnh, rồi vào properties, chuyển đến phần Event chọn On click, bên phải nó có dấu 3 chấm, bấm vào dấu 3 chấm có các kiểu lệnh:
    Expression Builder: Kiểu lệnh biểu thức
    Macro Builder: Kiểu lệnh macro
    Code Builder: Kiểu lệnh mã VBA
    Ở đây ta chọn Code Builder để viết mã, khi chọn Code Builder nó sẽ chuyển sang giao diện viết mã lệnh. Trên trang viết mã VBA access sẽ cho sẳn 2 dòng lệnh đầu và cuối của hành động On Click, muốn nó làm gì thì đưa các lệnh vào giữa 2 dòng này, các Event thừng sử dụng là:
    On Click: Click vào nút lệnh.
    On Got Focus: Khi nút lệnh nhận tiêu điểm
    On Lost Focus: Khi nút lệnh mất tiêu điểm
    ...
    Các event khác bạn tự tìm hiểu, muốn nó làm gì thì đưa lệnh vào giữa 2 đoạn mã lệnh đã cho sẳn, access sẽ thực hiện khi thao tác với event đó.
    Ví dụ muốn trở lên record đầu tiên ta dưa dòng lệnh vào giữa như sau:
    DoCmd.GoToRecord , , acFirst
    Đang thực hiện trên form chức nút lệnh nên ta không cần phải đưa thông số kiể đối tượng, tên form... Chỉ cần đưa dấu [,] ngăn cách vào là đủ nó sẽ tự mặc định.
    Tương tự:
    DoCmd.GoToRecord , , acPrevious Về record trước
    DoCmd.GoToRecord , , acNext Về record kế tiếp
    DoCmd.GoToRecord , , acLast Về record cuối
    DoCmd.GoToRecord , , acNewRec Mở record mới để nhập dữ liệu
    Ví dụ để mở một record mới để nhập dữ liệu với nút lệnh tên là TaoMoi đoạn mã đầy đủ sẽ như sau:
    Private Sub TaoMoi_Click()
        DoCmd.GoToRecord , , acNewRec
    End Sub
    Một vài trường hợp trong điều kiện nào đó lệnh sẽ bị lỗi. Ví đụ với nút lệnh Dau để giải quyết hành dộng di chuyển record về record đầu tiên. Nếu chỉ viết một cách đơn giản

    Private Sub  Dau_Click()
        DoCmd.GoToRecord , , acFirst
    End Sub
    Nếu đang ở record đầu tiên mà bấm vào nút này sẽ bị lỗi, vì đang ở record đầu liên mà còn bảo về đầu thì chạy như thế nào. Vì vậy phải thêm như sau:
    Private Sub  Dau_Click()
    On Error GoTo BiLoi

        DoCmd.GoToRecord , , acFirst
    BiLoi:
    End Sub
    Có nghĩa là nếu bị lỗi (On Error ) thì chuyển đến (GoTo ) BiLoi, Nhớ BiLoi: ở dưới phải có dấu 2 chấm ( : )


    Phía dưới Biloi: không co gì cả thì access sẽ bỏ qua lỗi mà không làm gì cả. Trường hợp mếu thêm một lệnh MsgBox thì nó sẽ báo theo nội dung mình muốn báo lỗi
    Ví dụ:
    Private Sub  Dau_Click()
    On Error GoTo BiLoi
        DoCmd.GoToRecord , , acFirst
    BiLoi:
        MsgBox "Đang ở record đầu"
    End Sub
    Lúc này khi thực hiện lệnh mà current record đang ở record đầu thì access sẽ hiện một thông báo "Đang ở record đầu"

    Thực ra, làm demo không khó nhưng bạn sẽ không hiểu rõ bằng bạn tự làm, Hãy thử thiết kế vài nút lệnh vào dưa các đoạn mã vào để thử, VBA có hàng ngàn mã lệnh, tuy nhiên nó hỗ trợ trực quan trên chuột phải có lệnh Complete Word một bảng danh sách mã lệnh rất lớn. Đôi khi phải đưa từng lệnh vào mới biết lệnh đó dùng để làm gì. Còn lệnh di chuyển record thì chỉ có bấy nhiêu
  • RE: Thao tác với bản ghi thông qua Form

    Xuân Thanh > 15-04-20, 12:57 PM

    @ tranthanhan1962
    Hết ngày o bế dịch rồi cha nội ơi 014 014 014
  • RE: Thao tác với bản ghi thông qua Form

    tranthanhan1962 > 15-04-20, 02:14 PM

    (15-04-20, 12:57 PM)Xuân Thanh Đã viết: @ tranthanhan1962
    Hết ngày o bế dịch rồi cha nội ơi 014 014 014
    Vụ này chưa biết, chính phủ đang nghiên cứu. Hôn qua, mình với 3 thằng bạn bùn quá gom nhau nhậu tai nhà, không dám nói chuyện lớn, vậy mà bị công an khu vực phát hiện vô giảng oral mới đau chứ. Nó nói: mấy chú già con cũng thông cảm không lập biên bản nhưng mà 4 chú nhiều hơn 2 là vi phạm rồi. Nó nói vậy mà giống như nó chưỡi mấy thằng già không có văn hoá mới đau chứ. Hỏi nó ngày mai hết chưa nó nói chưa biết  021
  • RE: Thao tác với bản ghi thông qua Form

    Xuân Thanh > 15-04-20, 02:21 PM

    (15-04-20, 02:14 PM)tranthanhan1962 Đã viết:
    (15-04-20, 12:57 PM)Xuân Thanh Đã viết: @ tranthanhan1962
    Hết ngày o bế dịch rồi cha nội ơi 014 014 014
    Vụ này chưa biết, chính phủ đang nghiên cứu. Hôn qua, mình với 3 thằng bạn bùn quá gom nhau nhậu tai nhà, không dám nói chuyện lớn, vậy mà bị công an khu vực phát hiện vô giảng oral mới đau chứ. Nó nói: mấy chú già con cũng thông cảm không lập biên bản nhưng mà 4 chú nhiều hơn 2 là vi phạm rồi. Nó nói vậy mà giống như nó chưỡi mấy thằng già không có văn hoá mới đau chứ. Hỏi nó ngày mai hết chưa nó nói chưa biết  021

    Tại nhiều chuyện mới vậy thôi
  • RE: Thao tác với bản ghi thông qua Form

    tuhocvba.net > 15-04-20, 06:35 PM

    Cảm ơn các bạn.
    [Hình: 154tJkp.png]
    Cho mình hỏi là đưa code vào nút bấm kiểu gì vậy, ví dụ với UserForm của excel mình chỉ việc double click vào nút bấm đó là ra chỗ để viết code.
    Với access ra được nút bấm mà không biết đưa code vào đâu. Ai biết xin chỉ dùm.

    Ngoài ra DSNV nên hiểu là tên Form hay là Table? Mình đang hiểu là lấy dữ liệu từ Table có tên là DSNV.

    Khi nào có thời gian các bạn phản hồi giúp mình cũng được, mình cảm ơn.
    [im[Hình: 154tJkp.png]g]https://i.imgur.com/154tJkp.png[/img]
  • RE: Thao tác với bản ghi thông qua Form

    Xuân Thanh > 15-04-20, 06:42 PM

    Nên học từ cái cơ bản trước là
    1/ Tên Table luôn có tiền tố tbl ở đầu. Ví dụ tblHocSinh, tblLopHoc, tblMonHoc...
    2/ Tên Form luôn có tiền tố frm ở đầu. Ví dụ frmHocSinh, frmLopHoc, frmMonHoc
    3/ Tên các trường không có khoảng trắng và có dấu tiếng Việt