thucgia > 16-03-15, 01:46 PM
(20-06-12, 06:51 PM)lehongduc Đã viết: Chào các Bạn,
Hôm nay tôi muốn trao đổi với các Bạn về vấn đề "Sử dụng Class Module và Kết nối dữ liệu SQL SERVER trong Access VBA" như một giải pháp tối ưu cho các ứng dụng được thiết kế với VBA trong Microsoft Access. Trao đổi này có đính kèm file nguồn để làm ví dụ minh họa.
Để lấy một ví dụ cụ thể, ở đây giả định ta có nhu cầu thiết kế 1 ứng dụng Microsoft Access dùng để quản lý 1 danh bạ điện thoại.
Ứng dụng của chúng ta sẽ bao gồm 1 file dữ liệu và 1 file ứng dụng. Các Bạn có thể tạo File dữ liệu bằng Microsoft Access hoặc SQL SERVER. Ở đây tôi tạo file dữ liệu bằng SQL SERVER.
File dữ liệu đã được nạp trên 15.000 mẫu tin.
Khi file ứng dụng được nạp, ta sẽ cho kết nối với file dữ liệu bằng thủ tục Log-In.
Mục đích của tôi thông qua cách thiết kế trên nhằm:
+ minh họa khả năng của Access VBA có thể lập trình theo hướng đối tượng;
+ kết nối được với nguồn dữ liệu ngoài, ở đây là nguồn SQL SERVER;
+ có thể tạo được những Unbound Form nhằm đáp ứng nhu cầu truy xuất dữ liệu với nhiều người dùng qua mạng máy tính, đồng thời cải thiện được tốc độ xử lý dữ liệu.
Về Cấu trúc của file dữ liệu:
Với ứng dụng này ta chỉ cần có 1 file dữ liệu với 1 bảng dữ liệu. Tất nhiên các Bạn có thể tùy biến thêm nếu thấy cần.
- Tôi đặt tên file dữ liệu này là danhba
- Và tạo 1 bảng dữ liệu có tên là tblDanhsach, với các cột dữ liệu như sau:
+ Ten: tên của 1 người cụ thể trong danh bạ, kiểu dữ liệu Text
+ HoChulot: họ và chữ lót, kiểu dữ liệu Text
+ Gioitinh: xác định giới tính, kiểu dữ liệu Yes/No (mặc định là Nam, với giá trị là True)
+ Ngaysinh: ngày sinh, kiểu dữ liệu Date
+ Dtdd: số điện thoại di động, kiểu dữ liệu Text
+ Dtnha: số điện thoại ở nhà riêng, kiểu dữ liệu Text
+ Dtvp: số điện thoại ở văn phòng làm việc, kiểu dữ liệu Text
Với ứng dụng làm ví dụ sẽ cho ta biết cách:
1. Kết nối với nguồn dữ liệu bên ngoài MS. Access, ở đây là SQL SERVER
2. Viết 1 Class module như thế nào
3. Tạo 1 Unbound Form và gắn kết dữ liệu trên đó như thế nào
Trong bài sau tôi sẽ trình bày tiếp vào nội dung chính của chuyên đề này.
Rất mong các Bạn cùng tham gia nghiên cứu và trao đổi.
Nội dung các file đính kèm:
1. File ứng dụng MS. Access với định dạng mdb có mã nguồn
2. File SQL (Text) dùng để tạo database trên SQL SERVER cục bộ (local) nếu các Bạn muốn tạo.
Cũng xin trao đổi rõ thêm: File ứng dụng và file dữ liệu nêu trên mới chỉ là "sườn" còn "thô", để nó trở thành 1 ứng dụng hoàn chỉnh, chúng ta còn phải tinh chỉnh nhiều thứ; đó cũng chính là công việc mà tôi muốn mời các Bạn cùng tham gia trao đổi, qua đó chúng ta thu hoạch được những kiến thức căn bản chắc chắn hơn về chuyên đề này.
Tài liệu tham khảo:
Tài liệu tôi dùng để tham khảo chính để viết loạt bài này (bao gồm ứng dụng làm ví dụ) là loạt sách:
Beginning Access 2003 VBA, Beginning Access 2007 VBA
của Denise M. Gosnell
Chào các Bạn,
Xin nói thêm về chuyện ứng dụng và dữ liệu còn "thô":
Nói chúng "thô" bởi lẽ:
1. File dữ liệu SQL SERVER chỉ mới có các bảng dữ liệu thôi. Như vậy chúng chỉ mới là chỗ để lưu dữ liệu phát sinh, chưa làm được việc xử lý dữ liệu (ta dễ thấy một phần những việc đơn giản trong việc xử lý dữ liệu này như: lưu, xóa, trích xuất thông tin, lọc thông tin).
Bản thân SQL SERVER là 1 hệ thống quản trị cơ sở dữ liệu mạnh, chứ không chỉ đơn thuần là nơi để lưu dữ liệu. Ta sẽ bàn tới cách giao nhiệm vụ xử lý dữ liệu cho cái file dữ liệu SQL SERVER đã tạo ở trên. Hiện nay việc xử lý dữ liệu vẫn còn do file ứng dụng đãm trách thông qua các câu lệnh SQL trong các module.
2. Nếu chạy file ứng dụng đang có ta sẽ thấy khi mở Form "frmContact" (dùng để cập nhật và xem dữ liệu) sẽ còn mất 1 ít thời gian mà ta có thể cảm nhận được. Mục tiêu của chúng ta là phải làm sao cho nhanh đến mức không cảm thấy phải chờ một chút nào.
Tôi đã kiểm tra thử mở form nói trên với kết nối internet qua 1 USB 3G của Viettel (loại 7.2 Mbps) trên xe hơi đang chạy: thời gian nạp xong form mất khoảng 25 giây.
Có Bạn nào tìm được lý do nào khác không?
Link tải File ứng dụng minh họa, bản cập nhật ngày 15/7/2014:
http://www.mediafire.com/download/j5v854...150714.rar
thucgia > 16-03-15, 02:10 PM
(18-07-12, 01:47 PM)lehongduc Đã viết: Chào các Bạn,
Để giúp các Bạn có căn cứ đánh giá và tối ưu hoá hiệu quả truy xuất dữ liệu của các thủ tục đang có trong file ứng dụng minh hoạ và các thủ tục do chính các Bạn viết hoặc hiệu chỉnh, tôi đã cho nạp vào file dữ liệu trên SQL SERVER:
+ Trên 12.000 chứng từ phát sinh (trong bảng "tblctunx")
+ Với trên 48.000 chi tiết hàng hoá phát sinh (trong bảng "tblctunxct")
Rất mong các Bạn cùng tham gia trao đổi để chúng ta cùng làm sáng tỏ những vấn đề đang thảo luận trong chuyên đề này.
lehongduc > 12-06-16, 12:28 PM
huuduy.duy > 18-12-16, 03:37 PM
vulhu06 > 16-03-17, 06:28 PM
Trích dẫn:Em về làm thử thì nó báo lỗi dòng cn.open constr, đại ý nói kiểm tra Oledb gì đó, Bác xem giúp eMã:Dim CONSTR As String
Dim CN As New ADODB.Connection
CONSTR = "Provider = sqloledb;Data Source= NONAMEPC \ SQLEXPRESS;INitial Catalog=QLDIEM; INTEGRATED SECURITY=TRUE"
CN.Open CONSTR
maidinhdan > 17-03-17, 01:15 AM
lehongduc Đã viết:Chào các Bạn,
Có rất nhiều Bạn hỏi tôi làm cách nào để có thể share được MS SQL SERVER qua internet, nhằm mục đích:
1. Phân phối ứng dụng Front-End viết bằng MS. Access đến các máy khách (client)
2. Cho phép truy xuất đến file dữ liệu MS SQL SERVER (Back-End) đặt tại 1 server cố định.
Bạn hoàn toàn có thể làm điều đó mà không cần phải thuê hosting để đặt file dữ liệu MS SQL SERVER lên đó.
Vậy làm bằng cách nào?
Chỉ cần hỏi anh bạn Google là ra thôi mà các Bạn. Và sau đây là 1 link do Google chỉ đến:
http://phanmem.nhagiao.edu.vn/HDCauHinhS...netweb.htm
Link tải tài liệu định dạng PDF: http://www.mediafire.com/download/5cdax5...terNet.pdf
Cũng xin nói để các Bạn yên tâm, chính tôi đã cung cấp cho rất nhiều khách hàng ứng dụng QUẢN LÝ BÁN HÀNG với giải pháp nêu trên. Các khách hàng này đều có quy mô không nhỏ (có khách hàng đến trên 50 chi nhánh, với khối lượng chứng từ phát sinh hàng ngày trên 1.000 chứng từ mỗi chi nhánh, trên 100 users kết nối liên tục) mà mọi việc vẫn trơn tru.
Bạn nào đang say mê MS. Access và muốn kiếm tiền từ nó, xin cứ yên tâm "tiến lên".
Chúc các Bạn thành công.
Trích dẫn:vulhu06
Em về làm thử thì nó báo lỗi dòng cn.open constr, đại ý nói kiểm tra Oledb gì đó, Bác xem giúp eMã:Dim CONSTR As String
Dim CN As New ADODB.Connection
CONSTR = "Provider = sqloledb;Data Source= NONAMEPC \ SQLEXPRESS;INitial Catalog=QLDIEM; INTEGRATED SECURITY=TRUE"
CN.Open CONSTR
ChuoiKetnoi = "Provider = SQLOLEDB;Data Source=222.254.241.8,1433;Initial Catalog=Vanbandientu;User ID=Tentaikhoan;Password=Matkhaucuaban;"
CONSTR = "Provider = sqloledb;Data Source=NONAMEPC\SQLEXPRESS;Initial Catalog=QLDIEM;Integrated Security=SSPI;"
vulhu06 > 17-03-17, 10:20 AM
(17-03-17, 01:15 AM)maidinhdan Đã viết:lehongduc Đã viết:Chào các Bạn,
Có rất nhiều Bạn hỏi tôi làm cách nào để có thể share được MS SQL SERVER qua internet, nhằm mục đích:
1. Phân phối ứng dụng Front-End viết bằng MS. Access đến các máy khách (client)
2. Cho phép truy xuất đến file dữ liệu MS SQL SERVER (Back-End) đặt tại 1 server cố định.
Bạn hoàn toàn có thể làm điều đó mà không cần phải thuê hosting để đặt file dữ liệu MS SQL SERVER lên đó.
Vậy làm bằng cách nào?
Chỉ cần hỏi anh bạn Google là ra thôi mà các Bạn. Và sau đây là 1 link do Google chỉ đến:
http://phanmem.nhagiao.edu.vn/HDCauHinhS...netweb.htm
Link tải tài liệu định dạng PDF: http://www.mediafire.com/download/5cdax5...terNet.pdf
Cũng xin nói để các Bạn yên tâm, chính tôi đã cung cấp cho rất nhiều khách hàng ứng dụng QUẢN LÝ BÁN HÀNG với giải pháp nêu trên. Các khách hàng này đều có quy mô không nhỏ (có khách hàng đến trên 50 chi nhánh, với khối lượng chứng từ phát sinh hàng ngày trên 1.000 chứng từ mỗi chi nhánh, trên 100 users kết nối liên tục) mà mọi việc vẫn trơn tru.
Bạn nào đang say mê MS. Access và muốn kiếm tiền từ nó, xin cứ yên tâm "tiến lên".
Chúc các Bạn thành công.
Xin góp ý bổ sung ý này của anh Lê Hồng Đức
Khi bạn tải tài liệu này về bạn chú ý đến trang số 6: Có 2 địa chỉ IP chúng ta cần hiểu
+ Địa chỉ IP trong mạng LAN của máy tính bạn: ( Cái này ta chỉnh thế nào cũng được)
+ Địa chỉ IP tĩnh do nhà cung cấp dịch vụ Internet cung cấp. ( Cái này phải mua Lý do:
* Thông thường khi ta đăng ký sử dụng mạng Internet nhà mạng chỉ cho ta địa chỉ IP động, để tiết kiệm băng thông nhà mạng. Mỗi lần ta bật/ tắt modum thì ta sẽ nhận được 1 địa chỉ IP mới.
* Thế thì bạn muốn dùng máy tình ở nhà làm máy chủ bạn phải đăng kỳ mua 1 địa chỉ IP tĩnh ( giákhông rõ lắm nhưng cũng tầm 700 ngàn là IP rẽ nhất và sẽ có những dịch vụ đi kèm nếu mắc hơn)
* Khi đó ta mới dễ dàng thiết lập máy nhà thì máy chủ, nếu không mua IP tĩnh thì ta phải chỉnh code của ta khi ta tắt/mở modum.
* Tôi đã làm 1 video liên quan đến vấn đề này là sử dụng ADODB để kết nối với SQL Server thông quá IP động nhưng do bản ghi âm ồn quá do Micro có vấn đề nên mình sẽ làm video khác trong vài ngày tới để mình họa Access kết nối với SQL Server dùng máy tính nhà làm máy chủ.
Thân mến!
Riêng câu hỏi bạn
Trích dẫn:vulhu06
Em về làm thử thì nó báo lỗi dòng cn.open constr, đại ý nói kiểm tra Oledb gì đó, Bác xem giúp eMã:Dim CONSTR As String
Dim CN As New ADODB.Connection
CONSTR = "Provider = sqloledb;Data Source= NONAMEPC \ SQLEXPRESS;INitial Catalog=QLDIEM; INTEGRATED SECURITY=TRUE"
CN.Open CONSTR
Sai chuỗi Connection String CONSTR
Tôi khuyên bạn nên dùng chuỗi kết nối bằng IP và cổng (Port) để kết nối và có tên User + Mật khẩu.
Cú pháp là: ( Lưu ý không có khoảng trắng)
Mã PHP:ChuoiKetnoi = "Provider = SQLOLEDB;Data Source=222.254.241.8,1433;Initial Catalog=Vanbandientu;User ID=Tentaikhoan;Password=Matkhaucuaban;"
* Trong đó:
+ 222.254.241.8 : là IP tĩnh, bạn vẫn có thể dùng IP động như là 192.168.1.x ( x: từ 2 đến 255)
+ 1433 : Đây là cỗng mà ta mở để cho nó giao tiếp với môi trường mạng.
+ Vanbandientu: là Database mà ta đặt tên trong SQL Server
+ Tên tài khoản: mình tạo mới hoặc dùng tài khoản Sa
+ Mật khẩu: .....
Nếu bạn vẫn dùng chuỗi như trên thì thử chỉnh như sau:
Mã:CONSTR = "Provider = sqloledb;Data Source=NONAMEPC\SQLEXPRESS;Initial Catalog=QLDIEM;Integrated Security=SSPI;"
Bạn lứu ý cái Instance Name của bạn nhé và phải cấu hình TCP/IP cho phép trong SQL Server Configuration Management cho hợp lệ khi kết nối trong mạng LAN hay Network.
Nếu chưa đươc thì tham khảo link này: https://www.connectionstrings.com/micros...-sqloledb/
Thân mến!
rs.Open "select Lop From Lop", cn, 3, 2
For i = 1 To rs.RecordCount
Me.Combo0.ControlSource = rs.Fields("lop")
rs.MoveNext
Next i
vulhu06 > 17-03-17, 01:14 PM
(17-03-17, 10:20 AM)vulhu06 Đã viết:(17-03-17, 01:15 AM)maidinhdan Đã viết:lehongduc Đã viết:Chào các Bạn,
Có rất nhiều Bạn hỏi tôi làm cách nào để có thể share được MS SQL SERVER qua internet, nhằm mục đích:
1. Phân phối ứng dụng Front-End viết bằng MS. Access đến các máy khách (client)
2. Cho phép truy xuất đến file dữ liệu MS SQL SERVER (Back-End) đặt tại 1 server cố định.
Bạn hoàn toàn có thể làm điều đó mà không cần phải thuê hosting để đặt file dữ liệu MS SQL SERVER lên đó.
Vậy làm bằng cách nào?
Chỉ cần hỏi anh bạn Google là ra thôi mà các Bạn. Và sau đây là 1 link do Google chỉ đến:
http://phanmem.nhagiao.edu.vn/HDCauHinhS...netweb.htm
Link tải tài liệu định dạng PDF: http://www.mediafire.com/download/5cdax5...terNet.pdf
Cũng xin nói để các Bạn yên tâm, chính tôi đã cung cấp cho rất nhiều khách hàng ứng dụng QUẢN LÝ BÁN HÀNG với giải pháp nêu trên. Các khách hàng này đều có quy mô không nhỏ (có khách hàng đến trên 50 chi nhánh, với khối lượng chứng từ phát sinh hàng ngày trên 1.000 chứng từ mỗi chi nhánh, trên 100 users kết nối liên tục) mà mọi việc vẫn trơn tru.
Bạn nào đang say mê MS. Access và muốn kiếm tiền từ nó, xin cứ yên tâm "tiến lên".
Chúc các Bạn thành công.
Xin góp ý bổ sung ý này của anh Lê Hồng Đức
Khi bạn tải tài liệu này về bạn chú ý đến trang số 6: Có 2 địa chỉ IP chúng ta cần hiểu
+ Địa chỉ IP trong mạng LAN của máy tính bạn: ( Cái này ta chỉnh thế nào cũng được)
+ Địa chỉ IP tĩnh do nhà cung cấp dịch vụ Internet cung cấp. ( Cái này phải mua Lý do:
* Thông thường khi ta đăng ký sử dụng mạng Internet nhà mạng chỉ cho ta địa chỉ IP động, để tiết kiệm băng thông nhà mạng. Mỗi lần ta bật/ tắt modum thì ta sẽ nhận được 1 địa chỉ IP mới.
* Thế thì bạn muốn dùng máy tình ở nhà làm máy chủ bạn phải đăng kỳ mua 1 địa chỉ IP tĩnh ( giákhông rõ lắm nhưng cũng tầm 700 ngàn là IP rẽ nhất và sẽ có những dịch vụ đi kèm nếu mắc hơn)
* Khi đó ta mới dễ dàng thiết lập máy nhà thì máy chủ, nếu không mua IP tĩnh thì ta phải chỉnh code của ta khi ta tắt/mở modum.
* Tôi đã làm 1 video liên quan đến vấn đề này là sử dụng ADODB để kết nối với SQL Server thông quá IP động nhưng do bản ghi âm ồn quá do Micro có vấn đề nên mình sẽ làm video khác trong vài ngày tới để mình họa Access kết nối với SQL Server dùng máy tính nhà làm máy chủ.
Thân mến!
Riêng câu hỏi bạn
Trích dẫn:vulhu06
Em về làm thử thì nó báo lỗi dòng cn.open constr, đại ý nói kiểm tra Oledb gì đó, Bác xem giúp eMã:Dim CONSTR As String
Dim CN As New ADODB.Connection
CONSTR = "Provider = sqloledb;Data Source= NONAMEPC \ SQLEXPRESS;INitial Catalog=QLDIEM; INTEGRATED SECURITY=TRUE"
CN.Open CONSTR
Sai chuỗi Connection String CONSTR
Tôi khuyên bạn nên dùng chuỗi kết nối bằng IP và cổng (Port) để kết nối và có tên User + Mật khẩu.
Cú pháp là: ( Lưu ý không có khoảng trắng)
Mã PHP:ChuoiKetnoi = "Provider = SQLOLEDB;Data Source=222.254.241.8,1433;Initial Catalog=Vanbandientu;User ID=Tentaikhoan;Password=Matkhaucuaban;"
* Trong đó:
+ 222.254.241.8 : là IP tĩnh, bạn vẫn có thể dùng IP động như là 192.168.1.x ( x: từ 2 đến 255)
+ 1433 : Đây là cỗng mà ta mở để cho nó giao tiếp với môi trường mạng.
+ Vanbandientu: là Database mà ta đặt tên trong SQL Server
+ Tên tài khoản: mình tạo mới hoặc dùng tài khoản Sa
+ Mật khẩu: .....
Nếu bạn vẫn dùng chuỗi như trên thì thử chỉnh như sau:
Mã:CONSTR = "Provider = sqloledb;Data Source=NONAMEPC\SQLEXPRESS;Initial Catalog=QLDIEM;Integrated Security=SSPI;"
Bạn lứu ý cái Instance Name của bạn nhé và phải cấu hình TCP/IP cho phép trong SQL Server Configuration Management cho hợp lệ khi kết nối trong mạng LAN hay Network.
Nếu chưa đươc thì tham khảo link này: https://www.connectionstrings.com/micros...-sqloledb/
Thân mến!
Thanks Bác nhiều, đã thử và thành công, e đang tìm hiểu cái này, nếu có gì thắc mắc mong mọi người hướng dẫn
Thêm vấn đề nữa cần tham khảo ý kiến Bác nè, em có đoạn code khi load Form thì đưa DL Field Lop vào combo trên From, nhưng nó chỉ hiện thị có mỗi Record cuối trong Field thôi
Mã:rs.Open "select Lop From Lop", cn, 3, 2
For i = 1 To rs.RecordCount
Me.Combo0.ControlSource = rs.Fields("lop")
rs.MoveNext
Next i
tt1212 > 21-03-17, 12:07 AM
maidinhdan > 21-03-17, 10:20 PM