-
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.
Ví dụ:Mã:DoCmd.GotoRecord [,DataObjectType] [,ObjectName] [,AcRecord] [,Offset]
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.
Chỉ có thể dịch một cách tương đối
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.
Ví dụ:Mã:DoCmd.GotoRecord [,DataObjectType] [,ObjectName] [,AcRecord] [,Offset]
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.
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 -
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
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
Hết ngày o bế dịch rồi cha nội ơi -
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
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
Hết ngày o bế dịch rồi cha nội ơi
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.
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.
[img]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