|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
goto-dream
註冊時間: 2004-05-11 文章: 909
第 1 樓
|
發表於: 星期三 七月 14, 2004 9:53 pm 文章主題: Firebird-產立資料表的結構 (用在轉換資料庫上) |
|
|
用途產立資料表的結構
代碼: | #DEFINE CR CHR(13)
#DEFINE TABB CHR(9)
LPARAMETERS tcAlias
LOCAL lcOut, lnF, lcField, lcType, lnLen, lnDec, ln8Len, lcFile, lnCnt, aa[1]
IF NOT EMPTY(tcAlias)
SELECT (tcAlias)
ENDIF
lcOut = ""
lnF = AFIELDS(aa)
FOR lnCnt = 1 TO lnF
lcField = LOWER(aa[lnCnt, 1])
lcType = aa[lnCnt, 2]
lnLen = aa[lnCnt, 3]
lnDec = aa[lnCnt, 4]
ln8Len = next8(lnLen)
lcOut = lcOut + TABB
DO CASE
CASE lcType == "C"
lcOut = lcOut + lcField + [ varchar (] + TRANSFORM(ln8Len) + [) not null default '', ]
CASE lcType == "I"
DO CASE
CASE lnLen < 4
lcOut = lcOut + lcField + [ tinyint unsigned not null default 0, ]
CASE lnLen < 8
lcOut = lcOut + lcField + [ int unsigned not null default 0, ]
OTHERWISE
lcOut = lcOut + lcField + [ mediumint unsigned not null default 0, ]
ENDCASE
CASE INLIST(lcType, "N", "Y")
IF lnDec = 0
DO CASE
CASE lnLen < 4
lcOut = lcOut + lcField + [ tinyint unsigned not null default 0, ]
CASE lnLen < 8
lcOut = lcOut + lcField + [ int unsigned not null default 0, ]
OTHERWISE
lcOut = lcOut + lcField + [ mediumint unsigned not null default 0, ]
ENDCASE
ELSE
lcOut = lcOut + lcField + [ decimal (] + TRANSFORM(ln8Len) + [, ] + TRANSFORM(lnDec) + [) not null default 0, ]
ENDIF
CASE lcType == "T"
lcOut = lcOut + lcField + [ datetime not null, ]
CASE lcType == "D"
lcOut = lcOut + lcField + [ date not null, ]
CASE lcType == "M"
lcOut = lcOut + lcField + [ text not null default '', ]
CASE lcType == "L"
lcOut = lcOut + lcField + [ tinyint unsigned not null default '0', ]
ENDCASE
IF lnCnt = lnF
* Last entry; strip the comma
lcOut = SUBSTR(lcOut, 1, LEN(lcOut)-2)
ELSE
lcOut = lcOut + CR
ENDIF
ENDFOR
lcFile = [make] + LOWER(ALIAS()) + [.sql]
STRTOFILE([create table ] + LOWER(ALIAS()) + [ (] + CR + lcOut + CR + [)], lcFile)
MODIFY FILE (lcFile) NOWAIT
RETURN
FUNCTION next8(tnVal)
LOCAL lnExtra
lnExtra = tnVal % 8
IF lnExtra > 0
lnExtra = 8 - lnExtra
ENDIF
RETURN tnVal + lnExtra
ENDFUNC |
_________________ 福隆昌淨水有限公司--淨水器的專家,淨水器,飲水機,濾心!!
想了解更多,您可上幸福雞湯組.找尋!!丁澐瑄.老師.
愛作夢 |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|