Kết nối SQL server với Access

Thảo luận trong 'Access và VBA' bắt đầu bởi phatnq2002, 29/2/08.

  1. phatnq2002

    phatnq2002 Tích cực giảm cân... Hội viên mới

    Nghe cái tít có vẻ ghê gớm, thực chất không có gì phức lắm đâu.
    Trong Access, có một dạng gọi là Access Project. Nó cho phép bạn kết nối đến CSDL của SQL server. Nói cách khác, các bảng dữ liệu, các query (view) không nằm trên tập tin Access mà nó nằm trên CSDL của SQL Server.
    Lúc này bạn sẽ dùng form và report của Access để thể hiện hoặc cập nhật dữ liệu của SQL database.
    Cái kiểu này tiện lợi ở một chỗ là bạn có thể có một ứng dụng có thể chạy từ nhiều máy nhưng cho phép lưu trên cùng một CSDL.
    Về thiết kế form và report thì như các bạn đã biết, Access cực kỳ dễ. Do đó nếu không cần thiết phải "security" và đòi hỏi phải "pro" quá thì dùng Access Project trong một mạng LAN cũng được đấy.
    Bản thân tôi cũng có làm một số ứng dụng bằng Access Project, số lượng máy sử dụng là "vô tư" (tuỳ thuộc vào cái giới hạn khả năng truy cập SQL server mà thôi).
    Muốn làm Access Project thì trong đơn vị bạn nên có một server, trên đó có cài đặt SQL Server (dùng bản 2000 cho nó dễ xài).
    Về thiết kế các đối tượng database (table, view, store procedure, function,...) thì sẽ tuân thủ theo quy tắc của SQL Server
    Về thiết kế form, report thì theo Access. Code VBA cho form, report, module thì tương tự như Access database, tuy nhiên có một số khác biệt nhỏ.

    Chỉ giới thiệu sơ sơ thôi, từ từ rồi đi tiếp hả.
    :smilielol5:
     

  2. trouble

    trouble New Member Hội viên mới

    Ðề: Kết nối SQL server với Access

    Chào Phat!
    Tôi đang rất cần 1 kết nối SQL server với file access của mình mà không biết làm thế nào. Hiện mình đang có 1 file acces nhưng chỉ sử dụng được trên máy đơn thôi.
    Giúp mình với....
    Cám ơn!

    Trouble : sonn060175@sanyodisv.com.vn
     
  3. KHAHOANGLE

    KHAHOANGLE New Member Hội viên mới

    Ðề: Kết nối SQL server với Access

    Mình đang tìm hiểu về SQL server 2000 và lập trình trên access, nhưng mọi thứ còn mới mẻ quá. mình đang viết về quản lí nhân sự. Bạn có thể gửi cho mình một số tài liệu về vấn đề này ko? rất cám ơn nếu được giúp đỡ.

    mail của mình: cuctrang8888@yahoo.com
     
    Chỉnh sửa cuối: 22/5/08
  4. phatnq2002

    phatnq2002 Tích cực giảm cân... Hội viên mới

    Ðề: Kết nối SQL server với Access

    Để làm Access Project, các bạn cần có kiến thức căn bản về SQL Sever, trong đó quan trọng nhất là các câu lệnh T-SQL (Transaction SQL).

    Bạn có thể tạo một Access Project với dữ liệu SQL có sẵn (đã tạo sẵn từ SQL Server Enterprise Manager hoặc từ script) hoặc từ một SQL Server database mới.

    Access sẽ xuất hiện các hộp thoại hướng dẫn các bạn kết nối đến SQL Server và database mà các bạn cần kết nối.

    Nếu SQL Server của bạn dùng chế độ Windows Authentication Mode thì bạn không cần nhập login name và password.
    Nếu bạn dùng chế độ Mixed Mode (hay còn gọi là SQL server Authentication Mode) thì bạn cần phải nhập loginname và password theo đúng như khi bạn cài đặt một SQL Server instance. (Thường login name là sa)

    Khi kết nối xong với SQL Server database, bạn có thể làm việc tương tự như khi bạn làm với Access MDB.

    Một vài lưu ý nhỏ nhỏ:
    1. Access Project sẽ kết nối với SQL server database một cách "liên tục", do vậy nó sẽ ảnh hưởng đến số lượng connection đến SQL Server. Nếu bạn cho nhiều máy cùng sử dụng chương trình thì có khả năng lâu lâu nó "treo" nếu hệ thống hạ tầng của bạn không ngon lắm.
    2. Nếu bạn lập trình VBA trong Access Project thì cần lưu ý khi bạn sử dụng đối tượng Recordset. Vì Access Project sẽ sử dụng Recordset thuộc lớp ADODB chứ không phải thuộc lớp DAO như Access MDB, bởi vậy bạn phải khai báo tường minh khi sử dụng:
    Ví dụ:
    Dim rs As DAO.Recordset
    Dim rs As ADODB.Recordset
    Đồng thời đối tượng Recordset thuộc ADODB không có các phương thức FindFirst, FindNext, FindPrevious, FindLast mà chỉ có phương thức Find mà thôi. Và phương thức này chỉ có tìm một chiều nên nếu không tìm thấy, nó sẽ chuyển đến EOF. Và điều kiện tìm của nó là một chuỗi điều kiện đơn (nghĩa là không có AND, OR gì)
    3. Cũng trong lập trình thì Access Project sẽ sử dụng đối tượng CurrentProject thay vì CurrentDB.
    ....
    Còn một vài thứ khác nữa, không có thời gian nói hết. Các bạn tự nghiên cứu thêm nhé.
     
  5. KHAHOANGLE

    KHAHOANGLE New Member Hội viên mới

    Ðề: Kết nối SQL server với Access

    "Access sẽ xuất hiện các hộp thoại hướng dẫn các bạn kết nối đến SQL Server và database mà các bạn cần kết nối"
    cụ thể là thế nào hả bạn? có thể chỉ một cách chi tiết được ko?
     
  6. phatnq2002

    phatnq2002 Tích cực giảm cân... Hội viên mới

    Ðề: Kết nối SQL server với Access

    Bạn có sẵn sàng thử chưa? Nếu bạn đã sẵn sàng thì sẽ hãy bắt tay vào đi. Nó sẽ hiện ra các hộp thoại để bạn chiêm ngưỡng và thiết lập thông số. :)

    Sỡ dĩ tôi nói vắn tắt như vậy vì hiện tại có khá nhiều tài liệu bằng tiếng Anh, tiếng Việt hướng dẫn chi tiết về điều này. Thậm chí là mở Help của Access cũng có nữa.

    Mặt khác đây chỉ là giới thiệu sơ lược về Access Project thôi nên tôi không tham lam viết nhiều (sợ viết sai + dỡ, :hysterical:).

    Để khi nào thu xếp được thời gian, có lẽ tôi sẽ làm một loạt bài về vấn đề này. Thông cảm nhé các bạn.
     
  7. KHAHOANGLE

    KHAHOANGLE New Member Hội viên mới

    Ðề: Kết nối SQL server với Access

    to: phatnq2002

    Cái mà bạn nói là "project using existing database" đúng ko? Còn cái mình hỏi là "blank database".
    Mình làm một csdl ở sql sever 2000, giờ muốn kết nối sang access. Rồi cách lấy dữ liệu ở sql để "trình diễn" trên form của access.
    ở đây access chỉ thể hiện ra dữ liệu thôi. Bạn hiểu ý mình hỏi chứ?
     
  8. phatnq2002

    phatnq2002 Tích cực giảm cân... Hội viên mới

    Ðề: Kết nối SQL server với Access

    Tôi rất hiểu ý bạn muốn hỏi.
    Và theo như cách bạn nói thì bạn đã có database tạo từ SQL server 2000, vậy thì bạn sẽ phải chọn Project using existing data là đúng rồi còn gì?
    Lúc đó bạn sẽ chỉ định các thông số để kết nối cho file Access.
    Lúc này bạn đừng coi Access là một database nữa mà chỉ xem nó là một project file, nơi chứa các interface để bạn xử lý dữ liệu của SQL server 2000.
    Còn để xử lý dữ liệu ra sao thì bạn phải lập trình, muốn ra kết xuất thì bạn phải design nó. Chứ Access có tạo sẵn đâu? Ngay cả Acccess database cũng vậy mà.

    Có thể cách nói của tôi không làm cho bạn hài lòng, vậy thì ai đó có thể giúp cho bạn KHAHOANGLE tốt hơn? Hoặc bạn KHAHOANGLE tìm thêm tài liệu để hiểu kỹ vấn đề này hơn.
     
  9. quan nghi

    quan nghi New Member Hội viên mới

    Ðề: Kết nối SQL server với Access

    Sau khi tạo new Project (new data), bạn vào menu File, chọn connection. Nhâp các thông số như server name (tên máy chủ mà bạn đã tạo csdl ở sql sever 2000), phương thức logon vào server, tên database, test thử nếu được thì chọn OK.
     
  10. phatnq2002

    phatnq2002 Tích cực giảm cân... Hội viên mới

    Ðề: Kết nối SQL server với Access

    Dim connStr As String, dim conn As New ADODB.Connection
    connStr = "Data Source=servername;Initial Catalog=databasename;User Id=username;Password=password;"

    With conn
    .ConnectionString = connStr
    .Open
    End With

    Trong đó: mấy chỗ chữ nghiêng là cái mà bạn phải điền vào cho đúng với cái SQL Server instance, database name, user name và password để đăng nhập và kết nối với database của SQL Server.

    Thế có đúng ý bạn chưa?
     
  11. KHAHOANGLE

    KHAHOANGLE New Member Hội viên mới

    Ðề: Kết nối SQL server với Access

    Mình muốn hỏi làm ở "blank database" với kết nối bằng câu lệnh kết nối chứ ko phải setup bằng tay!
    Nhưng dù sao cũng rất cám ơn vì đã chỉ giúp mình biết thêm nhiều điều.
     
  12. phatnq2002

    phatnq2002 Tích cực giảm cân... Hội viên mới

    Ðề: Kết nối SQL server với Access

    Cha mẹ ơi, bạn KHAHOANGLE hình như chưa đọc kỹ cái đoạn tôi chỉ ra:

    Cái này là bạn mở cái blank database của bạn ra, rồi bạn vào cái module bạn làm một cái sub để connect với database mà bạn cần đó.
     
  13. behattieu

    behattieu Member Hội viên mới

    Ðề: Kết nối SQL server với Access

    To phatnq2002.
    HIện mình đã có 1 kết nối từ access tới sqlser2000 , dữ liệu đã được truy vấn và hiện thị lên datagrid nhưng có 1 số mình đang muốn chỉnh sửa
    1. Các dấu kiểm (true, false ) không còn nữa nay nó lại thành 0 và -1
    2. Trong subform cũ thì tại ô (VD:mã phòng ban) trước đây nó dạng combobox để chọn thì nay nó không còn nữa
     
  14. phatnq2002

    phatnq2002 Tích cực giảm cân... Hội viên mới

    Ðề: Kết nối SQL server với Access

    Tôi chưa hiểu cách bạn thiết kế lắm, nhưng theo như bạn nói thì tôi chưa gặp vì tôi không gặp những trường hợp này. Tôi design như thế nào thì vẫn như thế.

    Vậy có lẽ bạn chịu khó thiết lập lại bằng cách vào table design view, chuyển qua tab thứ hai của Field Property, thay Display control của các field kiểu true/false của bạn thành check box, thay cái mà bạn muốn tạo combo box thành Combo Box, chọn Record Source cho nó, Column Counts.
     
  15. behattieu

    behattieu Member Hội viên mới

    Ðề: Kết nối SQL server với Access

    Hi, mình đang muốn chuyển 1 số chương trình từ dạng access sang dạng access+SQL2000. Như vậy phải dùng kết nối ADO từ access tới SQL. Vấn để ở chỗ form trong access đang giữ nguyên (về mặt giao diện) nhưng phải thay kết nối . Trước đây trong form của access có thuộc tính record source để gán dữ liệu (table hoặc query) nhưng nay 2 cái table và query không còn nữa mà thay vào đó chỉ là 1 recordset trong code VBA. Vậy phatnq2002 xem hộ làm sao để đẩy dữ liệu từ recordset vào form. Mình đã thử gán : txt1=rst.Fields(0) nhưng nó chỉ hiện có 1 giá trị trong khi form của mình định dạng ở dạng datasheet.
    Hi hi, hì hục cả buổi sáng cuối cùng cũng ra, rất đơn giản nhưng lại không để ý.
    set Me.Form.Recordset = rst:hysterical:
     
    Chỉnh sửa cuối: 13/8/08
  16. muontennguoi

    muontennguoi Member Thành viên BQT Super Moderators

    Ðề: Kết nối SQL server với Access

    Bạn nói sao khó hiểu quá. Làm sao mà có 2 cái table và query cùng lúc cho 1 record source đựoc?
    Record source cũng là 1 cái recordset thôi. Nó query từ các table và query khác mà ra thành recordset. Dù table và query gốc là ở Access hay ở SQL server 2000 cũng thế.
     
  17. behattieu

    behattieu Member Hội viên mới

    Ðề: Kết nối SQL server với Access

    Chắc bạn chưa hiểu ý thôi. Tức là lúc trước form lấy dữ liệu từ table hoặc query. Nhưng nay dùng câu lệnh SQL và hàm kết nối rồi thì trong file access của mình làm gì còn table và query nào nữa đâu, data ở 1 nơi xa xôi nào rồi mà
    Hi hi, hì hục cả buổi sáng cuối cùng cũng ra, rất đơn giản nhưng lại không để ý.
    set Me.Form.Recordset = rst

    Nhưng giờ mình muốn tạo 1 subform bên trong mainform thì chưa biết gán thuộc tính cho subform như thế nào (thuộc tính source object trong subform đang để trống và muốn được gán bằng rst)
    Thanks u
     
    Chỉnh sửa cuối: 13/8/08
  18. phatnq2002

    phatnq2002 Tích cực giảm cân... Hội viên mới

    Ðề: Kết nối SQL server với Access

    Về nguyên lý thì có vẻ được vì sourceobject của một sub có thể là một table hoặc query. Tuy nhiên để gán 1 recordset thì tôi chưa làm bao giờ. Bạn thử đi, nếu không được thì ta sẽ nguyên cứu tiếp.

    Thường thì tôi tạo Access Project rồi cho kết nối đến SQL luôn.
     
  19. behattieu

    behattieu Member Hội viên mới

    Ðề: Kết nối SQL server với Access

    HÌnh như source object chỉ có query hoặc form thôi.
    Bây giờ mình kiểm tra lại thấy phát sinh 1 vấn đề: Đó là form có thể hiện thị dữ liệu nhưng lại không cho chỉnh dữ liệu, thế mới ác chứ. Bạn có cách nào để Edit được dữ liệu không ? Chưa kể việc khi đã Edit được rồi thì lại phải update vào dữ liệu.
    Bạn có 1 sample về ADP (access+SLQ2000) không, cho mình tham khảo với
     
    Chỉnh sửa cuối: 13/8/08
  20. muontennguoi

    muontennguoi Member Thành viên BQT Super Moderators

    Ðề: Kết nối SQL server với Access

    DO bạn học Access theo kiểu WYSIWYG nên bay giờ viết code thì bạn lúng túng.
    Có lẽ nên đổi cách học.
    Học qua mạng thì làm sao cầm tay mà chỉ được.

    Thay vì trong cửa sổ design bạn click chọn ở khung property, hãy ghi lệnh trong code.

    Vấn đề khác, giống như Diễn đàn này, khi bạn gửi bài mới thì chương trình sẽ dùng lệnh để insert vào data. Hiển nhiên lúc đó trang newpost trên server sẽ mở data và insert vào. Nếu bạn sửa bài cũ thì nó sẽ dùng lệnh update.
    Ừ thì nó cũng có khác đôi chút.
    Vì nếu bạn dùng Access mở file trong mạng nội bộ thì có thể dùng DAO hoặc ADO.DB còn qua internet thì thường dùng OLE.DB
    Dùng phần mềm connect data nào thì nguyên tắc cũng như nhau: thông qua ba đối tượng hoặc là Connection Object hoặc Command Object hoặc Recordset Object.

    Thông thường người ta dùng Recordset Object để xem, Command Object để thực hiện các lệnh thêm xoá sửa và Connection Object để mở data từ xa.
    Tuy nhiên, người dùng theo cách WYSIWYG thường dùng Recordset Object để xem và cả thêm xoá sửa. Và hành động click mở file Access cũng tương đương với dùng Connection Object để mở data.mdb đó.
    Chẳng hạn chính behattieu đã có kinh nghiệm này, lúc trước mở form lên vừa xem vừa xoá sửa luôn trên đó.
    Không cần nhớ là phải connect data rồi phải insert, update ...

    Hi. Bây giờ muốn làm thế cũng vẫn được như thường. Chỉ khác là không tự động theo mặc định mà viết code.
    Mở data bằng Connection Object như bài trước anh Phật đã chỉ.
    Sau đó mở Recordset Object với thuộc tính thích hợp để cho phép thêm xoá sửa. Sau khi xoá sửa thì UpdateBath vì lúc đó bạn chỉ mới sửa trên data nháp ở máy của mình mà thôi, chưa thực sự sửa gì trên data gốc nằm ở máy khác cả. UpdateBath sẽ thực sự sửa trên máy chủ cho giống bản nháp trên máy của bạn.

    Hiển nhiên với cách ập cả file lên máy chủ như thế thì chỉ dùng được trong mạng nội bộ. Không dùng trên internet được.
    Trên internet chỉ update từng record thôi.

    Dông dài như vậy để bạn lưu ý xu thế .net hiện nay. Nên thiết kế theo hướng đó.
    Nên tập tành làm web ngay từ bây giờ. Vì nó cũng vẫn dùng cho mạng nội bộ được.

    ..giải lao ...chút nữa viết tiếp..
     
    Chỉnh sửa cuối: 13/8/08

Chia sẻ trang này

XenForo Add-ons by Brivium ™ © 2012-2013 Brivium LLC.