Kết nối Ms Access Form với sql Server và sử dụng trong mạng nội bộ

Liên hệ QC

An.BA

Thành viên thường trực
Tham gia
15/9/18
Bài viết
223
Được thích
171
Giới tính
Nam
Hiện tại em có xây dựng 1 ứng dụng trên MS Access Form, Data em sử dụng Linked table đến sql-server.
Vậy làm thế nào để khi 1 người khác sử dụng Ms Access Form của em đều chung dữ liệu từ sql-server ạ?
Vì lúc đầu em sử dụng file .mdb và share ổ nhưng vì tìm hiểu thì file mdb chỉ chứa tối đa 2 GB nên em muốn chuyển dữ liệu sang sql-server để chứa được nhiều dung lượng hơn.
Em cảm ơn nhiều ạ.
 
Tôi đưa ra phương án mò là bạn có tạo ra một cái ứng dụng link table tới sql-server thật chuẩn rồi sao ra nhiều bản cho mỗi người xài. (cái này tôi chưa có điều kiện thử nên không chắc).

Hoặc bạn viết ứng dụng trên Access giống như làm ứng dụng trên một nền tảng lập trình thuần túy nghĩa là tạo form, viết code như kiểu tạo form viết code trên C#, Delphi, Java... Ngôn ngữ của bạn dùng ở đây không phải C#,... mà sẽ là VBA và môi trường thiết kế form là của Access. Cái này chắc chắc là làm được và không khó hơn mấy những gì bạn đã làm nhé. Lúc đó dữ liệu lưu tại file Access có thể là thông số hoạt động của ứng dụng.
 
Nói thêm.
- Cái file .mdb của bạn tạm gọi là Font End (FE) đi. Bạn có thể copy cho bao nhiêu máy tính cũng được.
- Khi qua máy khác bạn phải kết nối thủ công lại CSDL SQL Server cho từng máy (chắc bạn dùng ODBC). Nếu muốn tự động thì bạn phải viết code trong form khởi động để kiểm tra linked table còn hiệu lực không nếu không thì phải kết nối lại toàn bộ.
- Khi thiết kế cho môi trường đa người dùng thì bạn phải dự phòng trường hợp 2 ngừoi cùng nhập liệu và bấm nút lưu cùng một lúc lên SQL Server (trường hợp này rất hiếm vì có thể thời gian lưu chênh lênh phần ngàn giây) nhưng cũng là có phát sinh. Khi đó sẽ bị lỗi trùng khoá chính, một người sẽ không lưu được gây phiền toái. Nếu CSDL bạn không phải lúc nào cũng có giao dịch liên tục thì cũng không cần quan tâm vụ này. :)
 
Bài đã được tự động gộp:

Nói thêm.
- Cái file .mdb của bạn tạm gọi là Font End (FE) đi. Bạn có thể copy cho bao nhiêu máy tính cũng được.
- Khi qua máy khác bạn phải kết nối thủ công lại CSDL SQL Server cho từng máy (chắc bạn dùng ODBC). Nếu muốn tự động thì bạn phải viết code trong form khởi động để kiểm tra linked table còn hiệu lực không nếu không thì phải kết nối lại toàn bộ.
- Khi thiết kế cho môi trường đa người dùng thì bạn phải dự phòng trường hợp 2 ngừoi cùng nhập liệu và bấm nút lưu cùng một lúc lên SQL Server (trường hợp này rất hiếm vì có thể thời gian lưu chênh lênh phần ngàn giây) nhưng cũng là có phát sinh. Khi đó sẽ bị lỗi trùng khoá chính, một người sẽ không lưu được gây phiền toái. Nếu CSDL bạn không phải lúc nào cũng có giao dịch liên tục thì cũng không cần quan tâm vụ này. :)
Em phân quyền cho từng người dùng theo nhóm công việc vì vậy khả năng xung đột là không có ạ.
Em chưa hiểu khi đưa ứng dụng qua các máy khác kèm file .mdb sau kết nối với sql Server như nào ạ. Vì thực chất em đang tự học hỏi để làm nên còn nhiều thứ em chưa biết rõ lắm ạ.
Bác có thể hướng cho em chi tiết được không ạ.
EM cảm ơn!
 
Em phân quyền cho từng người dùng theo nhóm công việc vì vậy khả năng xung đột là không có ạ.
Em chưa hiểu khi đưa ứng dụng qua các máy khác kèm file .mdb sau kết nối với sql Server như nào ạ. Vì thực chất em đang tự học hỏi để làm nên còn nhiều thứ em chưa biết rõ lắm ạ.
Bác có thể hướng cho em chi tiết được không ạ.

Tôi cũng chưa nắm rõ ý bạn lắm.
Đối với file hiện tại trên máy PC của bạn, thao tác kết nối tới SQL Server như thế nào thì khi copy ứng dụng (FE) qua máy khác bạn cũng thao tác tương tự để các Linked table trong nó cập nhật lại đường dẫn tới SQL Server (hoặc tới DSN trên máy đó).
HIện tại bạn kết nối tới SQL Server như thế nào?
 
Tôi cũng chưa nắm rõ ý bạn lắm.
Đối với file hiện tại trên máy PC của bạn, thao tác kết nối tới SQL Server như thế nào thì khi copy ứng dụng (FE) qua máy khác bạn cũng thao tác tương tự để các Linked table trong nó cập nhật lại đường dẫn tới SQL Server (hoặc tới DSN trên máy đó).
HIện tại bạn kết nối tới SQL Server như thế nào?
Đây em liên kết như này tới SQL server bác ạ,
nhưng khi mang sang máy khác thì cái Link table này chắc nó không chạy được ạ.
Em chưa tìm được ra cách kết nối khác, mong bác hỗ trợ.
Em cảm ơn!
220278
220279
220280
220281
220282
 
Bạn xem link về các chia sẻ kết nối ODBC khi qua máy khác cho nhanh thay vì bạn phải thao tác lại các bước như hình trên.
Có 2 cách để bạn kết nối với CSDL SQL Server: ODBC và ADODB.
Dùng ODBC như bạn đang làm là dễ nhất vì nó mang CSDL của SQL Server về Access và bạn có thể thao tác nó y như thao tác với Table (query, insert, update...). Đây gọi là kết nối liên tục tức là nó kết nối thường trực với CSDL SQL server, lượng dữ liệu thường xuyên chuyển tải qua mạng sẽ lớn nhưng vì bạn dùng mạng LAN nên cũng không thấy ảnh hưởng.
Còn dùng ADODB thì bạn phải học các phương thức, thuộc tính của nó để thao tác với dữ liệu SQL Server. Đây là cách nên dùng nhưng do bạn mới bắt đầu thì nên dùng ODBC cho dễ. Với ADOBD thì bạn sẽ gửi lệnh tới máy chủ, tận dụng được sức mạnh của máy chủ SQL Server để thao tác dữ liệu như truy vấn (View), dùng các stored procedure để xử lý dữ liệu ngay trên Server chứ không phải dùng tới tài nguyên của máy con.Máy con chỉ sử dụng ADODB để lấy dữ liệu đã xử lý trả về, hiển thị cho người dùng xem thôi. Dùng ADODB thì chỉ khi nào cần lấy dữ liệu thì mới kết nối tới SQL Server, sau khi thực hiện xong sẽ đóng kết nối và code của nó luôn có viêc kết nối và ngắt kết nối. Nếu làm làm qua môi trường internet sẽ thấy rõ lợi ích của viêc này, kể cả khi load dữ liệu về cũng chẻ nhỏ ra mà load, chỉ load dữ liệu cần chứ không load cả ngàn dòng dữ liệu về máy con.

Bạn đọc bài này của anh Lê Hồng Đức sẽ có thể hiểu và sử dụng thư viện ADODB để làm việc với SQL Server.

Link: https://www.giaiphapexcel.com/diendan/threads/sử-dụng-class-module-và-kết-nối-dữ-liệu-sql-server-trong-access-vba.67063/#post-411268
 
Lần chỉnh sửa cuối:
Bạn xem link về các chia sẻ kết nối ODBC khi qua máy khác cho nhanh thay vì bạn phải thao tác lại các bước như hình trên.
Có 2 cách để bạn kết nối với CSDL SQL Server: ODBC và ADODB.
Dùng ODBC như bạn đang làm là dễ nhất vì nó mang CSDL của SQL Server về Access và bạn có thể thao tác nó y như thao tác với Table (query, insert, update...). Đây gọi là kết nối liên tục tức là nó kết nối thường trực với CSDL SQL server, lượng dữ liệu thường xuyên chuyển tải qua mạng sẽ lớn nhưng vì bạn dùng mạng LAN nên cũng không thấy ảnh hưởng.
Còn dùng ADODB thì bạn phải học các phương thức, thuộc tính của nó để thao tác với dữ liệu SQL Server. Đây là cách nên dùng nhưng do bạn mới bắt đầu thì nên dùng ODBC cho dễ. Với ADOBD thì bạn sẽ gửi lệnh tới máy chủ, tận dụng được sức mạnh của máy chủ SQL Server để thao tác dữ liệu như truy vấn (View), dùng các stored procedure để xử lý dữ liệu ngay trên Server chứ không phải dùng tới tài nguyên của máy con.Máy con chỉ sử dụng ADODB để lấy dữ liệu đã xử lý trả về, hiển thị cho người dùng xem thôi. Dùng ADODB thì chỉ khi nào cần lấy dữ liệu thì mới kết nối tới SQL Server, sau khi thực hiện xong sẽ đóng kết nối và code của nó luôn có viêc kết nối và ngắt kết nối. Nếu làm làm qua môi trường internet sẽ thấy rõ lợi ích của viêc này, kể cả khi load dữ liệu về cũng chẻ nhỏ ra mà load, chỉ load dữ liệu cần chứ không load cả ngàn dòng dữ liệu về máy con.

Bạn đọc bài này của anh Lê Hồng Đức sẽ có thể hiểu và sử dụng thư viện ADODB để làm việc với SQL Server.

Link: https://www.giaiphapexcel.com/diendan/threads/sử-dụng-class-module-và-kết-nối-dữ-liệu-sql-server-trong-access-vba.67063/#post-411268
VÂng, em cảm ơn nhiều ạ.
 
Lần chỉnh sửa cuối:
Bạn xem link về các chia sẻ kết nối ODBC khi qua máy khác cho nhanh thay vì bạn phải thao tác lại các bước như hình trên.
Có 2 cách để bạn kết nối với CSDL SQL Server: ODBC và ADODB.
Dùng ODBC như bạn đang làm là dễ nhất vì nó mang CSDL của SQL Server về Access và bạn có thể thao tác nó y như thao tác với Table (query, insert, update...). Đây gọi là kết nối liên tục tức là nó kết nối thường trực với CSDL SQL server, lượng dữ liệu thường xuyên chuyển tải qua mạng sẽ lớn nhưng vì bạn dùng mạng LAN nên cũng không thấy ảnh hưởng.
Còn dùng ADODB thì bạn phải học các phương thức, thuộc tính của nó để thao tác với dữ liệu SQL Server. Đây là cách nên dùng nhưng do bạn mới bắt đầu thì nên dùng ODBC cho dễ. Với ADOBD thì bạn sẽ gửi lệnh tới máy chủ, tận dụng được sức mạnh của máy chủ SQL Server để thao tác dữ liệu như truy vấn (View), dùng các stored procedure để xử lý dữ liệu ngay trên Server chứ không phải dùng tới tài nguyên của máy con.Máy con chỉ sử dụng ADODB để lấy dữ liệu đã xử lý trả về, hiển thị cho người dùng xem thôi. Dùng ADODB thì chỉ khi nào cần lấy dữ liệu thì mới kết nối tới SQL Server, sau khi thực hiện xong sẽ đóng kết nối và code của nó luôn có viêc kết nối và ngắt kết nối. Nếu làm làm qua môi trường internet sẽ thấy rõ lợi ích của viêc này, kể cả khi load dữ liệu về cũng chẻ nhỏ ra mà load, chỉ load dữ liệu cần chứ không load cả ngàn dòng dữ liệu về máy con.

Bạn đọc bài này của anh Lê Hồng Đức sẽ có thể hiểu và sử dụng thư viện ADODB để làm việc với SQL Server.

Link: https://www.giaiphapexcel.com/diendan/threads/sử-dụng-class-module-và-kết-nối-dữ-liệu-sql-server-trong-access-vba.67063/#post-411268
Sau khi xem form của bác gửi cho em em thấy có mấy cái rất muốn làm được giống như bác nhưng em không biết thế nào,
Bác chỉ cho em với ạ em cảm ơn nhiều.
221675
Làm sao để tạo được các nút như ở trên và sử dụng nó ạ.
221676
Bác làm thế nào ẩn được cái thanh công cụ đi ạ
221677
Và cái này nữa ạ. không hề còn tùy chọn nào để chỉnh sửa file nữa.
 
Lần chỉnh sửa cuối:
Hình trên là tạo Ribbon menu thôi bạn à. Bên cạnh đó còn thêm một số code can thiệp hệ thống để khoá, ngăn không cho người dùng táy máy vào được hệ thống thiết kế sửa/ xoá tùm lum.

Dứoi đây là cái hàm để khoá hệ thống.
Tôi đặc biệt cảnh báo:
- Phải lưu file dự phòng trước khi chạy các code này vì không đúng trình tự, nó khoá luôn file.
- Phải đảm bảo tạo form có nút mở khoá trước rồi mới tạo nút khoá và Form này có thể gọi được từ thanh menu hoặc có thể gọi ở form khởi động ứng dụng (ví dụ: form đăng nhập có thêm nút lệnh để gọi form mở khoá database). Nếu không khi bạn khoá rồi thì không thể vô ngăn Form để gọi nó ra mà mở khoá.


Mã:
Public Sub SercurityDB(locker As Boolean)

'SecurityDB True ( False)

' Doi ten ung dung
    ChangeProperty "Apptitle", dbText, "QUAN LY NHAN SU"
    ' Dat lai form khoi dong cua ung dung
    ChangeProperty "StartupForm", dbText, "frmLogin"
    ' Cho nhìn thay Khung Database hay không
    ChangeProperty "StartupShowDBWindow", dbBoolean, locker
    ' Cho nhìn thay thanh Status hay không
    ChangeProperty "StartupShowStatusBar", dbBoolean, locker
    ' Cho phép hien thanh  design hay không
    ChangeProperty "AllowBuiltinToolbars", dbBoolean, locker
    ' Cho phép thêm bot 1 item vào các thanh công cu hay không
    'ChangeProperty "AllowToolbarChanges", dbBoolean, locker
    ' Cho phép hien thanh menu con khi click chuot phai hay không
    ChangeProperty "AllowShortcutMenus", dbBoolean, locker
    ' Cho phép hien toan bo thanh menu hay không
    ChangeProperty "AllowFullMenus", dbBoolean, locker
    'Cho phép ngung chuong trình bang phím Ctrl+ Break khi dang chay hay không
    ChangeProperty "AllowBreakIntoCode", dbBoolean, locker
    ' Vô hieu hoa phím dac biet nhu: F11
    'ChangeProperty "AllowSpecialKeys", dbBoolean, locker
    ' Vô hieu hoa phím shift
    'ChangeProperty "AllowBypassKey", dbBoolean, locker
    'Cho phep design/ sua thuoc tính form/ report khi ðang mo hay không.
    ChangeProperty "AllowDesignChanges", dbBoolean, locker

    ChangeProperty "AppIcon", dbText, Access.CurrentProject.path & "\HinhAnh\Icons\ongke0711.ico"
    Application.SetOption "ShowWindowsInTaskbar", False

End Sub


Function ChangeProperty(strPropName, varPropType, varPropValue)
    Dim dbs As Database, prp As Property
    Const conPropNotFoundError = 3270
    Set dbs = CurrentDb
    On Error GoTo Change_XuLyLoi
    dbs.Properties(strPropName) = varPropValue
    ChangeProperty = True
   
Change_KetThuc:
    Exit Function
Change_XuLyLoi:
    'Thuôòc tính không thâìy
    If Err = conPropNotFoundError Then
        Set prp = dbs.CreateProperty(strPropName, _
                                     varPropType, varPropValue)
        dbs.Properties.Append prp
        Resume Next
    Else
        'Không coì thuôòc tiình ðoì
        ChangeProperty = False
        Resume Change_KetThuc
    End If
End Function
 
Em cảm ơn nhiều ạ.
 
Web KT

Bài viết mới nhất

Back
Top Bottom