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 則留言:

Unknown 提到...

在網路上搜尋 均無解答 是否可以請教您 問題出在哪裡??? 如何解決???
匯出的 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 中開啟
在網路上搜尋 均無解答 是否可以請教您 問題出在哪裡??? 如何解決???

貓老大 提到...

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

Unknown 提到...

貓老大,

收到回郵, 太感謝了,

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

貓老大 提到...

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

Unknown 提到...


最後有 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

貓老大 提到...

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

Unknown 提到...

將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 轉成到新的平台上, 如果完全重頭設計, 會有諸多遺漏與盲點, 錯誤機率太高了!!!