  | 
				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 | 
	 
	
		Ruey
 
 
  µù¥U®É¶¡: 2003-03-12 ¤å³¹: 1698 ¨Ó¦Û: tunglo
  ²Ä 1 ¼Ó
  | 
		
			
				 µoªí©ó: ¬P´Á¤T ¤K¤ë 13, 2003 11:02 am    ¤å³¹¥DÃD: °ÊºA«Ø¥ßµø¹Ï | 
				     | 
			 
			
				
  | 
			 
			
				*------ ¨Ò¤l 
 
loView = CreateObject([View]) 
 
loView.CreateView([DataBase] ,[cTable] ,[cView] ,[cConnection] ,.F. ,cWhere,[cOrder],.T.,.T.)   
 
*------ °ÊºA«Ø¥ßµø¹Ï 
 
*------ ViewºûÅ@¥Î©óºûÅ@µø¹Ïªº§¹¾ã©Ê 
 
*----------------------------------------------------------- 
 
*------ ³oÓÃþ¦³«Ý§¹µ½ 
 
DEFINE CLASS View AS Custom 
 
      
 
     *----  ·í«e¸ê®Æ®w       
 
     PROTECTED lcDataBase 
 
               lcDataBase = [] 
 
      
 
     *----  ³o¨ÇÄݩʼȮɥΤ£¤W 
 
     *----  ³s±µ±±¨î½X 
 
     PROTECTED nConnHandle 
 
               nConnHandle = 0 
 
     *----  ³s±µ¦WºÙ 
 
     PROTECTED cConnection 
 
               cConnection = [] 
 
     *----  ³s±µ¹ïÀ³ªº¸ê®Æ®w 
 
     PROTECTED cDataBase 
 
               cDataBase = [] 
 
     *----  ¦øªA¾¹ªí¦W 
 
     PROTECTED cTable 
 
               cTable = [] 
 
     *----- dbcµø¹Ï¦WºÙ 
 
     PROTECTED cView 
 
               cView = [] 
 
     *----- ¬O§_³]¸m¹w³]È 
 
     PROTECTED lSetDefault 
 
     *----- ¬O§_¥Î¹w³]ÈÀˬd²{¦s¸ê®Æ 
 
     PROTECTED lCheckDataByDefault 
 
                  
 
     *----- Àˬd¦øªA¾¹¬O§_¦s¦b¦¹ªí 
 
     *----- ¨Ã¥Bªð¦^¤j¤p¼gªºªí¦W 
 
     *----- ²Ä¤@ӰѼÆtcTableÀˬdªºªí¦W¡A¤£°Ï¤À¤j¤p¼g 
 
     *----- ²Ä¤GӰѼƬO«á»O¦øªA¾¹³s±µ¡]¥Nªí¬Y¤@Ó¸ê®Æ®w) 
 
     PROCEDURE CheckTable 
 
          LPARAMETERS tnConnHandle ,tcTable 
 
          
 
          lcAlias = Alias() 
 
          *---- Á×§Kµ²ªG¦WºÙ©M¨t²Î¨ä¥L¤u§@¥hªí¦W«½Æ 
 
          lcTableDictionary = SYS(2015) 
 
          IF SQLTABLES(tnConnHandle ,[TABLE] ,lcTableDictionary) < 0 
 
             *---- ¥¢±Ñ¡Aªð¦^ 
 
            
 
             RETURN .F. 
 
          ENDIF 
 
          
 
          SELECT (lcTableDictionary) 
 
        
 
          LOCATE FOR LOWER(ALLTRIM(table_name)) == LOWER(ALLTRIM(tcTable)) 
 
      IF !FOUND()   
 
  USE 
 
  *---- ¦pªG¸ê®Æ®w¤¤¨S¦³¦¹ªí 
 
  RETURN [] 
 
      ENDIF 
 
      *----- ¦pªG§@¬°¤Þ¥Î¡A³o¥y¸Ü¦³¥Î 
 
          tcTable = ALLTRIM(table_name)     
 
          IF NOT EMPTY(lcAlias) 
 
             SELECT lcAlias 
 
          ENDIF         
 
          USE IN (lcTableDictionary) 
 
          RETURN tcTable 
 
     ENDPROC 
 
     *----- ÀˬdÄæ¦ì¬O§_¦s¦b 
 
     *----- ¦pªG¦s¦b«hªð¦^°Ï¤À¤j¤p¼gªºÄæ¦ì¦WºÙ 
 
     *----- ²Ä¤GӰѼƥ²¶·¬O°}¦C 
 
     PROCEDURE CheckField 
 
          LPARAMETERS tnConnHandle ,tcTable ,tacField ,tnColIndex 
 
          *---- tacField¬O¤@ÓÄæ¦ì°}¦C 
 
          *---- °}¦C¥i¯à¬O¦hºû 
 
          lcTableStru = SYS(2015) 
 
  IF SQLCOLUMN(tnConnHandle ,tcTable ,[NATIVE] ,lcTableStru) <= 0 
 
     RETURN .F. 
 
  ENDIF 
 
  SELECT (lcTableStru) 
 
 
  
 
          lnRow = ALEN(tacField ,1) 
 
          m.i = 1 
 
          
 
          *---- ¥[¤J½Õ¸Õ©R¥O                   
 
          lcAssert = SET([Asserts])           
 
          SET ASSERTS ON 
 
          
 
          
 
          
 
          FOR i = 1 TO lnRow 
 
              IF EMPTY(tnColIndex) 
 
                 lcField = tacField[m.i] 
 
                 LOCATE FOR  LOWER(ALLTRIM(column_name)) == LOWER(ALLTRIM(tacField[m.i])) 
 
                 IF FOUND() 
 
                    tacField[m.i] = ALLTRIM(column_name)                         
 
                 ELSE 
 
                    ASSERT FOUND() MESSAGE [Äæ¦ì] + tacField[m.i] + [¦b¦øªA¾¹ªí¤¤§ä¤£¨ì¤F]           
 
                 ENDIF               
 
              ELSE 
 
                 lcField = tacField[m.i,tnColIndex] 
 
                 LOCATE FOR  LOWER(ALLTRIM(column_name)) == LOWER(ALLTRIM(tacField[m.i,tnColIndex])) 
 
                 IF FOUND() 
 
                    
 
                    tacField[m.i,tnColIndex] = ALLTRIM(column_name)       
 
                                
 
                 ELSE 
 
                     ASSERT FOUND() MESSAGE [Äæ¦ì] + tacField[m.i,tnColIndex] + [¦b¦øªA¾¹ªí¤¤§ä¤£¨ì¤F] 
 
                 ENDIF 
 
              ENDIF 
 
              
 
          ENDFOR 
 
          
 
          USE IN (lcTableStru) 
 
          SET ASSERTS &lcAssert 
 
          
 
          
 
          RETURN tacField 
 
     ENDPROC 
 
      
 
     *----- ³Ð«Ø³s±µ 
 
     *----- ²Ä¤@ӰѼƬO¸ê®Æ®w 
 
     *----- ²Ä¤GӰѼƳs±µ¦WºÙ 
 
     PROCEDURE CreateConnection 
 
           LPARAMETERS tcDataBase ,tcConnection 
 
               *---- «O¦s·í«e¸ê®Æ®wªº¦WºÙ 
 
           *---- ³o¼Ë¤l¥i¥H¹ï¦hÓ¸ê®Æ®w¶i¦æ¾Þ§@ 
 
           This.lcDataBase = SET([Database]) 
 
            
 
           IF NOT EMPTY(tcDataBase) AND (LOWER(tcDataBase) # LOWER(This.lcDataBase) OR EMPTY(This.lcDataBase)) 
 
              IF NOT DBUSED(tcDataBase) 
 
                 OPEN DATABASE (tcDataBase) SHARED                   
 
              ENDIF   
 
              SET DATABASE TO (tcDataBase) 
 
           ENDIF 
 
            
 
           IF EMPTY(SET([Database])) 
 
              MESSAGEBOX([½Ð¥´¶}¸ê®Æ®w] ,16 ,[¿ù»~]) 
 
              RETURN 0 
 
           ENDIF 
 
            
 
           *----- Àˬd³s±µªº¦Xªk©Ê¡C¦pªG¦Xªk¡A¶i¦æ³s±µ 
 
           *----- «ØÄ³³s±µ¬°ªÅªº¬O§_¨t²Î¦Û°Ê¼u¥X³s±µ¹ï¸Ü¤è¶ô 
 
           *----- Åý¥Î¤á¿ï¾Ü¡A¼È®É¤£¥[¤J¦¹¥\¯à 
 
           IF EMPTY(tcConnection) OR VARTYPE(tcConnection) # [C] 
 
              RETURN 0 
 
           ELSE               
 
                
 
                  DIMENSION acConnection[1] 
 
                  IF ADBOBJECTS(acConnection ,[CONNECTION]) > 0 
 
                    IF ASCAN(acConnection ,UPPER(tcConnection)) <= 0 
 
                       MESSAGEBOX([³s±µ¦WºÙ] + tcConnection + [¤£¦s¦b¸ê®Æ®w¤¤] ,16 ,[¿ù»~]) 
 
                       RETURN 0 
 
                    ENDIF                                  
 
                  ENDIF 
 
              lnConnHandle = SQLCONNECT(tcConnection) 
 
              *---- ¦pªG³s±µ¤£³q 
 
              IF lnConnHandle <= 0 
 
                 MESSAGEBOX([¤£¯à³s±µ] ,16 ,[¿ù»~]) 
 
                 RETURN 0 
 
              ENDIF 
 
           ENDIF   
 
            
 
           RETURN lnConnHandle               
 
     ENDPROC 
 
      
 
     PROCEDURE CloseConnection 
 
         LPARAMETERS tnConnHandle 
 
          
 
           *---- ¦pªG°õ¦æµø¹Ï«e¸ê®Æ¤w¸g¥´¶}¤F¸ê®Æªº¸Ü 
 
           IF NOT EMPTY(This.lcDataBase) 
 
              SET DATABASE TO (This.lcDataBase) 
 
              This.lcDataBase = [] 
 
           ENDIF 
 
           RETURN SQLDISCONNECT(tnConnHandle) 
 
      
 
     ENDPROC 
 
     *----- ³Ð«Øµø¹Ï 
 
     *---- CreateViewªº°Ñ¼Æ¸ÑÄÀ 
 
     *---- ²Ä¤@ӰѼƬO¸ê®Æ®wªº¡A¦pªG¦¹°Ñ¼Æ¬°ªÅ¨º»ò¡ACreateView¨Ï¥Î·í«e¸ê®Æ®w ,¦pªG·í«e¸ê®Æ®w¨S¦³¥´¶}«h´£¥Ü¿ù»~ªð¦^ 
 
     *---- ²Ä¤GӰѼƬO¦øªA¾¹ªºªí¦W¡A¤£°Ï¤À¤j¤p¼g¡]Á×§Kµ{¦¡®v°O¿ù¤j¤p¼g¡^ 
 
     *---- ²Ä¤TӰѼƻ·ºÝµø¹Ïªº¦WºÙ 
 
     *---- ²Ä¥|Ó¬O»·ºÝ³s±µªº°Ñ¼Æ{²{¦s³s±µ¡]¼ÆÈ«¬¡^ , ³s±µ¦WºÙ¡]¦r¤¸«¬)},¨t²Î¦Û°ÊÃѧO 
 
     *---- ²Ä¤Ó°Ñ¼Æ¬O³]¸m¹w³]Ȫº¬O§_»ÝnÀˬd²{¦sªº¸ê®Æ 
 
 PROCEDURE CreateView 
 
           LPARAMETERS tcDataBase ,tcTable ,tcView ,tvConnection ,tlValidData ,tcWhere ,tcOrderBy ,tlFieldSetting ,tlUpdatable 
 
        
 
        lCloseHandle = .T.         
 
        *---- tvConnection ¬O¤w¸g¦s¦bªº³s±µ 
 
        IF VARTYPE(tvConnection) = [N] 
 
           lnConnHandle = tvConnection 
 
               tvConnection = [SQLSVR_UTGL] 
 
               lCloseHandle = .F. 
 
        ELSE             
 
               lnConnHandle = This.CreateConnection(tcDataBase ,tvConnection) 
 
           ENDIF 
 
           *This.CheckTable(lnConnHandle ,@tcTable) 
 
           *----- ³Ð«Ø»·µ{µø¹Ï 
 
 
       lcCreateViewSql = [CREATE SQL VIEW ] + tcView + [ REMOTE CONNECT ] + tvConnection + [ AS SELECT * FROM ] + tcTable 
 
 
       *---- «ØÄ³¦b«e±¤Ç°t¤j¤p¼g 
 
*---- µø¹Ï°Ñ¼Æ 
 
IF NOT EMPTY(tcWhere) 
 
  tcWhere = tcTable + SUBSTR(tcWhere ,AT([.] ,tcWhere )) 
 
  lcCreateViewSql = lcCreateViewSql + [ WHERE ] + tcWhere 
 
ENDIF 
 
*---- ±Æ§ÇÄæ¦ì 
 
IF NOT EMPTY(tcOrderBy) 
 
  lcOrderBy = tcTable + SUBSTR(tcOrderBy ,AT([.] ,tcOrderBy)) 
 
  lcCreateViewSql = lcCreateViewSql + [ ORDER BY ] + tcOrderBy 
 
ENDIF 
 
                
 
               *---- ²£¥Íµø¹Ï 
 
&lcCreateViewSql 
 
            
 
           IF tlFieldSetting 
 
              This.FieldSetting(lnConnHandle ,tcTable ,tcView ,tlUpdatable ,tlValidData) 
 
           ENDIF 
 
            
 
           *---- lCloseHandle ¦b¤èªk¶}ÀY©w¸q 
 
           IF lCloseHandle 
 
           IF This.CloseConnection(lnConnHandle) # 1 
 
              MESSAGEBOX([¤£¯àÂ_¶}³s±µ] ) 
 
           ENDIF 
 
           ENDIF 
 
            
 
  ENDPROC 
 
        
 
    *---- ¬O«üµø¹ÏÄæ¦ìªºÄÝ©Ê 
 
    *---- ²Ä¤@ӰѼƬO³s±µ 
 
    *---- ²Ä¤GӰѼƬO¦øªA¾¹ªí¡]°Ï¤À¤j¤p¼gªº¡^¡A¦pªG¤£²M·¡½Ð¨Ï¥ÎCheckTableÀò¨ú 
 
    *---- ²Ä¤TӰѼÆdbc¤¤ªºµø¹Ï¦WºÙ¡]¤£°Ï¤À¤j¤p¼g¡^ 
 
    *---- ²Ä¥|ӰѼƪí¥Ü§âªí³]¸m¬°¤£¥i§ó·sªº 
 
    *---- ²Ä¤Ó°Ñ¼ÆÅçÃÒ¸ê®Æªº¹w³]È 
 
  PROCEDURE FieldSetting 
 
           LPARAMETERS tnConnHandle ,tcTable ,tcView ,tlUpdatable ,tlValidData 
 
            
 
DBSetProp(tcView, [View] ,[UpdateType] , 1) 
 
DBSetProp(tcView, [View] ,[WhereType] , 1) 
 
DBSetProp(tcView, [View] ,[SendUpdates] , tlUpdatable) 
 
DBSetProp(tcView, [View] ,[FetchMemo] , .T.) 
 
 
 
*---- ³oùØ¥[¤J¤FNODATA 
 
*---- ¦pªG»ÝnÅçÃÒ¸ê®Æªº¹w³]È 
 
IF NOT USED(tcView) 
 
IF tlValidData 
 
  USE (tcView) IN 0 
 
ELSE   
 
                  USE (tcView) NODATA IN 0 
 
ENDIF 
 
ENDIF 
 
 
SELECT (tcView) 
 
GO BOTTOM 
 
        
 
       *---- ¥[¤J½Õ¸Õ©R¥O                   
 
               lcAssert = SET([Asserts])           
 
               SET ASSERTS ON 
 
          
 
*---- Àò¨úÄæ¦ìªº°t¸m¸ê°T 
 
lcTableStructure_F = SYS(2015) 
 
ln = SQLCOLUMN(tnConnHandle ,tcTable ,[NATIVE] ,lcTableStructure_F) 
 
*---- ³oùؤ@¯ë¥X²{³s±µ¯Å§Oªº¿ù»~ 
 
IF ln<=0 
 
  MESSAGEBOX(STR(ln)) 
 
ENDIF 
 
 
IF NOT USED(lcTableStructure_F) 
 
  ASSERT USED(lcTableStructure_F) MESSAGE [§ä¤£¨ìªí] + tcTable + [ªº«á»O°t¸m] 
 
ENDIF 
 
SET ASSERTS &lcAssert 
 
 
SELECT (lcTableStructure_F) 
 
GO TOP 
 
 
DO WHILE .NOT. EOF() 
 
   *---- lcField¬O°Ï¤À¤j¤p¼gªºÄæ¦ì¦WºÙ  
 
   lcField = TRIM(column_name) 
 
   lcDefault = ALLTRIM(column_def) 
 
    
 
   lcDefault = STRTRAN(lcDefault ,[)] ,[]) 
 
   lcDefault = STRTRAN(lcDefault ,[(] ,[]) 
 
   *---- ¦bdefaultȤ¤²£¥Íªº¹w³]È¥]§tasc½X¬°0ªº¦r¤¸ 
 
   lcDefault = STRTRAN(lcDefault ,CHR(0) ,[]) 
 
  
 
lcViewField = FORCEEXT(tcView ,lcField) 
 
lcUpdateField = FORCEEXT(tcTable ,lcField) 
 
 
SELECT (tcView) 
 
*---- ³]¸mÃöÁä¦r©M§ó·sÄæ¦ì 
 
lcSqlRemoteKeyField = DBGETProp(lcUpdateField ,[Field] ,[KeyField])     
 
DBSetProp(lcViewField ,[Field] ,[KeyField] ,lcSqlRemoteKeyField) 
 
*---- ³]¸m¬O§_¥i¥H§ó·s 
 
DBSetProp(lcViewField ,[Field] ,[Updatable] ,tlUpdatable) 
 
DBSetProp(lcViewField ,[Field] ,[UpdateName] ,lcUpdateField) 
 
*---- lcSqlType ªºªð¦^Ȯ榡¡A¦p¡GN(4,2) 
 
lcSqlType =DBGETPROP(lcViewField,'Field',[DataType]) 
 
lcSqlCutType = SUBS(lcSqlType ,1 ,1) 
 
   DO CASE 
 
      CASE lcSqlCutType = [C] 
 
           *---- ¦pªGSQLSERVERªº«á»O¨S¦³¦¹Äæ¦ìªº¹w³]È 
 
           IF EMPTY(lcDefault) 
 
            
 
              SQLEXEC(tnConnHandle ,[Alter Table ] + tcTable + [ Add Default '' For ] + lcField)    &&×§ïSQL¤¤ªº¹w³]È 
 
              lcDefault = [''] 
 
           ENDIF     
 
           *---- ¹ïÃöÁä¦r¶i¦æ³]¸m 
 
           IF lcField = [sqllno] 
 
              DBSetProp(lcViewField ,[Field] ,[Defaultvalue] , [Keyvalue()]) 
 
              REPLACE ALL &lcField WITH SYS(2015) + [¨t²Î] FOR EMPTY(&lcField) OR ISNULL(&lcField) 
 
           ELSE   
 
                      
 
              DBSetProp(lcViewField, 'Field', 'Defaultvalue', "&lcDefault") 
 
              REPLACE ALL &lcField WITH &lcDefault FOR ISNULL(&lcField) 
 
           ENDIF 
 
           *---- °O¿ý³Ð«ØªÌ 
 
           IF lcField="sys_creater"   
 
              DBSetProp(lcViewField ,[Field] ,[Defaultvalue] ,[UserName]) 
 
           ENDIF             
 
      CASE lcSqlCutType = [N] 
 
           IF EMPTY(lcDefault) 
 
              *---- ×§ïSQL¤¤ªº¹w³]È 
 
              SQLEXEC(tnConnHandle ,[Alter Table ] + tcTable + [ Add Default 0 For ] + lcField) 
 
              lcDefault = [0] 
 
           endif   
 
           lnLen = VAL(SUBSTR(lcSqlType ,3)) 
 
           lcOldType = STRTRAN(lcSqlType ,[N(] + ALLTRIM(STR(lnLen)) ,[]) 
 
           lcNewType  = [N(] + ALLTRIM(STR(lnLen-2)) + lcOldType 
 
          DBSETPROP(lcViewField ,[Field] ,[DataType] ,lcNewType) 
 
      CASE lcSqlCutType = [M] 
 
           IF EMPTY(lcDefault) 
 
              *---- ×§ïSQL¤¤ªº¹w³]È 
 
              SQLEXEC(tnConnHandle ,[Alter Table ] + tcTable + [ Add Default '' For ] + lcField)     
 
              lcDefault = [''] 
 
           ENDIF     
 
      CASE lcSqlCutType = [L] 
 
           IF EMPTY(lcDefault) 
 
              *---- ×§ïSQL¤¤ªº¹w³]È 
 
              SQLEXEC(tnConnHandle ,[Alter Table ] + tcTable + [ Add Default 0 For ] + lcField)   
 
              lcDefault = [.F.] 
 
           ELSE 
 
              lcDefault = IIF(lcDefault = [0] ,[.F.] ,[.T.]) 
 
           ENDIF     
 
      CASE lcSqlCutType = 
 
           IF EMPTY(lcDefault) 
 
              *---- ×§ïSQL¤¤ªº¹w³]È 
 
              SQLEXEC(tnConnHandle ,[Alter Table ] + tcTable + [ Add Default 0 For ] + lcField)   
 
              lcDefault = [0] 
 
           ENDIF     
 
           *----- ³]¸m³Ìªøªºªø«× 
 
          DBSETPROP(lcViewField ,[Field] ,[DataType] ,[N(13,4)]) 
 
      CASE lcSqlCutType = 
 
           IF EMPTY(lcDefault) 
 
              *---- ×§ïSQL¤¤ªº¹w³]È 
 
              SQLEXEC(tnConnHandle ,[Alter Table ] + tcTable + [ Add Default 0 For ] + lcField) 
 
              lcDefault = [0] 
 
           ENDIF     
 
          DBSETPROP(lcViewField ,[Field] ,[DataType] ,[N( ]) 
 
      CASE lcSqlCutType = [T] 
 
         DBSETPROP(lcViewField ,[Field] ,[DataType] ,[D]) 
 
           REPLACE ALL &lcField WITH null FOR year(&lcField)<1911 
 
   ENDCASE 
 
   *---- °w¹ï¼ÆÈ«¬Äæ¦ì¡A¤@¦¸©Ê³B²z  
 
   IF lcSqlCutType $ [NMLBI] 
 
      DBSetProp(lcViewField ,[Field] ,[Defaultvalue] ,[(&lcDefault)]) 
 
      REPLACE ALL &lcField WITH &lcDefault FOR ISNULL(&lcField) 
 
   ENDIF 
 
   SELECT (lcTableStructure_F) 
 
   SKIP 
 
ENDDO 
 
               USE IN (lcTableStructure_F) 
 
               USE IN (tcView) 
 
      ENDPROC 
 
ENDDEFINE _________________ #############################
 
§Ö¼Ö¶ý«}¨t¦C©¯ºÖ¦v°t,³Ü¤Q¥þÂû´ö~ì¨Ó©¯ºÖ¨º»ò²³æ!!
 
 
¾Ç·|VFP¨Ï¥ÎªÌªÀ°Ïªº·j´M,Code¤~·|§ó¦³½ì~
 
############################# | 
			 
		  | 
	 
	
		| ¦^³»ºÝ | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
±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§@ 
		 |