Lấy dữ liệu Foxpro

Chia sẻ bởi:hands
★★★★★
Quảng cáo

Chào các anh chị, mình cần lấy dữ liệu từ phần mềm kế toán foxpro ra Excel bằng cách Import, để khi dữ liệu thay đổi thì refresh sẽ có dữ liệu cập nhật.
Dữ liệu foxpro ở dạng thư mục, được nén trong file kèm theo, trong file CT.dbf.
Mình đã thử đủ các kiểu dùng Power Query, ODBC, A-Tools của anh Tuân nhưng vẫn chưa được, nên đành post lên đây nhờ sự trợ giúp của cộng đồng GPE.

Trân trọng cảm ơn!

Cái này cũ quá rồi, bạn dùng power query connect thông qua query OLE DB, sau đó nhập connectString như vầy, Data source thì là folder chứa file, tuy nhiên cái bảng DBF của foxpro phải convert về dạng foxplus mới connect được
ví dụ query trong foxpro:
use table
copy to d:File.dbf type foxplus
Tôi đang dùng office 365, nên bạn tìm cái Microsoft.ACE.OLEDB phù hợp với phiên bản office của bạn
2150

www.giaiphapexcel.com/diendan/threads/l%E1%BA%A5y-d%E1%BB%AF-li%E1%BB%87u-foxpro.159413/#post-1060947

Nếu Power Query cài thêm Visual FoxPro OLE DB Provider là được.

= OleDb.DataSource("Provider=vfpoledb;

Mấy cái này code Python thì lèo cái xong. Xuất thành thư viện cho VBA rồi sau chỉ ấn cái là xong việc. :p

2151

– Theo tôi biết thì cái VFP ODBC driver nó không còn hỗ trợ nữa nên chuyển sang dùng OLEDB.
– Vô đây download cái driver OLEDB cho FoxPro (VfpOleDB.dll): github.com/VFPX/VFP9SP2Hotfix3/blob/master/VFPOLEDBSetup.msi
hoặc tải thẳng từ trang của Microsoft: www.microsoft.com/en-us/download/details.aspx?id=32602
– Cài xong thì đăng ký nó: nhớ chạy CMD với quyền Administrator.
regsvr32 /s "C:Program Files (x86)Common Filessystemole dbvfpoledb.dll
– Dùng ADODB kết nối lấy dữ liệu thôi.

Sub getDataFoxpro()

Dim sConnectString, oRS, oConn, sSQL
    sConnectString = "Provider=VFPOLEDB;Data Source=C:Temp2021ACT.dbf;"
    Set oConn = CreateObject("ADODB.Connection")
    oConn.ConnectionString = sConnectString
    oConn.ConnectionTimeout = 30
    oConn.Open
    sSQL = "select * from CT"
    Set oRS = oConn.Execute(sSQL)
    If oRS.EOF Then
        oRS.Close
        oConn.Close
        Set oRS = Nothing
        Set oConn = Nothing
    End If

Do While Not oRS.EOF
        Debug.Print oRS.Fields("ong_ba").Value & " - " & _
                       oRS.Fields("dia_chi").Value & vbCrLf
        oRS.MoveNext
    Loop

oRS.Close
    oConn.Close
    Set oRS = Nothing
    Set oConn = Nothing

End Sub

– Cài xong thì đăng ký nó: nhớ chạy CMD với quyền Administrator.

Tôi thử trên office 64 bít ko sử dụng được

Cái Provider cho Visual Foxpro (vfpoledb.dll) đã lâu lắm rồi, không có hỗ trợ cho Office 64 bit nhe. Còn không muốn phụ thuộc Office thì cứ Python mà đọc thôi, nó có quá trời thư viện hỗ trợ đọc DBF.

có 1 vài cái mà tôi quan tâm Foxpro một chút đó là

1/ Hiện tại còn nhiều cty vẫn sử dụng phần mềm kế toán viết trên FoxPro
2/ tôi có quen 1 cty chuyên làm dịch vụ kế toán lớn cũng sử dụng phần mềm kế toán viết trên FoxPro mà hàng năm nếu có vấn đề gì phát sinh họ vẫn bảo trì
3/ mặc dù nó rất cổ nhưng hiện tại đâu đó vẫn còn sử dụng ….
….
Vì vậy tôi quan tâm 1 chút muốn bảo tồn nó nếu cần thiết sau này chuyển qua Tools khác ta có thể lấy dữ liệu trước đó tham khảo vào Excel …. xong tùy xử lý nó ….
….
Tôi mới phát hiện ra

1/ không cần thiết cài đặt Driver của FoxPro Hoặc File VFPOLEDBSetup.msi
2/ vẫn sử dụng tốt trên Office 64 bit
3/ chỉ cần VB6 cổ điển cũng viết tốt rồi ….
4/ Code thì tôi copy y trang code bài số 7 thử thôi …. ko phải là ko biết viết mà lười chút … Copy cho nhanh
5/ tại ta chưa biết thực hiện đúng cách …. hay lách nó mà thôi
6/ xem hình trong cài đặt của tôi ko có sự hiển diện của Fox Pro
xem video
E_xNP1TOjhI
[URL='youtu.be/E_xNP1TOjhI']Liên kết: youtu.be/E_xNP1TOjhI

😀 kiểu gì thì cũng phải cần thêm thư viện bên ngoài thôi.

Kỹ năng giải quyết vấn đề hiệu quả
Khóa học SprinGO phù hợp

Kỹ năng giải quyết vấn đề hiệu quả

Mô tả Nội dung Đánh giá Tài nguyên KỸ NĂNG GIẢI QUYẾT VẤN ĐỀ HIỆU QUẢHiểu đúng vấn đề là một nửa của giải...

Xem khóa học
★★★★★ 5 ★ 1 👤 2 ▥ 0
Quảng cáo

Bạn nên đọc

2 Responses

  1. hands says:

    Thảo luận quá trời mà chưa đưa file, đây là file xử lý lấy dữ liệu Foxpro chạy trong Excel 64bit đây. (Đính kèm bên dưới)
    2154

    1. Chạy file (Run as Administrator) để đăng ý cái Driver FoxPro OLED (vfpoledb.dll).
    2. Kéo thả file vào file để tiến hành đăng ký cái phiên làm việc trung gian này (viết trên VB6).
    3. Mở file Excel , vào màn hình code -> Tool – Reference -> Tìm và bấm chọn thư viện "FoxProDbConnection" ->OK

    thật tuyệt vời, cách này lấy được dữ liệu không giới hạn bản ghi

    Vì Excel không có hàm truy vấn bằng SQL mà chỉ có một vài hàm mảng động như FILTER, nó không toàn diện và năng động như sử dụng truy vấn SQL. Nên nếu cũng làm được hàm truy vấn dữ liệu SQL, lấy dữ liệu Excel, kết quả trả về hàm mảng động như với Foxpro thế thì tuyệt vời.

    Muốn lấy dữ liệu nguồn từ Excel bằng câu lệnh truy vấn SQL thì chỉ đơn giản dùng ADODB để kết nối và truy vấn thôi.
    2160

  2. hands says:

    Dữ liệu PDF thì em lấy được rồi, cảm ơn anh Tuân và GPE. Vì xem trong clip ví dụ của anh Tuân với dữ liệu Foxpro trong Excel 365 thì kết quả được trả về ở dạng hàm mảng động mới rất hay.

    2158

    Nhưng em thử với dữ liệu Excel (đã thay connection string) thì không được, chỉ trả về số 0 thôi.
    2157

    Vì Excel không có hàm truy vấn bằng SQL mà chỉ có một vài hàm mảng động như FILTER, nó không toàn diện và năng động như sử dụng truy vấn SQL. Nên nếu cũng làm được hàm truy vấn dữ liệu SQL, lấy dữ liệu Excel, kết quả trả về hàm mảng động như với Foxpro thế thì tuyệt vời.

    Em gửi file dữ liệu TEMP em đã test không được để anh có thể check giúp nhé !

    chủ đề này lấy File DBF thì tôi ko quan tâm nữa vì thấy bạn hỏi lấy dữ liệu khác thì tôi giới thiệu cho bạn 1 Thư viện hàm miễn phí và hơn thế nữa nếu tôi thích thêm các chuỗi kết nối khác vào mà FireDAC trên Delphi nó hổ trợ là xong thôi

    1/ Vào link sau tải tất cả các File đó về
    github.com/KieuManh366377/FireMySQL

    2/ Copy code sau vào Worksheet

    Private Sub Worksheet_Change(ByVal Target As Range)
        On Error GoTo Next_Error
        Static Fso  As New FileSystemObject
        Dim DbPath As String, SQL As String, HDR As Boolean
        DbPath = Range("B1").Value
        SQL = Range("B2").Value
        HDR = Range("B3").Value
        Rem ==========
        If Not Fso Is Nothing Then Set Fso = New FileSystemObject
        If Fso.FileExists(DbPath) = False Then Exit Sub
        Rem ==========
        If Target.Address = "$B$2" Or Target.Address = "$B$3" Then
            Range("A5:CE65536").ClearContents
            Call GetSQLDataBaseA(DbPath, SQL, [A5], HDR)
        End If
        Exit Sub
    Next_Error:
        Rem If Err Then MsgBox Err.Number & vbLf & Err.Description: Err.Clear
    End Sub
    Rem ==========
    Private Sub ComboBox1_Change()
        Range("B2").Value = "select * from " & ComboBox1.Text
    End Sub
    Rem ==========
    Private Sub SelectFile_Click()
        Dim aPath As Variant
        Dim Arr As Variant
        Dim i As Long
        Dim sArr() As String
        aPath = SelectFilesDialogA()
        Range("B1").Value = aPath
        Rem =========
        Arr = ListTableNamesA(aPath)
        sArr = Split(Arr, vbLf)
        ActiveSheet.ComboBox1.Clear
        Rem ========= Cach 2
        For i = LBound(sArr) To UBound(sArr) - 1
           Rem Debug.Print sArr(i)
           ActiveSheet.ComboBox1.AddItem sArr(i)
        Next
    End Sub

    3/ Vào linhk sau tham khảo thêm cách tổng hợp tất cả các Sheet + TableName trong 1 File lên Sheet
    http://www.giaiphapexcel.com/diendan/threads/t%E1%BB%95ng-h%E1%BB%A3p-g%E1%BB%99p-nhi%E1%BB%81u-sheet-trong-1-file-%C3%81p-d%E1%BB%A5ng-cho-excel-access-sqlite.159404/

    4/ Lấy dữ liệu Ms Server cách sử dụng tương tự
    5/ nếu Rảnh tôi sẻ thêm CSDL FoxPro vào nữa … chức năng tương tự như trên

    ….
    ….
    Nếu bạn đang sử dụng Office 365 thì mấy hàm công thức Mảng ko thể xóa được của bất cứ ai nên từng bước bỏ đi vì nó nặng và ì ạch lắm

    VD: hãy thử lấy 10 Sheet mỗi Sheet có vùng dữ liệu 1048000 dòng x 50 cột là nó chết đơ và thoát ngay lập tức … ko tin thử xem

    Xem video cách sử dụng Hàm
    1/ nhấn nút chọn File Excel – Access – SQLtie
    2/ nhấn ComboBox1 chọn Sheetname Or TableName
    3/ Tùy chỉnh SQL và Tiêu đề …
    CKmtYfmUtCw
    [URL='youtu.be/CKmtYfmUtCw']Liên kết: youtu.be/CKmtYfmUtCw

    Thưởng thức Thư viện miễn phí … và tùy chỉnh phấn phối lại nếu bạn thích $

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm