VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

Firebird-產立資料表的結構 (用在轉換資料庫上)

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> SQL 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
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

_________________
福隆昌淨水有限公司--淨水器的專家,淨水器,飲水機,濾心!!

想了解更多,您可上幸福雞湯組.找尋!!丁澐瑄.老師.

          愛作夢
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> SQL 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作