|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
syntech
註冊時間: 2003-05-16 文章: 4214 來自: Taipei,Taiwan
第 1 樓
|
發表於: 星期六 十月 17, 2020 10:45 pm 文章主題: 把資料夾中的所有DBF 表格上移到 MS SQL |
|
|
在 SQL SERVER 2000 及 SQL SERVER 2012 測試,VFP 6 用 ,
如果改為其他版本,記得修改 AFIELDS[]的元素指標.
VFP 6 AFIELDS 是16 COLUMN,
VFP 9 AFIELDS 是18 COLUMN,
應該不含索引部分,需要請自行加入
取自:https://vdocuments.mx/building-a-visual-foxpro-application-for-sql-server.html
"BUILDING A VISUAL FOXPRO APPLICATION FOR SQL SERVER"
代碼: |
* Purpose....: Creates a duplicate of each DBF
* : from your data directory in SQL Server
* and copies the DBF’s records to the SQL table.
* The program puts brackets around named reserved words.
* If you get an error indicating illegal use of a reserved word, add it here:
SET TALK OFF
CLEAR
CLOSE ALL
SET STRICTDATE TO 0
SET SAFETY OFF
SET EXCLUSIVE ON
SET DATE YMD
SET CENTURY ON
SET CONFIRM ON
CLOSE TABLE ALL
CLOSE DATABASE ALL
ConnStr = [Driver={SQL Server};Server=(local);UID=SA;PWD=;Database=MyDataBase;] && 這裡要修改成你的情況
Handle = SQLSTRINGCONNECT( ConnStr )
IF Handle < 1
MESSAGEBOX( '無法連接 SQL' + CHR(13) + ConnStr, 16 )
RETURN
ENDIF
ReservedWords = [,DESC,DATE,RESERVED,PRINT,ID,VIEW,BY,DEFAULT,CURRENT,KEY,ORDER,CHECK,FROM,TO,]
DataPath = GETDIR("請選擇 DBF 所在資料夾?")
IF LASTKEY() = 27 && Escape was pressed
RETURN
ENDIF
IF NOT EMPTY ( DataPath )
SET PATH TO &DataPath
ENDIF
ADIR( laDBFS, ( DataPath + [*.DBF] ) )
ASORT(laDBFS,1)
* Load each of the tables to SQL
FOR I = 1 TO ALEN(laDBFS,1)
USE ( laDBFS(I,1))
_VFP.Caption = "載入表格 " + ALIAS()
LoadOneTable()
ENDFOR
SQLDISCONNECT(0)
CLOSE TABLE ALL
CLOSE DATABASE ALL
_VFP.Caption = [完成]
* ===============================
PROCEDURE LoadOneTable
LOCAL I
cRecCount = TRANSFORM(RECCOUNT())
cmd = [DROP TABLE ] +ALIAS()
SQLEXEC( Handle, Cmd )
* Skip tables we don't want to load
IF ALIAS() $ [COREMETA/DBCXREG/SDTMETA/SDTUSER/FOXUSER/]
* skip system tables, add yours here.
? [Skipping ] +ALIAS()
RETURN
ENDIF
CreateTable(SYSNAME) && see below
SCAN
WAIT WINDOW [Loading record ] + TRANSFORM(RECNO()) + [/] + cRecCount NOWAIT
Cmd = [INSERT INTO ] + [ VALUES ( ]
FOR I = 1 TO FCOUNT()
fld = FIELD(I)
IF TYPE(Fld) = [G]
LOOP
ENDIF
dta = &Fld
typ = VARTYPE(dta)
cdta = ALLTRIM(TRANSFORM(dta))
cdta = CHRTRAN ( cdta, CHR(39),CHR(146) ) && remove any single quotes
DO CASE
CASE Typ $ [CM]
Cmd = Cmd + ['] + cDta + ['] + [, ]
CASE Typ $ [IN]
Cmd = Cmd + cDta + [, ]
CASE Typ = [D]
IF cDta = [/ /]
cDta = []
ENDIF
Cmd = Cmd + ['] + cDta + ['] + [, ]
CASE Typ = [T]
IF cDta = [/ /] or cDta = [/ / : :]
cDta = []
ENDIF
Cmd = Cmd + ['] + cDta + ['] + [, ]
CASE Typ = [L]
Cmd = Cmd + IIF('F'$cdta,[0],[1]) + [, ]
CASE Typ $ [Y]
Cmd = Cmd
ENDCASE
ENDFOR
Cmd = LEFT(Cmd,LEN(cmd)-2) + [ )]
lr = SQLEXEC( Handle, Cmd )
IF lr < 0
? [Error: ] + Cmd
SUSPEND
ENDIF
ENDSCAN
WAIT CLEAR
*=============================
PROCEDURE CreateTable
LOCAL J
Cmd = [CREATE TABLE ] +ALIAS() + [ ( ]
AFIELDS(laFlds)
FOR J = 1 TO ALEN(laFlds,1)
IF laFlds(J,2) = [G]
LOOP
ENDIF
FldName = laFlds(J,1)
IF [,] + FldName + [,] $ ReservedWords
FldName = "[" + FldName + "]"
ENDIF
Cmd = Cmd + FldName + [ ]
DO CASE
CASE laFlds(J,2) = [C]
Cmd = Cmd + [Char(] + TRANSFORM(laFlds(J,3)) ;
+ [) NOT NULL DEFAULT '', ]
CASE laFlds(J,2) = [I]
Cmd = Cmd + [Integer NOT NULL DEFAULT 0, ]
CASE laFlds(J,2) = [M]
Cmd = Cmd + [Text NOT NULL DEFAULT '', ]
CASE laFlds(J,2) = [N]
N = TRANSFORM(laFlds(J,3))
D = TRANSFORM(laFlds(J,4))
Cmd = Cmd + [Numeric(] + N + [,] + D + [) NOT NULL DEFAULT 0, ]
CASE laFlds(J,2) $ [TD]
Cmd = Cmd + [DateTime NOT NULL DEFAULT '', ]
CASE laFlds(J,2) = [L]
Cmd = Cmd + [Bit NOT NULL DEFAULT 0, ]
ENDCASE
ENDFOR
Cmd = LEFT(Cmd,LEN(cmd)-2) + [ )]
lr = SQLEXEC( Handle, Cmd )
IF lr < 0
_ClipText = Cmd
? [無法建立表格 ] + SYSNAME+'_'+ ALIAS()
MESSAGEBOX( Cmd )
SUSPEND
ENDIF
? [新增表格 ] + ALIAS()
ENDPROC
|
_________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
CPS0204
註冊時間: 2014-08-24 文章: 441
第 2 樓
|
發表於: 星期日 十月 18, 2020 2:38 pm 文章主題: |
|
|
此將dbf上移sql程式我也開發過!
但遇到=sqlexec(HANDEL,STR1) ...........當中的STR1長度大於950字元時就會出問題,因為此命令不可大於約950字元
產品基本檔/客戶/廠商基本檔,最容易大於950個字元 |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4214 來自: Taipei,Taiwan
第 3 樓
|
發表於: 星期日 十月 18, 2020 8:33 pm 文章主題: |
|
|
就自己修改了.
前幾天我搜尋一下本站,
發現就沒有 M$ SQL的,
應該是大家都有自己的版本,
所以上網GOOGLE 一個基本版的
VFP 內建的是 "DBC上移精靈",
不是 "DBF上移精靈"
_________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|