Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Lập trình bằng ADO trong Acess
#21
Rất hay có những ý kiến về chủ đề!
Qua những ý kiến ở vấn đề này mình thấy trong VB.net người ta tạo một Datatable sau đó lại cập nhật dữ liệu từ Datatable hoặc datashet vào CSDL mình nghĩ ở đây chắc cũng phải làm thế này.
Tức là sau khi xóa hay chỉnh sửa dữ liệu phải được lưu tam đâu đó khi nhấn lưu thì dữ liêu mới được đổ vào CSDL

Hay là mình viết trong các biến cố On Delete của Form khi xóa thì cập nhật luôn nhỉ?
Các bạn nghĩ sao
Mà luôn tiên Tmtien261 có thể cho mình hỏi là mình làm Conterniu Form sau khi kết nối không hiển thị được nhiều dòng nguy thật!
Chữ ký của tt1212 Present Nhận viết phần mềm, hỗ trợ viết phần mềm, hợp tác viết phần mềm trên nên Microsoft Access mọi phiên bản Liên hệ: Mr Đức -989276236. Email: Tantriviet.vnn@gmail.com website:http://www.tantrivietsoft.com/
Reply
Những người đã cảm ơn
#22
1.
Trích dẫn:Mà luôn tiên Tmtien261 có thể cho mình hỏi là mình làm Conterniu Form sau khi kết nối không hiển thị được nhiều dòng nguy thật!
Trong Demo mình gửi sử dụng continuous form hiển thị OK mà !
2.
Việc chỉnh sửa dữ liệu các dòng trong Sub rồi cập nhật nhật vào dữ liệu thì mình làm được rồi, còn việc xóa như bạn nói, mình chưa thử, để mình thứ xem thế nào, nếu OK sẽ gửi cho bạn.
Mình cũng mới tiếp cận ADO nên "Thuật toán" lôm côm, "code kiết" lòng vòng ... nhiều "Bí đỏ" lắm.
Xin các Pro tham gia chỉ giáo thêm. Thanks !
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn
#23
Trước tiên mình xin góp ý về thủ tục liên kết dữ liệu bản Demo của bạn tmtien261:

1- mình không nghĩ dùng giá trị trả về của hàm (Function)như một biến đối tượng Connection là một ý hay. Bởi vì ta không thể gán một giá trị cho hàm
vd:
trong ví dụ của bạn nếu khai báo MyCnn là biến toàn cục thì ta có thể Set MyCnn = Nothing, nhưng bạn dùng hàm OpenMyConnect() As ADODB.Connection thì không thể Set OpenMyConnect = Nothing để đóng kết nối

2-xét thủ tục CloseMyConnect :
Mã:
Function CloseMyConnect()
    Dim MyCnn As ADODB.Connection
   Set MyCnn = Nothing
End Function
trong thủ tục trên chỉ mới khai báo biến cục bộ MyCnn, chưa khởi tạo biến nên MyCnn mặc nhiên đang là Nothing nên câu: Set MyCnn = Nothing không có giá trị => thủ tục trên hoàn toàn không thể đóng kết nối

Mình mượn tạm file QLBH của bạn tmtien261 làm một bản Demo về các vấn đề cá bạn đề cập ở trên, tạm post lên đây, mình bận công việc gấp nên sẽ thảo luận sau vậy

Demo ADO

[Hình: 999561165_1123708225_574_574.jpg]
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn maidinhdan
#24
Chào các bạn!

Xin lỗi các bạn! Ở bài viết trên do vội nên mình quên viết thủ tục kiểm tra số lượng tồn khi sửa số lượng bán trực triếp trên subform và cập nhật lại chkSubchanged, chkSubDeleted khi di chuyển sang mẫu tin khác. Mình đã bổ sung và up lại link

Bạn nào đang tìm hiểu về ADO thì mình nghĩ nên đọc bài viết của bạn Lê Hồng Đức, mình cũng học hỏi từ bài viết này:
Sử dụng Class Module và Kết nối dữ liệu SQL SERVER trong Access VBA

Mình cũng từng đau đầu về việt duyệt các mẫu tin trong CSDL
-Theo bài viết trên thì để duyệt tới lui giũa các mẩu tin, tác giả cho nạp sẵn 100 mẫu tin, tuy nhiên theo cách này thì cá nhân mình nghĩ sẽ không thấy được các bản ghi mới do các user khác tạo ra sau thời điểm nạp dữ liệu cho form
- Cách của mình là chỉ nạp một bản ghi duy nhất cho main form tại thời điểm duyệt

Mình xin mô tả một chút về bản Demo như sau:

- Không gắn source cho main form
- Không set RowSource cho cboMahangban khi load form mà chỉ gắn RowSource ở sự kiện dbl Click,
Bạn nhập thử mã hàng (vd ab1) rồi Enter, thông tin của mặt hàng có mã ab1 sẽ được cập nhật trực tiếp xuống subform (với số lượng bán mặc định là 1)
Nếu nhập một vài từ vào cboMahangban rồi click đúp thì sẽ sổ xuống danh sách mã hàng lọc theo các từ đã nhập, nếu để trống thì sẽ nạp tất cả mã hàng có trong bảng tblHanghoa
-Trong Subform chỉ thay đổi được số lượng bán, Có thể chọn nhiều dòng trong subform rồi xóa, khi bấm Lưu, tất cả những thay đổi sẽ được cập nhật
....

Mình cũng mới nghiên cứu về ADO cũng như Access nên chắc chắn bản demo sẽ có nhiều sai sót, mong các bạn xem và góp ý giúp để mình có thêm kinh nghiệm và cùng học hỏi! 015

Cảm ơn các bạn đã đọc bài viết! Present
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn thucgia
#25
Chào các bạn!

Sáng nay ngồi xem lại file Demo của mình thấy có vài chỗ chưa hợp lý:

1- Trong thủ tục SetRSourceForMainForm biến lngID có thể không dùng đến nên đã sửa thành biến tự chọn (Optional)
2-Mỗi lần duyệt các bản ghi lại gán lại ControlSource cho các điều khiển trong Subform là dư thừa nên mình đã tạo thêm một thủ tục RefreshSourceSubForm để dùng cho sự kiện này

Bản cập nhật:

Demo ADO(2)


Có gì các bạn cứ "gạch đá" thoải mái nha, chúng ta cùng thảo luận để trao đổi kinh nghiệm 015
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn Minh Tiên , thucgia
#26
Rất thú vị hãy thảo luận về chủ đề này nhiêu hơn
Mình đang còn nhiều vấn đề cần giải quyết trên một Form khi lập trinh bằng Ado
có gì khó khăn các bạn giúp mình với nhé
Xin chân thành cảm ơn
Hiện tại vấn đề Contineur Form mình vẫn chư làm được Tmtien261 A!
có gì mình gửi Demo qu ban xem giúp nhe!
Chữ ký của tt1212 Present Nhận viết phần mềm, hỗ trợ viết phần mềm, hợp tác viết phần mềm trên nên Microsoft Access mọi phiên bản Liên hệ: Mr Đức -989276236. Email: Tantriviet.vnn@gmail.com website:http://www.tantrivietsoft.com/
Reply
Những người đã cảm ơn
#27
1.
Trích dẫn:trong thủ tục trên chỉ mới khai báo biến cục bộ MyCnn, chưa khởi tạo biến nên MyCnn mặc nhiên đang là Nothing nên câu: Set MyCnn = Nothing không có giá trị => thủ tục trên hoàn toàn không thể đóng kết nối
[quote]
MÌnh cũng nghiên cứu bài hướng dẫn của bạn "Lê Hồng Đức" trong file Demo thủ tục ngắt kết nối là:
Mã:
Sub CloseDbConnection()
    On Error GoTo HandleError
    cnConn.Close
    Set cnConn = Nothing
    Exit Sub
HandleError:
    GeneralErrorHandler Err.Number, Err.Description, DB_QUANLY, "CloseDbConnection"
    Exit Sub

End Sub
Tuy nhiên mình vận dụng vào ứng dụng của mình thì báo lỗi ở dòng:
cnConn.Close.
2.
Mình tham khảo tại trang: http://support.microsoft.com/kb/281998/vi-vn thủ tục ngắt kết nối khi UnLoad:
Mã:
Private Sub Form_Unload(Cancel As Integer)
   'Close the ADO connection we opened
   Dim cn As ADODB.Connection
   Set cn = Me.Recordset.ActiveConnection
   cn.Close
   Set cn = Nothing
End Sub
Khi vận dụng vào code thì báo lỗi tại 2 dòng:
Set cn = Me.Recordset.ActiveConnection
cn.Close
...
3.
Khi xem lại thủ tục CloseMyConnect của mình đúng là không cần thiết khai báo: Dim MyConn As ADODB.Connection nữa vì đã khai báo ở OpenMyConnect.
Chỉ cần:
MyConn.Close
Set MyConn=Nothing
Là OK.
Tuy nhiên vấn đề là File kết nối (QLBH_Data) vẫn không ngắt kết nối được như bạn "977net" đã nói ở chủ đề này.

Mình cũng mới tiếp cận ADO nên còn nhiều lơ mơ lắm, không giải thích được tình trạng như trên. Vài lời thô thiển, Mong các ACE chỉ giáo thêm nhiều !
Thanks !
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn thucgia
#28
(19-12-13, 04:06 PM)tmtien261 Đã viết: Khi xem lại thủ tục CloseMyConnect của mình đúng là không cần thiết khai báo: Dim MyConn As ADODB.Connection nữa vì đã khai báo ở OpenMyConnect.
Chỉ cần:
MyConn.Close
Set MyConn=Nothing
Là OK.
Tuy nhiên vấn đề là File kết nối (QLBH_Data) vẫn không ngắt kết nối được như bạn "977net" đã nói ở chủ đề này.

-MyConn khai báo ở OpenMyConnect chỉ có giá trị cục bộ trong hàm OpenMyConnect, không có giá trị đối với các thủ tục hay hàm khác nên nếu không khai báo MyConn trong thủ tục CloseMyConnect thì sẽ luôn báo lỗi mỗi khi gọi CloseMyConnect .(MyConn trong OpenMyConnect và MyConn trong CloseMyConnect của bạn hoàn toàn không liên quan gì đến nhau, chỉ là trùng tên thui. Mình gọi CloseMyConnect là thủ tục mặc dù bạn khai báo Function vì CloseMyConnect không có giá trị trả về)

- Theo như bản Demo của bạn thì mình nghĩ đang có hai kết nối đến CSDL là Recordset của Mainform và của Subform
Tùy theo mục đích thiết kế form ta có thể ngắt kết nối ngay sau khi lấy bản ghi từ CSDL hoặc khi thoát form
-> Để ngắt kết nối ngay sau khi lấy dữ liệu mình làm như sau:
....
With rst
.ActiveConnection = cnn
.Source = strSQL
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open
.ActiveConnection = Nothing
End With
...
Call CloseMyConnect
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn thucgia
#29
Chào các bạn!
Hôm nay rà soát lại thấy trong bản Demo của mình thấy có một số sai sót:

1-Sử dụng hàm fGetRecordset chưa hợp lý:
--> Với các bản ghi chỉ rút trích để so sánh đối chiếu... (dạng chỉ đọc) mình đã thay fGetRecordset(strSQL) bằng cnn.Execute(strSQL)

2-Bẫy lỗi ở một số hàm, thủ tục còn thiếu, chưa xét đến khả năng các bản ghi và kết nối chưa được đóng lại khi xảy ra lỗi
--> Mình đã thêm các lệnh như sau vào bẫy lỗi:
Mã:
If Not rst Is Nothing Then
        If rst.State = adStateOpen Then rst.Close
    End If
    Set rst= Nothing
    If Not cnn Is Nothing Then
        If cnn.State = adStateOpen Then cnn.Close
    End If
    Set cnn = Nothing

3- Thêm một lỗi nữa: thủ tục SetRSourceForMainForm chưa xử lý tốt trong trường hợp dữ liệu còn trống, chưa có mẫu tin nào được tạo ra (Lúc đầu mình dự tính gắn source cho Mainform nên đặt tên nghe có vẻ lạc quẻ vậy, mới sửa lại thành hàm fGotoRecord cho phù hợp )
--> Đã sửa và cập nhật

Bản sửa lỗi mình đã thêm vào nút Xóa:
Demo_ADO(3).rar
(bản cập nhật cuối cùng vào thời điểm sửa bài viết này)

Chắc chắn cũng còn nhiều cái "Chưa đúng" , các bạn góp ý giúp mình nghen! 015
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn bvchauthanh , thucgia
#30
Các Pro ơi ! Chỉ có 1 "form bán hàng" nhìn có vẻ đơn giản mà sao phải có nhiều Func, Sub để quản lý thế ? Đó là chưa kể đến việc phải thêm: Phần cập nhật công nợ khách hàng, Cập nhật vào hàng tồn kho, Cập nhật danh sách khách hàng ...
Các pro chỉ giáo xem làm thế nào để giảm các Func, Sub cho gọn gọn tý không ?
Thanks !
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn bvchauthanh , thucgia


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
Question [Help] Link tất các table trong một file.mdb bằng VBA MinhnHang 6 145 29-11-16, 05:18 PM
Bài mới nhất: MinhnHang
  Tránh xung đột dữ liệu trong access quocdung9999 16 1,688 23-11-16, 11:13 AM
Bài mới nhất: quocdung9999
  [Hỏi] Kết nối nhiều lần hay kết nối 1 lần trong ADO ưu điểm hơn Minh Tiên 1 115 10-11-16, 10:41 AM
Bài mới nhất: maidinhdan
  Summary bằng VBA trong MS Access. MinhnHang 6 315 08-11-16, 08:36 AM
Bài mới nhất: MinhnHang
  [Hỏi] Số Thứ Tự Theo Nhóm Hàng Hóa Trong Access pherotao 2 141 02-11-16, 03:05 PM
Bài mới nhất: pherotao

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ơ