2010年1月18日 星期一

使用 SQL Server 開啟 DBF 檔案

dBase 的 DBF 檔,可以使用 Jet 4.0 開啟
所以可以在 SQL Server 的管理工具中這樣下:(假設你的 DBF 檔是 C:\DBF\ABC.DBF)

SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', 'Data Source=C:\DBF;Extended Properties=dBase III;')...ABC

ABC 前面的三個點不可以省略,因為是 server_name.database_name.schema_name.table_name 四部份名稱中間省略了 database_name 和 schame_name 之後留下的三個點

如果SQL 2005/2008 出現
SQL Server 已封鎖元件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 之存取
這樣的錯誤訊息,請先到
SQL Server 介面區組態 >> 功能的介面區組態 >> 特定遠端查詢
去開啟 啟用 OPENROWSET 與 OPENDATASOURCE 支援之後,就可以執行了

7 則留言:

  1. 在網路上搜尋 均無解答 是否可以請教您 問題出在哪裡??? 如何解決???
    匯出的 dBASE III 檔無法在 dBASE III 中開啟
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    Dim sqls As String
    ''20210410
    'On Error Resume Next
    On Error GoTo ErrorHandler
    If cnn.State = adStateOpen Then cnn.Close
    If rst.State = 1 Then rst.Close
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='dBASE III;HDR=NO;IMEX=2';Data Source=" & "D:\AICUSTOMS-應收費用ACT帳單檔"
    If cnn.State = adStateOpen Then
    sqls = ""
    sqls = "select MAWB, HAWB from[ACCINOPM$] where MAWB = '" & MAWB_NO & "' AND HAWB = '" & HAWB_NO & "'"
    sqls = sqls + " AND INVOICENO = '" & M_INVOICENO & "' AND DBISSUE = 'Y'"
    rst.Open sqls, cnn, 1, 1
    If Not rst Is Nothing Then
    ''新增
    sqls = ""
    sqls = "insert into [ACCINOPM$] (MAWB, HAWB, ACCNO,APPDATE, ACCDATE, DPT, INVOICENO)"
    sqls = sqls + " values ('" & MAWB_NO & "','" & HAWB_NO & "','" & M_ACCNO & "'"
    sqls = sqls + ",'" & M_APPDATE & "','" & M_DATE & "','" & M_DPT & "','" & M_INVOICENO & "')"
    cnn.Execute sqls
    End If
    Else
    MsgBox "Connection was not created!", vbCritical, "Connection error"
    End If
    匯出的 dBASE III 檔無法在 dBASE III 中開啟
    在網路上搜尋 均無解答 是否可以請教您 問題出在哪裡??? 如何解決???

    回覆刪除
  2. 試著去掉 connection string 裡的 "HDR=NO;IMEX=2"
    或是把檔名改成 8.3 形式
    有點好奇,這年頭還有人使用 dBase III 嗎?DOS 的軟體耶

    回覆刪除
  3. 貓老大,

    收到回郵, 太感謝了,

    1. 原connection string 裡 沒有 "HDR=NO;IMEX=2" 後加上它 是試試看 能否解決 問題
    2. sql匯入dBASEIII 檔案; dBASE無法開啟dBASEIII 檔案;
    唯一方法 是用 DBU software 開啟 dBASEIII 檔案;再將最後一個record最後一個FIELD/COLUMN的最後一字成重新打一次,
    3. sql匯入的dBASEIII 檔案; Dbase 就可以開啟檔案;

    4. 使用 dBase III 嗎 & DOS 的軟體, 因為系統 是 novell file server, software is clipper program

    5. 一直希望 找到高手 將整個系統 改成 VM 架構 或 改成 PYTHON 架構

    THANKS A LOT,

    B. RGDS.,
    ROBERT CHEN

    回覆刪除
  4. 我留意到了你最後沒有 conn.close,不知是否是這個原因,導致關檔不完全
    現有的 Clipper 的系統年代久遠了,要找到能改版的人不是很容易啊,原軟體廠商沒有新的版本嗎?

    回覆刪除

  5. 最後有 conn.close, 如下:
    If cnn.State = adStateOpen Then cnn.Close
    Set cnn = Nothing
    If rst.State = 1 Then rst.Close
    Set rst = Nothing
    Clipper 系統,是我們自己開發的, 開發人員老了,

    ROBERT CHEN

    回覆刪除
  6. 我以前也寫過 Clipper,如果願意談談系統改版的事情,請發郵件給我,或到用臉書發訊息給我。
    謝謝!

    回覆刪除
  7. 將DOS CLIPPER5系統 轉換 改成 PYTHON 架構
    因為 Clipper Program系統太好用了, 都是小模塊組成, 模塊改成PYTHON=>將ENDIF 移除>將IF 後加 ; 號
    例如改成 PYTHON 案例:
    Clipper code:
    if upper(m_att)='A'
    if !add_rec(5)
    stderrmsg("Append failure!",1)
    return
    endif
    endif

    Python code:
    if upper(m_att)='A';
    if !add_rec(5)
    stderrmsg("Append failure!",1)
    return

    因為 Clipper Program : 程式上有許多邏輯檢查, 管控點, 必須參照 Clipper Procedure Source, 將一個一個Function 轉成到新的平台上, 如果完全重頭設計, 會有諸多遺漏與盲點, 錯誤機率太高了!!!

    回覆刪除