Link một bảng *.dbf vào Access

Thảo luận trong 'Ứng dụng Access' bắt đầu bởi Đào Việt Cường, 24 Tháng mười một 2005.

6,617 lượt xem

  1. Đào Việt Cường

    Đào Việt Cường Moderator

    Bài viết:
    400
    Đã được thích:
    3
    Giới tính:
    Nam
    Nơi ở:
    Khánh Hòa
    Dear all,
    --------
    Tôi có một thắc mắc nhỏ xin được chỉ dẫn:
    MS Access (MSA) có khả năng liên kết một bảng tính trên Excel và làm việc với nó như một Data table.
    Thắc mắc của tôi là:
    - Liệu có thể làm được như thế đối với một *.dbf (bảng cơ sở dữ liệu Foxpro)?
    - Để thực hiện được thì cần cải đặt bổ sung OLE DB provider nào?
    Nói thêm:
    - Trong MS Excel tôi thấy OLE DB provider for visual foxpro nhưng trong MSA không thấy provider này
    - Nếu sử dụng VBA, chúng ta có thể truy cập thông qua đối tượng Recodeset, nhưng đó là "visual table" chỉ dành riêng cho người lập trình. Theo tính chất công việc, tôi muốn có một bảng tương tự như một link table từ MS Excel có được không?
    Rất mong mọi người giúp đỡ!
     
    #1
  2. hai2hai

    hai2hai VNUNI Makes a difference

    Bài viết:
    2,012
    Đã được thích:
    128
    Nơi ở:
    Hà nội
    Chắc là phải có Visual Foxpro ODBC Driver
    Bạn thử vào http://msdn.microsoft.com/vfoxpro/downloads
    Sau đó bạn chọn Product Updates, rồi chọn Visual FoxPro ODBC Driver để update VFP ODBC Driver.

    Sau đó, bạn có thể tạo ra 1 User Data Sources và từ Access có thể link với data source đó.

    Cường thử làm nhé.

    P/S:
    1 chút về Connection String liên quan đến Visual Foxpro (Tuy là 1 chút nhưng nói chung là chẳng còn cái gì khác nữa đâu)

    ODBC Driver For Visual FoxPro

    With a database container:
    oConn.Open "Driver={Microsoft Visual FoxPro Driver};" & _
    "SourceType=DBC;" & _
    "SourceDB=c:\somepath\mySourceDb.dbc;" & _
    "Exclusive=No;"


    Without a database container (Free Table Directory):
    oConn.Open "Driver={Microsoft Visual FoxPro Driver};" & _
    "SourceType=DBF;" & _
    "SourceDB=c:\somepath\mySourceDbFolder;" & _
    "Exclusive=No;"

    For more information, see: Visual FoxPro ODBC Driver and Q165492

    OLE DB Provider For Visual FoxPro

    oConn.Open "Provider=vfpoledb;" & _
    "Data Source=.\MyDB.dbc;"

    For more information, see: Microsoft OLE DB Provider for Visual FoxPro

    Hope that helps!
     
    Last edited: 24 Tháng mười một 2005
    #2
  3. paulsteigel

    paulsteigel Thành viên thân thiết

    Bài viết:
    103
    Đã được thích:
    0
    Nơi ở:
    Hoà Bình
    Bạn Cường thân!
    Bạn có thể làm thế với bảng dbf của Foxpro, tuy nhiên phải dùng đến ODBC mất rồi.
    Nếu bạn đã biết cách dùng VBA để tạo Link thì đây là kết nối đến một bảng dbf của Foxpro trong thuộc tính Connect của bảng liên kết.

    ODBC;DSN=Visual FoxPro Tables;SourceDB=d:\Documents and Settings\Paulsteigel\Desktop\Gfa\Db;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;

    Nhưng, có điểm là bạn không thế sửa đổi dữ liệu dbf được mà chỉ có thể đọc được mà thôi với dạng kết nối như trên trong access.
    Để ghi được thì hiện tại tôi chưa tìm được cách hợp lý. Tôi sẽ trả lời sau khi nghiên cứu xong ... hihi
    Thông thường, tôi chỉ dùng cách thế này để làm việc với bảng Fox, rất ít khi làm việc với Link....
    Public Sub OpenFoxProTable()

    Dim dbsFox As Database
    Dim rstAccounts As Recordset

    ' Open an external FoxPro database.
    Set dbsFox = OpenDatabase ("\\FoxPro\Data\AP", False, False, "FoxPro 2.0;")

    ' Create a Recordset object from
    ' the Accounts table.
    Set rstAccounts = dbsFox.OpenRecordset("Accounts")
    End Sub
     
    Last edited: 24 Tháng mười một 2005
    #3
  4. Đào Việt Cường

    Đào Việt Cường Moderator

    Bài viết:
    400
    Đã được thích:
    3
    Giới tính:
    Nam
    Nơi ở:
    Khánh Hòa
    Dear... hai bác!
    ---------------
    Cám ơn hai bác đã chỉ dẫn. Vậy là bắt buộc phải sử dụng recodeset à? Làm như thế thì không đáp ứng được nhu cầu mất rồi... Em đã thử cài vfpoledb.exe nhưng có lỗi cài đặt (!?). Có bác nào đã cài được provider này thì hướng dẫn em nhé? Tạm thời chắc là đành phải "soạn thảo" vậy!:0frown:
    Cám ơn các bác nhiều nhé!
     
    #4
  5. mysterious_girl

    mysterious_girl Thành viên sơ cấp

    Bài viết:
    358
    Đã được thích:
    1
    Nơi ở:
    ...close to you...
    Sao toàn các mod trao đổi với nhau thế nhỉ? các mems còn chờ gì nữa mà không gửi câu hỏi? Box access đã được lập theo yêu cầu của các mems thế mà ko thấy đưa câu hỏi lên nhỉ????
     
    #5
  6. hai2hai

    hai2hai VNUNI Makes a difference

    Bài viết:
    2,012
    Đã được thích:
    128
    Nơi ở:
    Hà nội
    Phải có Visual Foxpro ODBC Driver
    Bạn thử vào http://msdn.microsoft.com/vfoxpro/downloads
    Sau đó bạn chọn Product Updates, rồi chọn Visual FoxPro ODBC Driver để update VFP ODBC Driver.

    Sau đó, bạn có thể tạo ra 1 User Data Sources và từ Access có thể link với data source đó.
     
    #6
  7. Đào Việt Cường

    Đào Việt Cường Moderator

    Bài viết:
    400
    Đã được thích:
    3
    Giới tính:
    Nam
    Nơi ở:
    Khánh Hòa
    Xin được hỗ trợ chi tiết cài đặt Visual FoxPro ODBC Driver

    Dear hai2hai,
    ------------
    Cám ơn bác, có thể làm được nếu cài Visual FoxPro ODBC Driver hả bác? Em đã download "vfpoledb.exe" và cài nhưng bị báo lỗi, đại loại là "The Windows Installer Service could not be accessed..." (tiện thể hỏi các bác cách post hình của message box này để các bác thấy thì làm thế nào nhỉ?!)
    Em chưa hiểu lỗi do nguồn hay do hệ thống, bác giúp em với nhé!
     
    #7
  8. mysterious_girl

    mysterious_girl Thành viên sơ cấp

    Bài viết:
    358
    Đã được thích:
    1
    Nơi ở:
    ...close to you...
    Theo em nghĩ bây giờ anh đã là mod thì chắc có quyền gửi kèm file. Anh nhìn xuống phía dưới xem anh có quyền gửi kem file ko?Nếu có thì anh tham khảo ở đây .
    Nếu không thì anh hỏi các admin, mod thử xem.
     
    #8
  9. hai2hai

    hai2hai VNUNI Makes a difference

    Bài viết:
    2,012
    Đã được thích:
    128
    Nơi ở:
    Hà nội
    Re 1 - Cài gì?: Download ODBC Driver, Not OLEDB Driver

    Re 2 - Lỗi chạy vfpoledb.exe: Có thể do download file này bị lỗi. Tốt nhất thử dùng 1 phần mềm download như Flashget để down.

    Re 3 - Post hình: Muốn copy current window (msgbox cũng là 1 window) thì bấm Alt + PrtScr, còn muốn chụp cả màn hình thì chỉ bấm PrtScr thôi

    Sau đó, vào ms paint past và save lại dưới dạng jpg hay gif cho nhỏ. Rồi upload lên đâu đó và dùng thẻ để hiển thị ảnh trên wkt.

    Hope that helps!
     
    Last edited: 24 Tháng mười một 2005
    #9
  10. workman

    workman Thành viên sơ cấp

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    Ho Chi Minh
    Cường này,

    Ý kiến của dân không chuyên nhé. Tôi rất hay link các bảng vào Access. Thường có hai loại:

    1. Nếu database trên SQL, ta dùng ODBC
    2. Nếu là DBF, trong Access đã có sẵn công cụ. Bạn không cần cài đặt ODBC đâu.

    Tôi link DBF như thế này: vào New Table/Link Table. Trong cửa số Link, mục File Type bạn chọn "dBase III". Thế là xong.

    Xử lý cũng như đối với một table bình thường thôi. Edit và thêm dòng thoải mái, không có giới hạn gì cả.

    Tôi cũng chưa hiểu tại sao bạn paul lại không edit được dữ liệu. Về nguyên tắc cách của bạn cũng tương tự như cách của tôi, chỉ khác là dùng VBA thôi.
     
    #10
  11. Đào Việt Cường

    Đào Việt Cường Moderator

    Bài viết:
    400
    Đã được thích:
    3
    Giới tính:
    Nam
    Nơi ở:
    Khánh Hòa
    Vẫn chưa được... Xin chỉ dẫn thêm lần nữa!

    Dear WorkMan
    -------------
    Cám ơn WorkMan đã đưa ra hướng đáp ứng được yêu cầu. Tôi rất mừng và thử ngay... nhưng mà không được (?!). Tôi chưa hiểu lắm về dBase nhưng thấy *.dbf nên cũng đoán là for Visual Foxpro. Trước khi đưa ra thắc mắc này tôi đã thử rất nhiều lần, và cho đến cả sau khi WorkMan chỉ dẫn tôi thử lại vẫn chỉ nhận được thông báo "External table is not in the expected format". Liệu có thể nào *.dbf của tôi là một table "đểu" mà NSX đánh lừa kẻ tọc mạch như tôi không nhỉ(!?). Làm thế nào để biết đó là một *.dbf đích thực? (Tôi đã dùng lệnh Brow và và modify bảng này bình thường, import vào excel cũng được nên đoán chắc nó vẫn là đồ "sịn")
    Vui lòng chỉ dẫn giúp, và phải làm như thế nào để "êm" như WorkMan?
    Thanks
     
    Last edited: 25 Tháng mười một 2005
    #11
  12. workman

    workman Thành viên sơ cấp

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    Ho Chi Minh
    To Cường

    Tôi giả định là bạn đã thấy DBase III trong danh sách "File Type". Thế thì hơi lạ. Nếu bạn không ngại thì gửi cho tôi cái dbf của bạn (đương nhiên đã delete bớt dòng và xóa những dữ liệu nhạy cảm) vào email workmanvn@gmail.com. Tôi phải xem cụ thể mới trả lời được.
     
    #12
  13. paulsteigel

    paulsteigel Thành viên thân thiết

    Bài viết:
    103
    Đã được thích:
    0
    Nơi ở:
    Hoà Bình
    Tôi xin trả lời thế này vậy!
    Về nguyên tắc thì có thể cho phép thành lập một link kiểu đó vào Access và bạn có thể sửa chữa được dữ liệu. Tuy nhiên, chúng ta cần hiểu một vấn đề như thế này:
    Tập tin dbf là tập tin dữ liệu của Dbase, foxbase Foxpro .. và để tôn trọng khả năng độc lập phát triển thì MS Access có vẻ như không được thiết kế khả năng sửa chữa các bảng dữ liệu liên kết đến các cơ sở dữ liệu khác không phải mdb một cách trực tiếp. Tất nhiên bạn có thể thấy rõ nếu bạn cũng làm liên kết từ access đến Excel.
    Ban cung co the cai Borland Database Engine tai day de lien ket voi dbase nhe
    http://info.borland.com/devsupport/bde/bdeupdate.html
    Mot so noi dung cua Linking trong access cung co the tim thay o day
    http://msdn.microsoft.com/library/d...DataSourcesMicrosoftAccessCanImportOrLink.asp
    Tuy nhiên, bạn cũng có thể sửa chữa nếu không dùng tính năng liên kết của Access. Đoạn mã kết nối mà tôi đăng trước đây là đoạn mã nằm trong thuộc tính Connect của liên kết chứ không phải là đoạn mã kết nối của VBA. Thủ tục mà tôi gửi ở cuối chính là một cách để bạn làm việc với dữ liệu dbf trong VB nói chung và ở đó bạn hoàn toàn có thể sửa chữa bản ghi.
    Tôi đề xuất một cách mà nhiều người vẫn làm là tạo một liên kết để thực thi các lệnh truy vấn đọc vào một bảng có cấu trúc giống hệt trong access.
    Sau khi hoàn tất thao tác thì mở file dbf bằng VB và cập nhật nội dung từ bảng vừa rồi của bạn. Như thế dbengine sẽ đảm bảo được tính nhất quán của dữ liệu.
    XIn cảm ơn.
     
    Last edited: 26 Tháng mười một 2005
    #13

Chia sẻ trang này