這是一個園長學習VFP(Visual Foxpro)的Blog歡迎同好一起來參與

星期六, 4月 10, 2010

匯入ACCESS資料表到VFP

VFP內建可以匯入如CSV,TXT,XLS等格式,但並無提供匯入ACCESS資料表的功能
這裏提供匯入的方式給各位參考:

*檢查是否為 合法之 mdb 檔案
lcMDBName=Substr(imp_mdb,Rat('\',imp_mdb)+1,Len(imp_mdb)-Rat('\',imp_mdb))    && a:\abcde\xxx.mdb
lcMDBDir=Substr(imp_mdb,1,Rat('\',imp_mdb))
*
wpt='50'
wbuf='2048'

*vista相容
lcCnStr =;
    'DRIVER=Microsoft Access Driver (*.mdb);'+;
    'UID=admin;'+;
    'UserCommitSync=Yes;'+;
    'Threads=3;'+;
    'SafeTransactions=0;'+;
    'PageTimeout=5;'+;
    'MaxScanRows=8;'+;
    'MaxBufferSize=2048;'+;
    'FIL=MS Access;'+;
    'DriverId=281;'+;
    'DefaultDir='+Substr(imp_mdb,1,Rat('\',imp_mdb))+';'+;
    'DBQ='+Substr(imp_mdb,Rat('\',imp_mdb)+1,Len(imp_mdb)-Rat('\',imp_mdb))
*
*WAIT lcCnStr windows

nCon = Sqlstringconnect( lcCnStr )
If nCon<0    &&連線失敗
    =chk_err("不是正確的來源檔(*.mdb)")
    Return .F.
Endif
*
SQLTables( nCon, ['TABLE'], 'MDB_Tables' )    &&取出資料表到 MDB_Tables

經過以上的動作,即可把MDB裏的資料表抓到VFP使用

2 則留言:

yehmy 提到...

=====================
謝謝分享程式碼
請問 我 IMPORT 後 , MDB_Tables grid 中有 85 lines ,
5 COLUMNS
1.Table_cat 為 Memo
2.Table_scheme 為 .NULL.
3.Table_name 正確
4.Table_type 為 TABLE
5.Remark 為 .NULL.

1.Table_cat 為何是 Memo ?
2.Table_scheme 為何是 .NULL.?

==================
*檢查是否為 合法之 mdb 檔案
lcMDBName=Substr("C:\Program

Files\EZHIS\Bin\DrBack.mdb",Rat('\',"C:\Program

Files\EZHIS\Bin\DrBack.mdb")+1,Len("C:\Program

Files\EZHIS\Bin\DrBack.mdb")-Rat('\',"C:\Program

Files\EZHIS\Bin\DrBack.mdb")) && a:\abcde\xxx.mdb
lcMDBDir=Substr("C:\Program

Files\EZHIS\Bin\DrBack.mdb",1,Rat('\',"C:\Program

Files\EZHIS\Bin\DrBack.mdb"))
*
wpt='50'
wbuf='2048'

*vista相容
lcCnStr =;
'DRIVER=Microsoft Access Driver (*.mdb);'+;
'UID=admin;'+;
'UserCommitSync=Yes;'+;
'Threads=3;'+;
'SafeTransactions=0;'+;
'PageTimeout=5;'+;
'MaxScanRows=8;'+;
'MaxBufferSize=2048;'+;
'FIL=MS Access;'+;
'DriverId=281;'+;
'DefaultDir='+Substr("C:\Program

Files\EZHIS\Bin\DrBack.mdb",1,Rat('\',"C:\Program

Files\EZHIS\Bin\DrBack.mdb"))+';'+;
'DBQ='+Substr("C:\Program

Files\EZHIS\Bin\DrBack.mdb",Rat('\',"C:\Program

Files\EZHIS\Bin\DrBack.mdb")+1,Len("C:\Program

Files\EZHIS\Bin\DrBack.mdb")-Rat('\',"C:\Program

Files\EZHIS\Bin\DrBack.mdb"))
*
*WAIT lcCnStr windows

nCon = Sqlstringconnect( lcCnStr )
If nCon<0 &&連線失敗
=chk_err("不是正確的來源檔(*.mdb)")
Return .F.
Endif
*
SQLTables( nCon, ['TABLE'], 'MDB_Tables' ) &&取出資

料表到 MDB_Tables

GREEN 提到...

您好:
因為您未說明您匯入的ACCESS DB是何版本,
所以我只能建議您將該ACCESS DB另存為
ACCESS 2000的DB格式,再使用本程式試看看囉