  | 
				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¸ü.   
				 | 
			 
		 
		 
	
		| ¤W¤@½g¥DÃD :: ¤U¤@½g¥DÃD   | 
	 
	
	
		| µoªí¤H | 
		¤º®e | 
	 
	
		¦¶¨|¿³
 
 
  µù¥U®É¶¡: 2003-08-25 ¤å³¹: 661 ¨Ó¦Û: ¥x¤¤¥«¤j¨½°Ï
  ²Ä 1 ¼Ó
  | 
		
			
				 µ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¡uYn¦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·´´Nn»°§Ö§â¥¦×´_§¹²¦¡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¡AY¦³°ÝÃ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 ¦¸×§ï | 
			 
		  | 
	 
	
		| ¦^³»ºÝ | 
		 | 
	 
	
		  | 
	 
	
		¦¶¨|¿³
 
 
  µù¥U®É¶¡: 2003-08-25 ¤å³¹: 661 ¨Ó¦Û: ¥x¤¤¥«¤j¨½°Ï
  ²Ä 2 ¼Ó
  | 
		
			
				 µ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  | 
			 
		  | 
	 
	
		| ¦^³»ºÝ | 
		 | 
	 
	
		  | 
	 
	
		¦¶¨|¿³
 
 
  µù¥U®É¶¡: 2003-08-25 ¤å³¹: 661 ¨Ó¦Û: ¥x¤¤¥«¤j¨½°Ï
  ²Ä 3 ¼Ó
  | 
		
			
				 µ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  | 
			 
		  | 
	 
	
		| ¦^³»ºÝ | 
		 | 
	 
	
		  | 
	 
	
		marvin
 
 
  µù¥U®É¶¡: 2004-06-01 ¤å³¹: 321
 
  ²Ä 4 ¼Ó
  | 
		
			
				 µoªí©ó: ¬P´Á¤@ ¤¤ë 23, 2005 11:57 am    ¤å³¹¥DÃD:  | 
				     | 
			 
			
				
  | 
			 
			
				| ¥ýÁÂÁ§Aªºµ{¦¡½X, ½Ð°Ý¬O¾A¥Î¦b¨ºÓ VFP version ? | 
			 
		  | 
	 
	
		| ¦^³»ºÝ | 
		 | 
	 
	
		  | 
	 
	
		¦¶¨|¿³
 
 
  µù¥U®É¶¡: 2003-08-25 ¤å³¹: 661 ¨Ó¦Û: ¥x¤¤¥«¤j¨½°Ï
  ²Ä 5 ¼Ó
  | 
		 | 
	 
	
		| ¦^³»ºÝ | 
		 | 
	 
	
		  | 
	 
	
		effielee
 
 
  µù¥U®É¶¡: 2005-09-22 ¤å³¹: 7
 
  ²Ä 6 ¼Ó
  | 
		
			
				 µoªí©ó: ¬P´Á¤T ¤C¤ë 19, 2006 11:32 am    ¤å³¹¥DÃD:  | 
				     | 
			 
			
				
  | 
			 
			
				·Q½Ð±Ð¤@¤U,
 
  ¤£ª¾¹D¬O§_¯à¦bµ{¦¡¤¤¥[¤J¬YºØ¾÷¨î,
 
  ¯àºÉ¶qÁ×§Kµo¥ÍDBF©MFPTÀÉ·l·´ªº±¡§Î @@? | 
			 
		  | 
	 
	
		| ¦^³»ºÝ | 
		 | 
	 
	
		  | 
	 
	
		impotence
 
  
  µù¥U®É¶¡: 2005-02-21 ¤å³¹: 135 ¨Ó¦Û: Hong Kong
  ²Ä 7 ¼Ó
  | 
		
			
				 µoªí©ó: ¬P´Á¤T ¤C¤ë 19, 2006 12:31 pm    ¤å³¹¥DÃD:  | 
				     | 
			 
			
				
  | 
			 
			
				§Ú¤]·Qª¾¹D ... _________________ ¤@Ó±`±`§Ñ°O Command ªº¤H ! | 
			 
		  | 
	 
	
		| ¦^³»ºÝ | 
		 | 
	 
	
		  | 
	 
	
		¦¶¨|¿³
 
 
  µù¥U®É¶¡: 2003-08-25 ¤å³¹: 661 ¨Ó¦Û: ¥x¤¤¥«¤j¨½°Ï
  ²Ä 8 ¼Ó
  | 
		 | 
	 
	
		| ¦^³»ºÝ | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  µù¥U®É¶¡: 2003-05-16 ¤å³¹: 4252 ¨Ó¦Û: Taipei,Taiwan
  ²Ä 9 ¼Ó
  | 
		
			
				 µ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¦£ | 
			 
		  | 
	 
	
		| ¦^³»ºÝ | 
		 | 
	 
	
		  | 
	 
	
		¤p¿à
 
 
  µù¥U®É¶¡: 2004-12-27 ¤å³¹: 477
 
  ²Ä 10 ¼Ó
  | 
		
			
				 µ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 | 
			 
		  | 
	 
	
		| ¦^³»ºÝ | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
±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§@ 
		 |