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

°ÊºA«Ø¥ßµø¹Ï

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



µù¥U®É¶¡: 2003-03-12
¤å³¹: 1698
¨Ó¦Û: tunglo

²Ä 1 ¼Ó

µoªíµ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±µ
*----- «Øij³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

*---- «Øij¦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(Cool])
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¤~·|§ó¦³½ì~
#############################
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§
±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§@