Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Hỏi] Dùng DAO để thêm, xóa, sửa, cập nhật form main - sub
#1
- Xin chào các bạn, sau một thời gian tìm hiểu cũng như đọc 2 trang bài viết của Anh Le Hồng Đức và với thói quen làm việc trên Excel nên mình khá ưng ý với việc truy xuất dữ liệu bằng Unbound Form, trong quá trình tìm hiểu mình có 1 số thắc mắc sau
- Ở file đính kèm mình đã làm được chức năng thêm mới, tuy nhiên mình không hài lòng lắm bởi vì vẫn còn phải duyệt từng dòng trong Recordset để kiểm tra khóa chính có tồn tại không, không biết có phương thức nào giống FileSystemObject là FSO.Exists(ID) , để mình kiểm một lần rồi add dữ liệu mới vào, xin các bạn tối ưu code thêm giúp mình.
- phần thứ 2 mình không làm được, khi người dùng click vào 1 dòng trong sub form thì dữ liệu dòng đó sẽ hiện lên các control tương ứng trên form main để mình cập nhật hoặc xóa dòng đó, mình biết đó là sự kiện Click trên sub form nhưng không biết bắt index thế nào, mong các bạn giúp đỡ.
File đính kèm
PMT
Chữ ký của minhtungph Chào Guest! Chúc bạn một ngày tốt lành và học hỏi thêm nhiều điều mới. PMT
Reply
Những người đã cảm ơn
#2
(19-10-17, 08:55 AM)minhtungph Đã viết: - Xin chào các bạn, sau một thời gian tìm hiểu cũng như đọc 2 trang bài viết của Anh Le Hồng Đức và với thói quen làm việc trên Excel nên mình khá ưng ý với việc truy xuất dữ liệu bằng Unbound Form, trong quá trình tìm hiểu mình có 1 số thắc mắc sau
- Ở file đính kèm mình đã làm được chức năng thêm mới, tuy nhiên mình không hài lòng lắm bởi vì vẫn còn phải duyệt từng dòng trong Recordset để kiểm tra khóa chính có tồn tại không, không biết có phương thức nào giống FileSystemObject là FSO.Exists(ID) , để mình kiểm một lần rồi add dữ liệu mới vào, xin các bạn tối ưu code thêm giúp mình.
- phần thứ 2 mình không làm được, khi người dùng click vào 1 dòng trong sub form thì dữ liệu dòng đó sẽ hiện lên các control tương ứng trên form main để mình cập nhật hoặc xóa dòng đó, mình biết đó là sự kiện Click trên sub form nhưng không biết bắt index thế nào, mong các bạn giúp đỡ.
File đính kèm
PMT
Nếu bạn đã làm việc với access. Thì phải tạo thói quen làm việc với access. Không thể chạy xe tải gây sự cố rồi bảo hồi giờ tôi có thói quen chạy xe du lịch nên chạy xe tải không quen. Form access liện kết với table qua recordsource. Bạn làm việc với nó như làm việc trực tiếp với table. Nó sẽ tự kiểm tra khóa chính và báo lỗi ngay lập tức (có viết code thì chỉ viết code báo lỗi tiếng việt vì access báo lỗi bằng tiếng Anh). Sướng như thế mà bạn giữ thói quen của excel để làm gì? File đính kèm bạn chưa share
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#3
Link Dropbox hoạt đồng bình thường a à, em gửi anh link mediafire : Download còn riêng về phần mà anh nói "Sướng" khi sử dụng bound form để liên kết với table do em là người mới học hỏi, phần bound Form em làm Ok rồi, và em đang thắc mắc nếu mình làm unbound Form thì nó có tối ưu hơn không (dĩ nhiên ưu và nhược điểm của nó thì em đã đọc nhiều trên mạng, em muốn tự mình trải nghiệm), và sau này nếu muốn phát triển thêm dùng trong mạng Lan hay truy xuất qua internet thì em nghĩ Bound Form là không khả thi.
Chữ ký của minhtungph Chào Guest! Chúc bạn một ngày tốt lành và học hỏi thêm nhiều điều mới. PMT
Reply
Những người đã cảm ơn
#4
Mình đã tải CSDL của bạn. Nói chung cũng chưa hiểu rõ lắm về cái CSDL này. Tạm thời mình chỉ đưa ra các vấn đề sau đây. Mình có chỉnh sử đôi chút để xử lý form.
1/ Việc sử dụng bound form hay Unbound Form hoàn toàn có thể trên access. Nhưng mình lười viết code (chỉ viết khi cần thiết, nên cực chẵng đã mới sử dụng Unbound Form)
2/Mình cũng đã viết nhiều phần mềm thương mại sử dụng cho máy đơn, mạng LAN, internet (dùng google driver) chạy cũng OK. Nếu chạy qua mạng bạn phải tìm hiểu kỹ thuật khóa form, khóa record để tránh lỗi trùng dữ liệu – cái này bound form có vẻ đắt lực hơn Unbound Form.
3/Khi chạy mạng bạn phải chia CSDL thành front end và back end để liên kết cũng rất OK
http://www.mediafire.com/file/418v54zbj5...+VPP.accdb
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn minhtungph
#5
Cám ơn anh giúp đỡ, em đang làm cái Form nhập VPP mà chỉ mới làm nút thêm, em muốn khi click vào sub Form của form nhập VPP thì các dữ liệu trong sub form sẽ fill lên các control trên form main để viết thêm các chức năng xóa, sửa,
Chữ ký của minhtungph Chào Guest! Chúc bạn một ngày tốt lành và học hỏi thêm nhiều điều mới. PMT
Reply
Những người đã cảm ơn
#6
thật sự không phải do em cứng nhắt nhưng khi đọc bài viết của anh Lê Hồng Đức phân tích về Bound và Unbound Form em cảm thấy nếu dữ liệu được liên kết trực tiếp đến table như thế thì khi khởi động form nếu dữ liệu nhiều thì rất tốn tài nguyên, chỉ là người đi sau nghe các thành viên lâu năm nói về kinh nghiệm và em muốn trải nghiệm lại thôi, anh  tranthanhan1962 cho em một số ý kiến về bound form trong thực tế nó có chậm lắm không và thông thường khi viết ứng dụng anh thường dùng những gì
Chữ ký của minhtungph Chào Guest! Chúc bạn một ngày tốt lành và học hỏi thêm nhiều điều mới. PMT
Reply
Những người đã cảm ơn
#7
Về phần thứ nhất. Gần như tôi không sử dụng Unbound. Khách hàng cũng không phàn nàn gì về tốc độ nên có thể xem là chấp nhận được. Vào cái thời chạy với con CPU Intel pro 100 MH Win 95 cũng chạy được thì bây giờ tốc độ tính bằng GH thì nhằm nhò gì.
Về phần thứ hai câu này rộng quá nên không biết trả lời sao nữa. Mình cũng có chia sẽ trên forum. Bạn có thể xem vột số suy nghĩ, kinh nghiệm của mình trong các bài viết. Mình cũng có chia sẽ các code về button trên form bạn cũng có thể tìm và tham khảo.
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn minhtungph
#8
(19-10-17, 08:55 AM)minhtungph Đã viết: - Ở file đính kèm mình đã làm được chức năng thêm mới, tuy nhiên mình không hài lòng lắm bởi vì vẫn còn phải duyệt từng dòng trong Recordset để kiểm tra khóa chính có tồn tại không, không biết có phương thức nào giống FileSystemObject là FSO.Exists(ID) , để mình kiểm một lần rồi add dữ liệu mới vào, xin các bạn tối ưu code thêm giúp mình.
- phần thứ 2 mình không làm được, khi người dùng click vào 1 dòng trong sub form thì dữ liệu dòng đó sẽ hiện lên các control tương ứng trên form main để mình cập nhật hoặc xóa dòng đó, mình biết đó là sự kiện Click trên sub form nhưng không biết bắt index thế nào, mong các bạn giúp đỡ.

- Thay vì dùng Recordset để duyệt rồi tìm xem có trùng mã hay không khi bấm nút [Add], bạn có thể xác định trùng mã ngay khi nhập liệu vào textbox [Mã VPP] bằng hàm DLookup. 

Mã PHP:
Private Sub MAVPP_BeforeUpdate(Cancel As Integer)
   If DLookup("MAVPP""VPP""[MAVPP]='" Me.MaVPP "'"Then
       MsgBox 
"Ma nay da ton tai"vbOKOnly"Thong bao!"
       Cancel True
       Me
.Undo
   End 
If
End Sub 

Đây là hàm tôi dùng để load Recordset từ Subform vào Mainform. 
- Trong đó rs là recordset (dòng con trỏ chuột đang click) được tổng hợp từ Subform. 
VD: strSQL = "SELECT * FROM VPP WHERE MAVPP = '" & Me.MAVPP
      Set rs = CurrentDb.OpenRecordset (strSQL, dbOpenSnapShot)

- Để dùng hàm này, các textbox, comboBox trong Main form phải theo qui ước đặt tên như sau: "txt"+tên Field của Recordset dùng để load. Vd: để load Field [MAVPP] vào textbox trên mainform, textbox đó phải được đặt tên txtMAVPP. 

Mã PHP:
Public Function GetRecord(rs As DAO.Recordsetfrm As Form)
   Dim fld As Field
   Dim ctl 
As control
   For Each fld In rs
.Fields
       For Each ctl In frm
.Controls
           If ctl
.Name "txt" fld.Name Or ctl.Name "cbo" fld.Name Or ctl.Name "chk" fld.Name Then
               ctl 
rs.Fields("" fld.Name "").Value
           ElseIf ctl
.Name "img" fld.Name Then
               On Error Resume Next
               ctl
.Picture CStr(rs.Fields("" fld.Name "").Value)
           End If
       Next
   Next
End 
Function 
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn tranthanhan1962 , maidinhdan


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Hỏi] Click vào button mở form mới ngay dưới button đó mrsiro 1 159 22-09-18, 12:04 PM
Bài mới nhất: lmthu
  Xin hỏi cách : Ép phần mềm phải dùng File có đuôi OCX cũ ledangvan 6 273 07-09-18, 10:42 AM
Bài mới nhất: ongke0711
  Sử dụng Class Module và Kết nối dữ liệu SQL SERVER trong Access VBA lehongduc 62 34,303 03-08-18, 12:41 PM
Bài mới nhất: Cuong Servenet
  [Hỏi] Liệt Kê 3 Đơn Giá Gần Nhất (Access 2003) pherotao 4 608 11-01-18, 11:50 PM
Bài mới nhất: pherotao
  [Hỏi] Căn Chỉnh Form Tự Động pherotao 9 1,098 21-12-17, 11:38 PM
Bài mới nhất: ongke0711

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ| PMA Nha Trang| Gỗ Acrylic Không Đường Line