VFP ·R¥ÎªÌªÀ°Ï ­º­¶ VFP ·R¥ÎªÌªÀ°Ï
¥»°Q½×°Ï¬° Visual Foxpro ·R¥ÎªÌ¸gÅç¥æ¬yªº¦a¤è, ½Ð¦h¦h§Q¥Î"·j´M"ªº¥\¯à, ¥ý¬d¬Ý¬Ý¦³µL«e¨Ò¥i´`, ¦pªGÁÙ¦³¤£À´ªº¦Aµo°Ý. ³¡¥÷¥DÃD¦³ªþ¥[ÀÉ®×, ¶·¥ýµù¥U¦¨¬°ªÀ°Ï©~¥Á¤~¥i¥H¤U¸ü.
 
 ±`¨£°ÝÃD±`¨£°ÝÃD   ·j´M·j´M   ·|­û¦Cªí·|­û¦Cªí   ·|­û¸s²Õ·|­û¸s²Õ   ·|­ûµù¥U·|­ûµù¥U 
 ­Ó¤H¸ê®Æ­Ó¤H¸ê®Æ   µn¤JÀˬd±zªº¨p¤H°T®§µn¤JÀˬd±zªº¨p¤H°T®§   µn¤Jµn¤J

­×´_·lÃaªº DBF »P FPT Àɤ§³ø§i®Ñ

 
µoªí·s¥DÃD   ¦^ÂÐ¥DÃD    VFP ·R¥ÎªÌªÀ°Ï ­º­¶ -> VFP °Q½×°Ï
¤W¤@½g¥DÃD :: ¤U¤@½g¥DÃD  
µoªí¤H ¤º®e
¦¶¨|¿³



µù¥U®É¶¡: 2003-08-25
¤å³¹: 661
¨Ó¦Û: ¥x¤¤¥«¤j¨½°Ï

²Ä 1 ¼Ó

µoªíµoªí©ó: ¬P´Á¤» ¤­¤ë 21, 2005 2:50 am    ¤å³¹¥DÃD: ­×´_·lÃaªº DBF »P FPT Àɤ§³ø§i®Ñ ¤Þ¨¥¦^ÂÐ

ªø´Á¥H¨Ó±`±`·|¹J¨ì«È¤á¦]¹q¸£·í¾÷©ÎÂ_¹q¦Ó³y¦¨ DBF ©Î FPT ÀÉ·l·´¡A¦b VFP7 ¥H¤U(§t) ®É¡A¦]¬°¥u¦³ FPT ·|·l·´ (DBF ¬O§_¦³·l·´´N¤£ª¾¹D¤F)¡A©Ò¥H´N¤ñ¸û¥Î°½Ãiªº¤è¦¡¡G¡u§â«È¤á·l·´ªºÀɮ׶Ǧ^¨Ó¡Aª½±µ¥Ñ BROWSER ¶}±Ò¡AÂǥѥ¦·|°Ý§Ú¬O§_­n­×´_·l·´ªº FPT ÀɨӱN FPT ÀÉ­×´_¡v¡FÁöµM±`±`¸ÓÀÉ·l·´®É©Ò¦b¬Yµ§°O¿ý¤WªºªþµùÄæ¦ì¤º®e¡A¸g­×´_«á¤´·|¿ò¥¢±¼¡C¦ý¸ò«È¤á¸ÑÄÀ«á¥Ñ«È¤á¦Û¤v¥h­«¸É»ô¸ê®Æ¡A«È¤á¤]±µ¨ü³o¼Ëªºª¬ªp¡A©Ò¥H´N¤@ª½²V¨ì²{¦b¡C

¦ý¨ì¤F VFP8 ¥H¤W(§t)¡A©~µM DBF Àɤ]·|¶}©l·l·´¤F¡AVFP8 (9 ¤]¤@¼Ë) ªº BROWSER ªí²{ªº¦æ¬°´N¤£¤@¼Ë¤F¡A¥¦¤£­×¤F¡A´Nª½±µ½à±z 2091 (¥Nªí DBF ·l·´¡A³o¬O VFP8 ¥H«á¤~¦³ªº¿ù»~½s¸¹) ©Î 0041 (¥Nªí FPT ·l·´) ªº¿ù»~½s¸¹µ¹±z¡F¥¦¤£¹³¦b VFP7 ¥H«e·|¥ý¦Û°Ê­×´_¦n DBF ÀÉ«á¤~Åã¥Ü 0041 ªº¿ù»~½s¸¹ (¬Ý¼Ë¤l¤£Ä@©Ó¾á­×¦n FPT «áªº¸ê®Æ¤£¨£ªº³d¥ô)¡A¦Ó¥B¥u¬O«Ü½âªº»¡¡G¡u­Y­n¦A¦¸¶}±Ò¥H«e¡A½Ð¥ý¦Û¦æ±N¥¦­×´_¦n«á¤~¯à¶}±Ò¡v¡C

³o¬O­þªù¤lªº¨Æ°Ú¡I¦b VFP8 ªºÀô¹Ò¤U¡Aªì´Á¹J¨ì·l·´ªº¨Æ¡A¥Î VFP6 ¨Ó­×ÁÙ¬O¥i¥H§K±j²V¹L¡A¨ì«á¨ÓÁöµM¥Î VFP6 ­×ÁÙ¬O­×ªº¹L¨Ó¡A¦ý¶Çµ¹«È¤á«o¤´½à±z·l·´ªºª¬ªp¡A³o·N«ä¬O»¡­×´_«áªºÀɮץΠVFP6 ©Î 7 ¨Ó¶}±Ò¤´¬O¥i¥H¶}±Òªº¡A¦ý¥Î VFP8 ©Î 9 ´N»¡¶}¤£°_¨Ó¡F«È¤á¨ºùؤw¬O VFP8 ªºÀô¹Ò¤F¡A«ç»ò¿ì©O¡A«á¨Ó§ä¨ì«Ü²Âªº¤èªk¨Ó¸Ñ¨M³o°ÝÃD¡A´N¬O¥ý¥Î 6 ¨Ó­×´_¡AµM«á¦b 6 ªºÀô¹Ò¤U¤@µ§¤@µ§ªº±N©Ò¦³°O¿ý§Û¨ì°®²bªºÀÉ®×ùØ¡F©Ò¥H©O¡AÁÙ¬O¥i¥H²V¹L¥h¡C

¤£¹L·Q·Q³o¼Ë¤l¤]¤£¬O¿ìªk (¦³®É­è¦n«Ü¦£¡A¤S¨Ó³oºØ¨Æ¡A·í¤U·|¦³¤u§@À£¤Oªº)¡A­è¦n³Ìªñ¤~±N«È¤áªº¤@­Ó±M®× («È¤á¥I¶O) ¸Ñ¨M±¼¡F©Ò¥H´N¤U©w¨M¤ß¨Ó¸Ñ¨M³o­Ó°ÝÃD¡A°Ñ¦Ò¦U½×¾Â¬ÛÃö¸ê®Æ¤Î VFP »¡©úÀÉ¥»¨­´£¨Ñªº¸ê°T¡AÁ`ºâ¬O±N³o­Ó°ÝÃD¸Ñ¨M¤F¡A¬Ù¤F¨C¦¸«È¤áªºÀɮפ@·l·´´N­n»°§Ö§â¥¦­×´_§¹²¦¡A¬ü¨ä¦W»¡¬OªA°È¡A¹ê«h ...¡C

¦n¤F¡A²{¦b¨Ó»¡»¡¦p¦ó­×´_¡A§Ú¥u±NÃöÁ䪺µ{¦¡½X¼g¥X¨Ó¡A¨ä¥Lªº´N¥u¬O»¡©ú (¤£¬O§Ú°½Ãi¡A¦Ó¬O³oºØ¨Æªº³B²z¤è¦¡·|¦]¤H¦Ó²§)¡C

¦b¤°»ò±¡ªp¤U¨Ó°µ­×´_ªº°Ê§@¡G¦Ò¼{ªºµ²ªG¡A´N¦bµo¥Í 2091 »P 0041 ªº¿ù»~·í¤U­×´_¡C
¦ý·Q·Q¤]¤£¯à´N³o¼ËÀqÀqªº´N±N¥¦³B²z±¼¡A§_«h«È¤á­þ¤Ñ¸ò±zÁ¿»¡¥L¬Y­Ó¸ê®Æªº¤º®e¬ðµM¤£¨£¤F¡C¤H³£¬O°·§Ñªº¡A¤]³\ªì´Á§ÚÁÙ·|°O±o¦³¥i¯àÀÉ®×´¿¸g·l·´¹L¡A¦ý¤[¤F©Î¬O·sªº¦P¨Æ·|¦]¤£²M·¡¦³³o­×´_¾÷¨î¡AÁÙ¥H¬°µo¥Í¤FÆF²§¨Æ¥ó (©Î¬O¬Y¨Ç¤H°Ê¤£°Ê´N»¡ VFP ¯uÄê) ¦Ó§b¦b¨ºùؤ£ª¾¦p¦ó¸ò«È¤á¸ÑÄÀ¡C

IJµo¾÷¨î¬O¥Î ON ERROR ©R¥O«ü©w¤@­Ó¿ù»~³B²z¨ç¼Æ¡A¦b¸Ó¨ç¼Æ¤¤ÄdºI¬Y¨Ç¯S©wªº¿ù»~½s¸¹¡A¦b 2091 »P 0041 ¿ù»~ªº¼Ò²Õ¤¤¡A³B²z¨BÆJ¦p¤U¡G

1.§iª¾«È¤áµo¥Í¤FÀÉ®×·l·´ªº°T®§¡A¸ß°Ý«È¤á¦b­×´_«e¬O§_­n³Æ¥÷¸ÓÀɮסC¦¹¥Î·N¬O§iª¾«È¤á¦³ª¬ªpµo¥Í¤F¡A§K±o¨Æ«á¤~¨Óª±ÆF²§¨Æ¥óªº¹CÀ¸¡C

2.¶}©l­×´_¡G
¡@A.­×´_ DBF ÀÉ¡Aµ{¦¡½X¦p¤U¡G
¡@¡@L_cDBFFileName ¥Nªí·l·´ªº DBF ÀÉ¡A¥Ñ¿ù»~°T®§¤¤¥i¥H±o¨ì¸ÓÀɮצWºÙ (§t§¹¾ã¸ô®|)¡C

¥N½X:

    W1_nHandleOfDBFFile = FOPEN(L_cDBFFileName, 2) && ¥HŪ¼g¤è¦¡¶}±Ò¸ê®Æªí®æÀÉ
    IF W1_nHandleOfDBFFile = -1
      * ¦Û¦æ³B²z¤º®e
    ELSE
      * Àɮתø«×
      W1_nFileSize = FSEEK(W1_nHandleOfDBFFile,0,2)
      =FSEEK(W1_nHandleOfDBFFile, 0, 0)
      * ºI¨úÀÉÀY°O¿ý
      W1_cHeaderRecords     = FREAD(W1_nHandleOfDBFFile,32)
      * ­ì©l­È
      W1_cHead_Reccount     = SUBSTR(W1_cHeaderRecords,05,04)  && Àɮפ¤ªº¸ê®Æ°O¿ý¼Æ¥Ø
      W1_cHead_1stLocation  = SUBSTR(W1_cHeaderRecords,09,02)  && ²Ä¤@µ§¸ê®Æ°O¿ýªº¦ì¸m
      W1_cHead_RecordLength = SUBSTR(W1_cHeaderRecords,11,02)  && ¨Cµ§¸ê®Æ°O¿ýªºªø«× (¥]¬A§R°£°O¸¹)
      * Âà´«¬° 10 ¶i¦ì¨î¼Æ
      W1_nHead_Reccount     = Word2Dec(LEFT(W1_cHead_Reccount, 2)) + Word2Dec(RIGHT(W1_cHead_Reccount, 2)) * 65535
      W1_nHead_1stLocation  = Word2Dec(W1_cHead_1stLocation)
      W1_nHead_RecordLength = Word2Dec(W1_cHead_RecordLength)
      IF W1_nFileSize < W1_nHead_1stLocation OR W1_nHead_1stLocation <= 64
        * ¦Û¦æ³B²z¤º®e
      ELSE
        * > ­pºâÀɮפ¤ªº¸ê®Æ°O¿ý¼Æ¥Ø
        W1_nCorrectRecs = (W1_nFileSize - W1_nHead_1stLocation) / W1_nHead_RecordLength
        * > ­×¥¿«áÂà´«¬°Âù¦ì¤¸²Õ(WORD)¤G¶i¨î¦r¦ê
        W1_cCorrectRecs = Dec2Word(W1_nCorrectRecs-INT(W1_nCorrectRecs/65535)*65535) + Dec2Word(INT(W1_nCorrectRecs/65535))
        * > ¼g¤J¥¿½T¸ê°T
        =FSEEK(W1_nHandleOfDBFFile,4,0)
        =FWRITE(W1_nHandleOfDBFFile,W1_cCorrectRecs,4)
      ENDIF
      =FCLOSE(W1_nHandleOfDBFFile)
    ENDIF


¡@B.­×´_ FPT ÀÉ¡Aµ{¦¡½X¦p¤U¡G
¡@¡@L_cFPTFileName ¥Nªí·l·´ªº FPT ÀÉ¡A¥Ñ¿ù»~°T®§¤¤¥i¥H±o¨ì¸ÓÀɮצWºÙ (§t§¹¾ã¸ô®|)¡C

¥N½X:

    W1_nHandleOfFPTFile = FOPEN(L_cFPTFileName, 2) && ¥HŪ¼g¤è¦¡¶}±Ò¸ê®Æªí®æÀÉ
    IF W1_nHandleOfFPTFile = -1
      * ¦Û¦æ³B²z¤º®e
    ELSE
      * > Àɮפj¤p
      W1_nFileSize = FSEEK(W1_nHandleOfFPTFile,0,2)
      =FSEEK(W1_nHandleOfFPTFile, 0, 0)
      * > ºI¨úÀÉÀY°O¿ý
      W1_cHeaderRecords = FREAD(W1_nHandleOfFPTFile,8)
      * > ­ì©l­È
      W1_cHead_LocationOfNextFreeBlock = SUBSTR(W1_cHeaderRecords,1,4)  && ¤U¤@­Ó¦Û¥Ñ°Ï¶ôªº¦ì¸m
      W1_cHead_BlockSize               = SUBSTR(W1_cHeaderRecords,7,2)  && °Ï¶ô¤j¤p
      * > Âà´«¬° 10 ¶i¦ì¨î¼Æ
      W1_nHead_LocationOfNextFreeBlock = UnMSBLSB(W1_cHead_LocationOfNextFreeBlock)
      W1_nHead_BlockSize               = UnMSBLSB(W1_cHead_BlockSize)
      DO CASE
      CASE W1_nHead_BlockSize = 0
           W1_nHead_BlockSize = 1
      CASE W1_nHead_BlockSize = 33
           W1_nHead_BlockSize = 512 * W1_nHead_BlockSize
      ENDCASE
      W1_cFixHeaderRecords = ToMSBLSB(INT(W1_nFileSize/W1_nHead_BlockSize),4) + CHR(0) + CHR(0) + W1_cHead_BlockSize
      =FSEEK(W1_nHandleOfFPTFile,0,0)  && ¦^¨ìÀɮ׶}©l³B
      =FWRITE(W1_nHandleOfFPTFile,W1_cFixHeaderRecords)
      =FCLOSE(W1_nHandleOfFPTFile)
    ENDIF


3.±N­×´_«áªºª¬ªp¼g¤J¤é»xÀɤ¤¡A¨Ñ¥H«á¬d¾\¡C

¦]¬°¸ÓºÎı¤F¡A­Y¦³°ÝÃD½Ð§iª¾¡C



¤U¦C¬°¥Î¨ìªº¦Û©w¨ç¼Æ¡G

¥N½X:

FUNCTION Dec2Word
LPARAMETERS lnDecNum
LOCAL lcByte1, lcByte2
lcByte1 = CHR(MOD(lnDecNum,256))
lcByte2 = CHR(INT(lnDecNum/256))
RETURN lcByte1 + lcByte2

FUNCTION Word2Dec
LPARAMETERS lcBinNum
LOCAL lnNum1, lnNum2
lcBinNum = PADR(lcBinNum, 2, CHR(0))
lnNum1 = ASC(LEFT(lcBinNum,1))
lnNum2 = ASC(RIGHT(lcBinNum,1)) * 256
RETURN lnNum1 + lnNum2


FUNCTION UnMSBLSB
* ------------------------------------------------------------- *
* »¡©ú¡G¡C
* ------------------------------------------------------------- *
*   °Ñ¼Æ¦WºÙ     «¬ºA »¡©ú
* ------------------------------------------------------------- *
* Input:
*   L_cSomeBytes C    ¬O¥Ñ 0 ¨ì 255 ªº ASCII ¦r¤¸©Ò²Õ¦¨ªº¦r¦ê¡C
* Output:
*   Mo_cRetVal   N    ¡C
* ------------------------------------------------------------- *
* ½d¨Ò¡G
* L_cSomeBytes = "¦¥ÃÓ"  && ascii characters from 0 to 255
*
* Mo_cRetVal = ASC(SUBSTR(L_cSomeBytes,4,1)) + ;
*              ASC(SUBSTR(L_cSomeBytes,3,1)) * 256 + ;
*              ASC(SUBSTR(L_cSomeBytes,2,1)) * 256 * 256 + ;
*              ASC(SUBSTR(L_cSomeBytes,1,1)) * 256 * 256 * 256
* ------------------------------------------------------------- *
LPARAMETERS L_cSomeBytes
LOCAL Mo_nRetVal AS Number
LOCAL W1_nSUB_A  AS Integer
Mo_nRetVal = 0
FOR W1_nSUB_A = 1 TO Len(L_cSomeBytes)
  Mo_nRetVal = Mo_nRetVal * 256 + ASC(SUBSTR(L_cSomeBytes,W1_nSUB_A,1))
ENDFOR
RETURN Mo_nRetVal

FUNCTION ToMSBLSB
* ------------------------------------------------------ *
* »¡©ú¡G¡C
* ------------------------------------------------------ *
*   °Ñ¼Æ¦WºÙ   «¬ºA »¡©ú
* ------------------------------------------------------ *
* Input:
*   L_nSomeNum N    ¡C
*  (L_nCount)  N    ¹w³]­È = 1¡C
* Output:
*   Mo_cRetVal C    ¡C
* ------------------------------------------------------ *
LPARAMETERS L_nSomeNum, L_nCount
LOCAL Mo_cRetVal AS Character
LOCAL W1_nSUB_A  AS Integer
Mo_cRetVal = ""
IF Type("L_nCount") != "N"
  L_nCount = 1
ELSE
  L_nCount = INT(L_nCount)
ENDIF
FOR W1_nSUB_A = 1 TO L_nCount
  Mo_cRetVal = CHR(MOD(L_nSomeNum,256)) + Mo_cRetVal
  L_nSomeNum = INT(L_nSomeNum/256)
ENDFOR
RETURN Mo_cRetVal

_________________
§Æ±æ¦³§ó¦h¤H¨Ó°Ñ»P
VFP wiki - »Ý­n¤j®a¤@°_§¹¦¨ªºVFP¹q¤l®Ñ»PFAQ


¦¶¨|¿³ ¦b ¬P´Á¤» ¤­¤ë 21, 2005 8:03 pm §@¤F²Ä 1 ¦¸­×§ï
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§ µo°e¹q¤l¶l¥ó MSN Messenger
¦¶¨|¿³



µù¥U®É¶¡: 2003-08-25
¤å³¹: 661
¨Ó¦Û: ¥x¤¤¥«¤j¨½°Ï

²Ä 2 ¼Ó

µoªíµoªí©ó: ¬P´Á¤» ¤­¤ë 21, 2005 2:52 am    ¤å³¹¥DÃD: ¤Þ¨¥¦^ÂÐ

³o¬O¥Î¨ç¼Æ¤è¦¡³B²z DBF ªº¡G

¥N½X:

WAIT WIND LTRIM(STR(UFIXDBF(GETFILE())))

FUNCTION UFIXDBF
* ------------------------------------------------------------------------------------------------------------ *
* »¡©ú¡G¸ê®Æªí®æÀɪºªíÀY­×´_µ{¦¡¡C
* ------------------------------------------------------------------------------------------------------------ *
*   °Ñ¼Æ¦WºÙ       «¬ºA »¡©ú
* ------------------------------------------------------------------------------------------------------------ *
* Input:
*   L_cDBFFileName C    ­n­×´_ªº¸ê®Æªí®æ¦WºÙ(¥i¥]§t§¹¾ã¸ô®|)¡C
* Output:
*   M_nProcessNum  N     -2 = Àɮק䤣¨ì¡C
*                        -4 = ¶}±Ò¤Ó¦hªºÀɮסA¨S¦³¨¬°÷ªºÀÉ®×±±¨î½X¡C
*                        -5 = Àɮצs¨ú¥¢±Ñ¡C
*                        -6 = «ü©wªºÀÉ®×±±¨î½X¤£¥¿½T¡C
*                        -8 = °O¾ÐÅ餣¨¬¡C
*                       -11 = Àɮתø«×¤Ó¤p¡A¤£¬O¸ê®Æªí®æÀÉ¡A¤£¯à³Q­×´_¡C
*                       -12 = ¤£¬O FoxPro/FoxBase ¸ê®Æªí®æ¡A¤£¯à³Q­×´_¡C
*                       -13 = ¸ê®Æªí®æªºªíÀY¸ê°T³Q¯}Ãa©Î¤£¬O¸ê®Æ®wÀÉ®×, ¤£¯à³Q­×´_¡C
*                       -25 = ·j´M¿ù»~ (µLªk±qÀɮתº¶}ÀY³B¤§«e¶}©l·j´M)¡C
*                       -29 = ºÏºÐªÅ¶¡¤£¨¬¡C
*                       -31 = ¶}±ÒÀɮ׮ɥX²{¿ù»~¡C
*                         0 = ¸ê®Æªí®æªºªíÀY¸ê°T¥¿½T¡A¤£»Ý­n­×´_¡C
*                         2 = 0x02 FoxBASE
*                         3 = 0x03 FoxBASE+/dBASE III PLUS¡AµLªþµùÄæ¦ì¡C
*                        48 = 0x30 Visual FoxPro¡C
*                        49 = 0x31 Visual FoxPro¡A¦³¦Û°Ê¼W¶qÄæ¦ì¡C
*                        50 = 0x32 Visual FoxPro¡A¦³¥iÅܪø«×¦r¤¸Äæ¦ì¡B¥iÅܪø«×¤G¶i¦ìÄæ¦ì©Î¤G¶i¦ì¤j«¬ª«¥óÄæ¦ì¡C
*                        67 = 0x43 dBASE IV SQL ¸ê®Æªí®æÀɮסAµLªþµùÄæ¦ì¡C
*                        99 = 0x63 dBASE IV SQL ¨t²ÎÀɮסAµLªþµùÄæ¦ì¡C
*                       131 = 0x83 FoxBASE+/dBASE III PLUS¡A¦³ªþµùÄæ¦ì¡C
*                       139 = 0x8B dBASE IV ¦³ªþµùÄæ¦ì¡C
*                       203 = 0xCB dBASE IV SQL ªíÀɮסA¦³ªþµùÄæ¦ì¡C
*                       245 = 0xF5 FoxPro 2.x (©Î§ó¦­ª©¥») ¦³ªþµùÄæ¦ì¡C
*                       251 = 0xFB FoxBASE¡C
* ------------------------------------------------------------------------------------------------------------ *
* ª`·N¡GM_nProcessNum > 0¡A°£¤Fªí¥Ü¨ä¬°¦óºØ DBF Ãþ«¬¥~¡A¤]¥Nªí¸Ó DBF ³Q­×´_¦¨¥\¡C
* ------------------------------------------------------------------------------------------------------------ *
LPARAMETERS L_cDBFFileName AS String
LOCAL M_nProcessNum AS Number
LOCAL W1_nFileSize AS Number,W1_nHandleOfDBFFile AS Number
LOCAL W1_cHead_Filetype AS Character,W1_cHead_Reccount AS Character,W1_cHead_1stLocation AS Character,W1_cHead_RecordLength AS Character
LOCAL W1_nHead_Filetype AS Number   ,W1_nHead_Reccount AS Number   ,W1_nHead_1stLocation AS Number   ,W1_nHead_RecordLength AS Number
LOCAL W1_nCorrectRecs AS Number    ,W1_cCorrectRecs AS Character
M_nProcessNum   = 0
W1_nFileSize    = 0
W1_nHandleOfDBFFile = FOPEN(L_cDBFFileName, 2) && ¥HŪ¼g¤è¦¡¶}±Ò¸ê®Æªí®æÀÉ

* 1.Àɮ׬O§_¯à¶}±Ò
IF W1_nHandleOfDBFFile = -1
  M_nProcessNum = FERROR() * -1
ENDIF
* 2.Àɮתø«×¬O§_¤Ó¤p
IF M_nProcessNum = 0
  W1_nFileSize = FSEEK(W1_nHandleOfDBFFile,0,2)
  =FSEEK(W1_nHandleOfDBFFile, 0, 0)
  IF W1_nFileSize <= 64
    =FCLOSE(W1_nHandleOfDBFFile)
    M_nProcessNum = -11
  ENDIF
ENDIF
* 3.§PÂ_¬O§_¬° FoxPro/FoxBase ¸ê®Æªí®æ
IF M_nProcessNum = 0
  * > ºI¨úÀÉÀY°O¿ý
  W1_cHeaderRecords     = FREAD(W1_nHandleOfDBFFile,32)
  * > ­ì©l­È
  W1_cHead_Filetype     = SUBSTR(W1_cHeaderRecords,01,01)  && ÀÉ®×Ãþ«¬
  W1_cHead_Reccount     = SUBSTR(W1_cHeaderRecords,05,04)  && Àɮפ¤ªº¸ê®Æ°O¿ý¼Æ¥Ø
  W1_cHead_1stLocation  = SUBSTR(W1_cHeaderRecords,09,02)  && ²Ä¤@µ§¸ê®Æ°O¿ýªº¦ì¸m
  W1_cHead_RecordLength = SUBSTR(W1_cHeaderRecords,11,02)  && ¨Cµ§¸ê®Æ°O¿ýªºªø«× (¥]¬A§R°£°O¸¹)
  W1_cHead_Tableflags   = SUBSTR(W1_cHeaderRecords,29,01)  && ¸ê®Æªí®æºX¼Ð
  * > Âà´«¬° 10 ¶i¦ì¨î¼Æ
  W1_nHead_Filetype     = Word2Dec(W1_cHead_Filetype)
  W1_nHead_Reccount     = Word2Dec(LEFT(W1_cHead_Reccount, 2)) + Word2Dec(RIGHT(W1_cHead_Reccount, 2)) * 65535
  W1_nHead_1stLocation  = Word2Dec(W1_cHead_1stLocation)
  W1_nHead_RecordLength = Word2Dec(W1_cHead_RecordLength)
  W1_nHead_Tableflags   = Word2Dec(W1_cHead_Tableflags)
  * > §PÂ_
  IF INLIST(RIGHT(TRANSFORM(W1_nHead_Filetype,"@0"),2),"02","03","30","31","32","43","63","83","8B","CB","F5","FB")
    M_nProcessNum = W1_nHead_Filetype
  ELSE
    =FCLOSE(W1_nHandleOfDBFFile)
    M_nProcessNum = -12
  ENDIF
ENDIF
* 4.¸ê®Æªí®æ¬O§_³Q¯}Ãa
IF M_nProcessNum > 0
IF W1_nFileSize < W1_nHead_1stLocation OR W1_nHead_1stLocation <= 64
  =FCLOSE(W1_nHandleOfDBFFile)
  M_nProcessNum = -13
ENDIF
ENDIF
* 5.§PÂ_¬O§_»Ý­n­×´_
IF M_nProcessNum > 0
IF W1_nHead_Reccount = INT((W1_nFileSize-W1_nHead_1stLocation)/W1_nHead_RecordLength)
  =FCLOSE(W1_nHandleOfDBFFile)
  M_nProcessNum = 0
ENDIF
ENDIF
* 6.±N¨ü·lªº DBF ­×´_
IF M_nProcessNum > 0
  * > ­pºâÀɮפ¤ªº¸ê®Æ°O¿ý¼Æ¥Ø
  W1_nCorrectRecs = (W1_nFileSize - W1_nHead_1stLocation) / W1_nHead_RecordLength
  * > ­×¥¿«áÂà´«¬°Âù¦ì¤¸²Õ(WORD)¤G¶i¨î¦r¦ê
  W1_cCorrectRecs = Dec2Word(W1_nCorrectRecs-INT(W1_nCorrectRecs/65535)*65535) + Dec2Word(INT(W1_nCorrectRecs/65535))
  * > ¼g¤J¥¿½T¸ê°T
  =FSEEK(W1_nHandleOfDBFFile,4,0)
  =FWRITE(W1_nHandleOfDBFFile,W1_cCorrectRecs,4)
  =FCLOSE(W1_nHandleOfDBFFile)
ENDIF
RETURN M_nProcessNum

FUNCTION Dec2Word
* ³o¬O§O¤H´£¨Ñªº¡A¬O½Ö´N¤£ª¾¤F
******************************************************************************
* ¦WºÙ : Dec2Word.PRG
* ¥Î³~ : Âà´« 10 ¶i¨î¼Æ¨ìÂù¦ì¤¸²Õ(WORD)¤G¶i¨î¦r¦ê
* ½s¼g :
* ¤é´Á : 1997.08.26
* ª©¥» : 1.0.0
******************************************************************************
* ¥Îªk :
* cRetuVal = Dec2Word(<¤Q¶i¨î¼Æ>)
******************************************************************************
* °Ñ¼Æ:
*
* lnDecNum : ¤Q¶i¨î¼Æ
*
******************************************************************************
* ¶Ç¦^­È:
*
* ¶Ç¦^¦r¤¸«¬Âù¦ì¤¸²Õ(WORD)¤G¶i¨î¦r¦ê
*
******************************************************************************
* °Ñ¨£:
* Word2Dec.PRG : Âà´«Âù¦ì¤¸²Õ(WORD)¤G¶i¨î¦r¦ê¨ì 10 ¶i¨î¼Æ
*
******************************************************************************

LPARAMETERS lnDecNum
LOCAL lcByte1, lcByte2
lcByte1 = CHR(MOD(lnDecNum,256))
lcByte2 = CHR(INT(lnDecNum/256))

RETURN lcByte1 + lcByte2


FUNCTION Word2Dec
* ³o¬O§O¤H´£¨Ñªº¡A¬O½Ö´N¤£ª¾¤F
******************************************************************************
* ¦WºÙ : Word2Dec.PRG
* ¥Î³~ : Âà´«Âù¦ì¤¸²Õ(WORD)¤G¶i¨î¦r¦ê¨ì 10 ¶i¨î¼Æ
* ½s¼g :
* ¤é´Á : 1997.08.26
* ª©¥» : 1.0.0
******************************************************************************
* ¥Îªk :
* cRetuVal = Word2Dec(<¤G¶i¨î¦r¦ê>)
******************************************************************************
* °Ñ¼Æ:
*
* lcBinNum : ¤G¶i¨î¦r¦ê
*
******************************************************************************
* ¶Ç¦^­È:
*
* ¶Ç¦^¤Q¶i¨î¼Æ
*
******************************************************************************
* °Ñ¨£:
* Dec2Word.PRG : Âà´« 10 ¶i¨î¼Æ¨ìÂù¦ì¤¸²Õ(WORD)¤G¶i¨î¦r¦ê
*
******************************************************************************

LPARAMETERS lcBinNum
LOCAL lnNum1, lnNum2
lcBinNum = PADR(lcBinNum, 2, CHR(0))
lnNum1 = ASC(LEFT(lcBinNum,1))
lnNum2 = ASC(RIGHT(lcBinNum,1)) * 256
RETURN lnNum1 + lnNum2

_________________
§Æ±æ¦³§ó¦h¤H¨Ó°Ñ»P
VFP wiki - »Ý­n¤j®a¤@°_§¹¦¨ªºVFP¹q¤l®Ñ»PFAQ
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§ µo°e¹q¤l¶l¥ó MSN Messenger
¦¶¨|¿³



µù¥U®É¶¡: 2003-08-25
¤å³¹: 661
¨Ó¦Û: ¥x¤¤¥«¤j¨½°Ï

²Ä 3 ¼Ó

µoªíµoªí©ó: ¬P´Á¤» ¤­¤ë 21, 2005 2:53 am    ¤å³¹¥DÃD: ¤Þ¨¥¦^ÂÐ

³o¬O¥Î¨ç¼Æ¤è¦¡³B²z FPT ªº¡G

¥N½X:

WAIT WIND LTRIM(STR(UFIXFPT(GETFILE())))

FUNCTION UFIXFPT
* ------------------------------------------------------------------------------------------------------------ *
* »¡©ú¡GªþµùÀɪºªíÀY­×´_µ{¦¡¡C
* ------------------------------------------------------------------------------------------------------------ *
*   °Ñ¼Æ¦WºÙ       «¬ºA »¡©ú
* ------------------------------------------------------------------------------------------------------------ *
* Input:
*   L_cDBFFileName C    ­n­×´_ªºªþµùÀɮצWºÙ(¥i¥]§t§¹¾ã¸ô®|)¡C
* Output:
*   M_nProcessNum  N     -2 = Àɮק䤣¨ì¡C
*                        -4 = ¶}±Ò¤Ó¦hªºÀɮסA¨S¦³¨¬°÷ªºÀÉ®×±±¨î½X¡C
*                        -5 = Àɮצs¨ú¥¢±Ñ¡C
*                        -6 = «ü©wªºÀÉ®×±±¨î½X¤£¥¿½T¡C
*                        -8 = °O¾ÐÅ餣¨¬¡C
*                       -25 = ·j´M¿ù»~ (µLªk±qÀɮתº¶}ÀY³B¤§«e¶}©l·j´M)¡C
*                       -29 = ºÏºÐªÅ¶¡¤£¨¬¡C
*                       -31 = ¶}±ÒÀɮ׮ɥX²{¿ù»~¡C
*                         0 = ªþµùÀɪºªíÀY¸ê°T¥¿½T¡A¤£»Ý­n­×´_¡C
* ------------------------------------------------------------------------------------------------------------ *
LPARAMETERS L_cFPTFileName AS String
LOCAL M_nProcessNum AS Number
LOCAL W1_nFileSize AS Number,W1_nHandleOfFPTFile AS Number

M_nProcessNum = 0
W1_nFileSize  = 0

W1_nHandleOfFPTFile = FOPEN(L_cFPTFileName, 2) && ¥HŪ¼g¤è¦¡¶}±Ò¸ê®Æªí®æÀÉ
* 1.Àɮ׬O§_¯à¶}±Ò
IF W1_nHandleOfFPTFile = -1
  M_nProcessNum = FERROR() * -1
ENDIF
* 2.Àɮתø«×¬O§_¤Ó¤p
IF M_nProcessNum = 0
  * > Àɮפj¤p
  W1_nFileSize = FSEEK(W1_nHandleOfFPTFile,0,2)
  =FSEEK(W1_nHandleOfFPTFile, 0, 0)
  * > ºI¨úÀÉÀY°O¿ý
  W1_cHeaderRecords = FREAD(W1_nHandleOfFPTFile,8)
  * > ­ì©l­È
  W1_cHead_LocationOfNextFreeBlock = SUBSTR(W1_cHeaderRecords,1,4)  && ¤U¤@­Ó¦Û¥Ñ°Ï¶ôªº¦ì¸m
  W1_cHead_BlockSize               = SUBSTR(W1_cHeaderRecords,7,2)  && °Ï¶ô¤j¤p
  * > Âà´«¬° 10 ¶i¦ì¨î¼Æ
  W1_nHead_LocationOfNextFreeBlock = UnMSBLSB(W1_cHead_LocationOfNextFreeBlock)
  W1_nHead_BlockSize               = UnMSBLSB(W1_cHead_BlockSize)
  DO CASE
  CASE W1_nHead_BlockSize = 0
       W1_nHead_BlockSize = 1
  CASE W1_nHead_BlockSize = 33
       W1_nHead_BlockSize = 512 * W1_nHead_BlockSize
  ENDCASE
  W1_cFixHeaderRecords = ToMSBLSB(INT(W1_nFileSize/W1_nHead_BlockSize),4) + ;
                         CHR(0) + CHR(0) + W1_cHead_BlockSize
  =FSEEK(W1_nHandleOfFPTFile,0,0)  && ¦^¨ìÀɮ׶}©l³B
  =FWRITE(W1_nHandleOfFPTFile,W1_cFixHeaderRecords)
  =FCLOSE(W1_nHandleOfFPTFile)
ENDIF
RETURN M_nProcessNum

FUNCTION UnMSBLSB
* ³o¬O§O¤H´£¨Ñªº¡A¬O½Ö´N¤£ª¾¤F
* ------------------------------------------------------------- *
* »¡©ú¡G¡C
* ------------------------------------------------------------- *
*   °Ñ¼Æ¦WºÙ     «¬ºA »¡©ú
* ------------------------------------------------------------- *
* Input:
*   L_cSomeBytes C    ¬O¥Ñ 0 ¨ì 255 ªº ASCII ¦r¤¸©Ò²Õ¦¨ªº¦r¦ê¡C
* Output:
*   Mo_cRetVal   N    ¡C
* ------------------------------------------------------------- *
* ½d¨Ò¡G
* L_cSomeBytes = "¦¥ÃÓ"  && ascii characters from 0 to 255
*
* Mo_cRetVal = ASC(SUBSTR(L_cSomeBytes,4,1)) + ;
*              ASC(SUBSTR(L_cSomeBytes,3,1)) * 256 + ;
*              ASC(SUBSTR(L_cSomeBytes,2,1)) * 256 * 256 + ;
*              ASC(SUBSTR(L_cSomeBytes,1,1)) * 256 * 256 * 256
* ------------------------------------------------------------- *
LPARAMETERS L_cSomeBytes
LOCAL Mo_nRetVal AS Number
LOCAL W1_nSUB_A  AS Integer
Mo_nRetVal = 0
FOR W1_nSUB_A = 1 TO Len(L_cSomeBytes)
  Mo_nRetVal = Mo_nRetVal * 256 + ASC(SUBSTR(L_cSomeBytes,W1_nSUB_A,1))
ENDFOR
RETURN Mo_nRetVal

FUNCTION ToMSBLSB
* ³o¬O§O¤H´£¨Ñªº¡A¬O½Ö´N¤£ª¾¤F
* ------------------------------------------------------ *
* »¡©ú¡G¡C
* ------------------------------------------------------ *
*   °Ñ¼Æ¦WºÙ   «¬ºA »¡©ú
* ------------------------------------------------------ *
* Input:
*   L_nSomeNum N    ¡C
*  (L_nCount)  N    ¹w³]­È = 1¡C
* Output:
*   Mo_cRetVal C    ¡C
* ------------------------------------------------------ *
LPARAMETERS L_nSomeNum, L_nCount
LOCAL Mo_cRetVal AS Character
LOCAL W1_nSUB_A  AS Integer
Mo_cRetVal = ""
IF Type("L_nCount") != "N"
  L_nCount = 1
ELSE
  L_nCount = INT(L_nCount)
ENDIF
FOR W1_nSUB_A = 1 TO L_nCount
  Mo_cRetVal = CHR(MOD(L_nSomeNum,256)) + Mo_cRetVal
  L_nSomeNum = INT(L_nSomeNum/256)
ENDFOR
RETURN Mo_cRetVal

_________________
§Æ±æ¦³§ó¦h¤H¨Ó°Ñ»P
VFP wiki - »Ý­n¤j®a¤@°_§¹¦¨ªºVFP¹q¤l®Ñ»PFAQ
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§ µo°e¹q¤l¶l¥ó MSN Messenger
marvin



µù¥U®É¶¡: 2004-06-01
¤å³¹: 321


²Ä 4 ¼Ó

µoªíµoªí©ó: ¬P´Á¤@ ¤­¤ë 23, 2005 11:57 am    ¤å³¹¥DÃD: ¤Þ¨¥¦^ÂÐ

¥ýÁÂÁ§Aªºµ{¦¡½X, ½Ð°Ý¬O¾A¥Î¦b¨º­Ó VFP version ?
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§
¦¶¨|¿³



µù¥U®É¶¡: 2003-08-25
¤å³¹: 661
¨Ó¦Û: ¥x¤¤¥«¤j¨½°Ï

²Ä 5 ¼Ó

µoªíµoªí©ó: ¬P´Á¤@ ¤­¤ë 23, 2005 11:58 am    ¤å³¹¥DÃD: ¤Þ¨¥¦^ÂÐ

À³¸Ó³£¾A¥Î§a
_________________
§Æ±æ¦³§ó¦h¤H¨Ó°Ñ»P
VFP wiki - »Ý­n¤j®a¤@°_§¹¦¨ªºVFP¹q¤l®Ñ»PFAQ
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§ µo°e¹q¤l¶l¥ó MSN Messenger
effielee



µù¥U®É¶¡: 2005-09-22
¤å³¹: 7


²Ä 6 ¼Ó

µoªíµoªí©ó: ¬P´Á¤T ¤C¤ë 19, 2006 11:32 am    ¤å³¹¥DÃD: ¤Þ¨¥¦^ÂÐ

·Q½Ð±Ð¤@¤U,
¤£ª¾¹D¬O§_¯à¦bµ{¦¡¤¤¥[¤J¬YºØ¾÷¨î,
¯àºÉ¶qÁקKµo¥ÍDBF©MFPTÀÉ·l·´ªº±¡§Î @@?
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§
impotence



µù¥U®É¶¡: 2005-02-21
¤å³¹: 135
¨Ó¦Û: Hong Kong

²Ä 7 ¼Ó

µoªíµoªí©ó: ¬P´Á¤T ¤C¤ë 19, 2006 12:31 pm    ¤å³¹¥DÃD: ¤Þ¨¥¦^ÂÐ

§Ú¤]·Qª¾¹D ...
_________________
¤@­Ó±`±`§Ñ°O Command ªº¤H !
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§
¦¶¨|¿³



µù¥U®É¶¡: 2003-08-25
¤å³¹: 661
¨Ó¦Û: ¥x¤¤¥«¤j¨½°Ï

²Ä 8 ¼Ó

µoªíµoªí©ó: ¬P´Á¤T ¤C¤ë 19, 2006 2:25 pm    ¤å³¹¥DÃD: ¤Þ¨¥¦^ÂÐ

©ñ¦b ON ERROR ¤¤§a (ÄdºI¿ù»~½X½s¸¹°µ«áÄò§A­nªº°Ê§@)
_________________
§Æ±æ¦³§ó¦h¤H¨Ó°Ñ»P
VFP wiki - »Ý­n¤j®a¤@°_§¹¦¨ªºVFP¹q¤l®Ñ»PFAQ
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§ µo°e¹q¤l¶l¥ó MSN Messenger
syntech



µù¥U®É¶¡: 2003-05-16
¤å³¹: 4212
¨Ó¦Û: Taipei,Taiwan

²Ä 9 ¼Ó

µoªíµoªí©ó: ¬P´Á¤T ¤C¤ë 19, 2006 2:49 pm    ¤å³¹¥DÃD: ¤Þ¨¥¦^ÂÐ

·í·´·l¨Sµo¥Í®É,VFP¤£ª¾¹D¦³¨S¦³µo¥Í·´·l,
·í·´·lµo¥Í®É,¨º¥u³Ñ¯à­×´_¦h¤Öªº°ÝÃD.

_________________
¦pªG¤½¥q¦³¤U¦C§xÂZ:
1. §ä¤£¨ì«K©y,§Ö³t,²©öªº ¥Í²£±Æµ{³nÅé
2. ¤£ª¾¹D¦p¦ó§Ö³t±Æ©w ±ÄÁÊ­p¹º
3. ¦¨¥»§ì¤£·Ç,¦Û¤vºâ¤ñ³nÅéºâ¦³¥Î
4. ·Q¾Ç²ß¨t²Î³W¹º,·Q§ä¨t²Î¬[ºcªºÅU°Ý

½ÐÁpµ¸§Ú­Ì,¤]³\§Ú­ÌÀ°±o¤W¦£
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§ µo°e¹q¤l¶l¥ó AIM Address
¤p¿à



µù¥U®É¶¡: 2004-12-27
¤å³¹: 469


²Ä 10 ¼Ó

µoªíµoªí©ó: ¬P´Á¤T ¤C¤ë 19, 2006 4:39 pm    ¤å³¹¥DÃD: ¤Þ¨¥¦^ÂÐ

effielee ¼g¨ì:
·Q½Ð±Ð¤@¤U,
¤£ª¾¹D¬O§_¯à¦bµ{¦¡¤¤¥[¤J¬YºØ¾÷¨î,
¯àºÉ¶qÁקKµo¥ÍDBF©MFPTÀÉ·l·´ªº±¡§Î @@?


¦pªG¥[¤W³o±ø«ü¥OÀ³¥iÁקK¤@¨Ç
ON Â_¹q ¨Ñ¹q WITH UPS

¦pªG¦A¥[¤W
ON ¤£¥¿±`Ãö¾÷ CLOSE ALL
´N§ó²z·Q¤F
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§ µo°e¹q¤l¶l¥ó
±q¤§«eªº¤å³¹¶}©lÅã¥Ü:   
µoªí·s¥DÃD   ¦^ÂÐ¥DÃD    VFP ·R¥ÎªÌªÀ°Ï ­º­¶ -> VFP °Q½×°Ï ©Ò¦³ªº®É¶¡§¡¬° ¥x¥_®É¶¡ (GMT + 8 ¤p®É)
²Ä1­¶(¦@1­¶)

 
«e©¹:  
±z µLªk ¦b³o­Óª©­±µoªí¤å³¹
±z µLªk ¦b³o­Óª©­±¦^ÂФ峹
±z µLªk ¦b³o­Óª©­±½s¿è¤å³¹
±z µLªk ¦b³o­Óª©­±§R°£¤å³¹
±z µLªk ¦b³o­Óª©­±¶i¦æ§ë²¼
±z µLªk ¦b³o­Óª©­±ªþ¥[ÀÉ®×
±z µLªk ¦b³o­Óª©­±¤U¸üÀÉ®×


Powered by phpBB © 2001, 2005 phpBB Group
¥¿Å餤¤å»y¨t¥Ñ phpbb-tw ºûÅ@»s§@