📄 gendbc.prg
字号:
WriteFile(m.hGTFile, m.cCreateTable)
ENDFOR
*! Get Index Information
WriteFile(m.hGTFile, CRLF + "***** " + BEGIN_INDEX_LOC + m.cTableName + " *****")
m.cCollate = ""
FOR m.nInner_Loop = 1 TO TAGCOUNT()
m.cTag = UPPER(ALLTRIM(TAG(m.nInner_Loop)))
IF m.cCollate <> IDXCOLLATE(m.nInner_Loop)
m.cCollate = IDXCOLLATE(m.nInner_Loop)
WriteFile(m.hGTFile, "SET COLLATE TO '" + m.cCollate + "'")
ENDIF
IF !EMPTY(m.cTag)
DO CASE
CASE PRIMARY(m.nInner_Loop)
IF !EMPTY(SYS(2021, m.nInner_Loop))
IF EMPTY(m.g_cFilterExp)
MessageBox(NOT_SUPPORTED_LOC, 64, WARNING_TITLE_LOC)
ENDIF
m.g_cFilterExp = m.g_cFilterExp + CRLF + ;
TABLE_NAME_LOC + m.cTableName + CRLF + ;
PRIMARY_KEY_LOC + SYS(14, m.nInner_Loop) + CRLF + ;
FILTER_EXP_LOC + SYS(2021, m.nInner_Loop)
ENDIF
WriteFile(m.hGTFile, "ALTER TABLE '" + m.cTableName + ;
"' ADD PRIMARY KEY " + SYS(14, m.nInner_Loop) ;
+ " TAG " + m.cTag)
CASE CANDIDATE(m.nInner_Loop)
IF EMPTY(SYS(2021, m.nInner_Loop))
WriteFile(m.hGTFile, "INDEX ON " + SYS(14, m.nInner_Loop) + ;
" TAG " + m.cTag + " CANDIDATE")
ELSE
WriteFile(m.hGTFile, "INDEX ON " + SYS(14, m.nInner_Loop) + ;
" TAG " + m.cTag + " FOR " + SYS(2021, m.nInner_Loop) + ;
+ " CANDIDATE")
ENDIF
CASE UNIQUE(m.nInner_Loop)
IF(EMPTY(SYS(2021, m.nInner_Loop)))
WriteFile(m.hGTFile, "INDEX ON " + SYS(14, m.nInner_Loop) + ;
" TAG " + m.cTag + " UNIQUE")
ELSE
WriteFile(m.hGTFile, "INDEX ON " + SYS(14, m.nInner_Loop);
+ " TAG " + m.cTag + " FOR " + SYS(2021, m.nInner_Loop) ;
+ " UNIQUE")
ENDIF
OTHERWISE
IF(EMPTY(SYS(2021, m.nInner_Loop)))
WriteFile(m.hGTFile, "INDEX ON " + SYS(14, m.nInner_Loop) + ;
" TAG " + m.cTag + ;
IIF(DESCENDING(m.nInner_Loop), " DESCENDING ", ""))
ELSE
WriteFile(m.hGTFile, "INDEX ON " + SYS(14, m.nInner_Loop);
+ " TAG " + m.cTag + " FOR " + SYS(2021, m.nInner_Loop) + ;
IIF(DESCENDING(m.nInner_Loop), " DESCENDING ", ""))
ENDIF
ENDCASE
ELSE
EXIT FOR
ENDIF
ENDFOR
*! Get Properties For Table
WriteFile(hGTFile, CRLF + "***** " + BEGIN_PROP_LOC + m.cTableName + " *****")
FOR m.nInner_Loop = 1 TO m.nNumberOfFields
m.cFieldAlias = m.cTableName + "." + aAll_Fields(m.nInner_Loop, 1)
m.cFieldHeaderAlias = [DBSETPROP('] + m.cFieldAlias + [', 'Field', ]
m.cTemp = DBGETPROP(m.cFieldAlias, "Field", "Caption")
IF !EMPTY(cTemp)
m.cTemp = STRTRAN(m.cTemp, ["], ['])
WriteFile(hGTFile, m.cFieldHeaderAlias + ['Caption', "] + m.cTemp + [")])
ENDIF
m.cTemp = DBGETPROP(m.cFieldAlias, "Field", "Comment")
IF !EMPTY(m.cTemp)
m.cTemp = STRTRAN(m.cTemp, ["], ['])
*! Strip Line Feeds
m.cTemp = STRTRAN(m.cTemp, CHR(10))
*! Convert Carriage Returns To Programmatic Carriage Returns
m.cTemp = STRTRAN(m.cTemp, CHR(13), '" + CHR(13) + "')
WriteFile(m.hGTFile, m.cFieldHeaderAlias + ['Comment', "] + m.cTemp + [")])
ENDIF
m.cTemp = DBGETPROP(m.cFieldAlias, "Field", "InputMask")
IF !EMPTY(m.cTemp)
m.cTemp = STRTRAN(m.cTemp, ["], ['])
WriteFile(m.hGTFile, m.cFieldHeaderAlias + ['InputMask', "] + m.cTemp + [")])
ENDIF
m.cTemp = DBGETPROP(m.cFieldAlias, "Field", "Format")
IF !EMPTY(m.cTemp)
m.cTemp = STRTRAN(m.cTemp, ["], ['])
WriteFile(m.hGTFile, m.cFieldHeaderAlias + ['Format', "] + m.cTemp + [")])
ENDIF
m.cTemp = DBGETPROP(m.cFieldAlias, "Field", "DisplayClass")
IF !EMPTY(m.cTemp)
m.cTemp = STRTRAN(m.cTemp, ["], ['])
WriteFile(m.hGTFile, m.cFieldHeaderAlias + ['DisplayClass', "] + m.cTemp + [")])
ENDIF
m.cTemp = DBGETPROP(m.cFieldAlias, "Field", "DisplayClassLibrary")
IF !EMPTY(m.cTemp)
m.cTemp = STRTRAN(m.cTemp, ["], ['])
WriteFile(m.hGTFile, m.cFieldHeaderAlias + ['DisplayClassLibrary', "] + m.cTemp + [")])
ENDIF
ENDFOR
m.cTemp = DBGETPROP(m.cTableName, "Table", "Comment")
IF !EMPTY(m.cTemp)
m.cTemp = STRTRAN(m.cTemp, ["], ['])
*! Strip Line Feeds
m.cTemp = STRTRAN(m.cTemp, CHR(10))
*! Convert Carriage Returns To Programmatic Carriage Returns
m.cTemp = STRTRAN(m.cTemp, CHR(13), '" + CHR(13) + "')
WriteFile(m.hGTFile, [DBSETPROP('] + m.cTableName + [', 'Table', ] + ['Comment', "] + m.cTemp + [")])
ENDIF
m.cTemp = DBGETPROP(m.cTableName, "Table", "DeleteTrigger")
IF !EMPTY(m.cTemp)
WriteFile(hGTFile, "CREATE TRIGGER ON '" + m.cTableName + ;
"' FOR DELETE AS " + m.cTemp)
ENDIF
m.cTemp = DBGETPROP(m.cTableName, "Table", "InsertTrigger")
IF !EMPTY(m.cTemp)
WriteFile(m.hGTFile, "CREATE TRIGGER ON '" + m.cTableName + ;
"' FOR INSERT AS " + m.cTemp)
ENDIF
m.cTemp = DBGETPROP(m.cTableName, "Table", "UpdateTrigger")
IF !EMPTY(m.cTemp)
WriteFile(m.hGTFile, "CREATE TRIGGER ON '" + m.cTableName + ;
"' FOR UPDATE AS " + m.cTemp)
ENDIF
m.cTemp = DBGETPROP(m.cTableName, "Table", "RuleExpression")
IF !EMPTY(m.cTemp)
m.cError = DBGETPROP(m.cTableName, "Table", "RuleText")
IF !EMPTY(cError)
WriteFile(m.hGTFile, "ALTER TABLE '" + m.cTableName + ;
"' SET CHECK " + m.cTemp + " ERROR " + ;
m.cError)
ELSE
WriteFile(m.hGTFile, "ALTER TABLE '" + m.cTableName + ;
"' SET CHECK " + m.cTemp)
ENDIF
ENDIF
WriteFile(m.hGTFile, "ENDFUNC")
WriteFile(m.hGTFile, "")
FCLOSE(m.hGTFile)
RETURN
**************************************************************************
**
** Function Name: GETVIEW(<ExpC>, <ExpC>)
** Creation Date: 1994.12.01
** Purpose :
**
** To take an existing FoxPro 3.0/5.0 View, and generate an output
** program that can be used to "re-create" that view.
**
** Parameters:
**
** cViewName - A character string representing the name of the
** existing view
** cOutFileName - A character string containing the name of the
** output file
**
** Modification History:
**
** 1994.12.01 JHL Created Program, runs on Build 329 of FoxPro 3.0
** 1994.12.02 KRT Added to GenDBC, removed third parameter, cleaned up
** 1994.12.08 KRT Assume Database is open to speed up operation
** 1996.04.12 KRT Added new properties for Visual FoxPro 5.0
** Prepared / CompareMemo / FetchAsNeeded
** 1996.05.14 KRT Added more properties for views
** 1996.05.16 KRT Adjusted for return a blank string instead of a logical
** value on Prepared, etc.. if the field does not exist
** in the database (Version 3.0 database converted to 5.0)
** 1996.05.16 KRT Added the DataType property
** 1996.06.26 KRT Added support for ParameterList
** 1996.07.19 KRT Added support for Offline Views
** 1996.08.07 KRT Added support for BatchUpdateCount, Comment
***************************************************************************************
PROCEDURE GetView
LPARAMETERS cViewName, cOutFileName
PRIVATE ALL EXCEPT g_*
m.nFileHand = FCREATE(m.cOutFileName, 0)
IF m.nFileHand < 1
FatalAlert(NO_TEMP_FILE_LOC + m.cOutFileName, .T.)
ENDIF
*! Get View Information for later use
m.nSourceType = DBGetProp(m.cViewName, 'View', 'SourceType')
m.cConnectName = ALLTRIM(DBGetProp(m.cViewName, 'View', 'ConnectName'))
m.cSQL = ALLTRIM(DBGetProp(m.cViewName, 'View', 'SQL'))
m.cnUpdateType = ALLTRIM(STR(DBGetProp(m.cViewName, 'View', 'UpdateType')))
m.cnWhereType = ALLTRIM(STR(DBGetProp(m.cViewName, 'View', 'WhereType')))
m.clFetchMemo = IIF(DBGetProp(m.cViewName, 'View', 'Fetchmemo'),'.T.','.F.')
m.clShareConnection = IIF(DBGetProp(m.cViewName, 'View', 'ShareConnection'),'.T.','.F.')
m.clSendUpdates = IIF(DBGetProp(m.cViewName, 'View', 'SendUpdates'),'.T.','.F.')
m.cnUseMemoSize = ALLTRIM(STR(DBGetProp(m.cViewName, 'View', 'UseMemoSize')))
m.cnFetchSize = ALLTRIM(STR(DBGetProp(m.cViewName, 'View', 'FetchSize')))
m.cnMaxRecords = ALLTRIM(STR(DBGetProp(m.cViewName, 'View', 'MaxRecords')))
m.ccTables = ALLTRIM(DBGetProp(m.cViewName, 'View', 'Tables'))
m.clPrepared = IIF(!EMPTY(DBGetProp(m.cViewName, 'View', 'Prepared')), '.T.', '.F.')
m.clCompareMemo = IIF(!EMPTY(DBGetProp(m.cViewName, 'View', 'CompareMemo')), '.T.', '.F.')
m.clFetchAsNeeded = IIF(!EMPTY(DBGetProp(m.cViewName, 'View', 'FetchAsNeeded')), '.T.', '.F.')
m.cParams = ALLTRIM(DBGetProp(m.cViewName, 'View', 'ParameterList'))
m.lOffline = DBGetProp(m.cViewName, 'View', 'Offline')
m.cComment = DBGETPROP(m.cViewName, 'View', 'Comment')
IF !EMPTY(m.cComment )
m.cComment = STRTRAN(m.cComment , ["], ['])
*! Strip Line Feeds
m.cComment = STRTRAN(m.cComment , CHR(10))
*! Convert Carriage Returns To Programmatic Carriage Returns
m.cComment = STRTRAN(m.cComment , CHR(13), '" + CHR(13) + "')
ENDIF
m.cnBatchUpdateCount = ALLTRIM(STR(DBGetProp(m.cViewName, 'View', 'BatchUpdateCount')))
*! Generate Comment Block
WriteFile(m.nFileHand, "FUNCTION MakeView_"+FIXNAME(m.cViewName))
m.cCommentBlock = "***************** " + BEGIN_VIEW_LOC + m.cViewName + ;
" ***************" + CRLF
WriteFile(m.nFileHand, m.cCommentBlock)
*! Generate CREATE VIEW command
m.cCreateString = 'CREATE SQL VIEW "'+ALLTRIM(m.cViewName)+'" ; '+CRLF
IF m.nSourceType != 1 && If it isn't a local view
m.cCreateString = m.cCreateString + ' REMOTE '
IF !EMPTY(m.cConnectName)
m.cCreateString = m.cCreateString + 'CONNECT "' + m.cConnectName + '" ; '+CRLF
ENDIF
ENDIF
m.cCreateString = m.cCreateString + ' AS '+ m.cSQL + CRLF
WriteFile(m.nFileHand, m.cCreateString)
*! GENERATE code to Set View Level Properties
m.cViewDBSetPrefix = [DBSetProp(']+m.cViewName+[', 'View', ]
WriteFile(m.nFileHand, m.cViewDBSetPrefix + ['UpdateType', ] + m.cnUpdateType + [)])
WriteFile(m.nFileHand, m.cViewDBSetPrefix + ['WhereType', ] + m.cnWhereType + [)])
WriteFile(m.nFileHand, m.cViewDBSetPrefix + ['FetchMemo', ] + m.clFetchMemo + [)])
WriteFile(m.nFileHand, m.cViewDBSetPrefix + ['SendUpdates', ] + m.clSendUpdates + [)])
WriteFile(m.nFileHand, m.cViewDBSetPrefix + ['UseMemoSize', ] + m.cnUseMemoSize + [)])
WriteFile(m.nFileHand, m.cViewDBSetPrefix + ['FetchSize', ] + m.cnFetchSize + [)])
WriteFile(m.nFileHand, m.cViewDBSetPrefix + ['MaxRecords', ] + m.cnMaxRecords + [)])
WriteFile(m.nFileHand, m.cViewDBSetPrefix + ['Tables', '] + m.ccTables + [')])
WriteFile(m.nFileHand, m.cViewDBSetPrefix + ['Prepared', ] + m.clPrepared + [)])
WriteFile(m.nFileHand, m.cViewDBSetPrefix + ['CompareMemo', ] + m.clCompareMemo + [)])
WriteFile(m.nFileHand, m.cViewDBSetPrefix + ['FetchAsNeeded', ] + m.clFetchAsNeeded + [)])
WriteFile(m.nFileHand, m.cViewDBSetPrefix + ['FetchSize', ] + m.cnFetchSize + [)])
IF !EMPTY(m.cParams)
WriteFile(m.nFileHand, m.cViewDBSetPrefix + ['ParameterList', "] + m.cParams + [")])
ENDIF
WriteFile(m.nFileHand, m.cViewDBSetPrefix + ['Comment', "] + m.cComment + [")])
WriteFile(m.nFileHand, m.cViewDBSetPrefix + ['BatchUpdateCount', ] + m.cnBatchUpdateCount + [)])
WriteFile(m.nFileHand, m.cViewDBSetPrefix + ['ShareConnection', ] + m.clShareConnection + [)])
IF m.lOffline
WriteFile(m.nFileHand, 'CREATEOFFLINE("' + m.cViewName + '")')
ENDIF
*! GENERATE code to Set Field Level Properties
USE (DBC()) AGAIN IN 0 ALIAS GenViewCursor EXCLUSIVE
SELECT GenViewCursor
LOCATE FOR ALLTRIM(UPPER(GenViewCursor.ObjectName)) == m.cViewName AND ;
GenViewCursor.ObjectType = 'View'
m.nObjectId = GenViewCursor.ObjectId
SELECT ObjectName FROM GenViewCursor ;
WHERE GenViewCursor.ParentId = m.nObjectId ;
INTO ARRAY aViewFields
USE in GenViewCursor
WriteFile(m.nFileHand, CRLF + '*!* Field Level Properties for ' + m.cViewName)
IF _TALLY # 0
FOR m.nLoop = 1 TO ALEN(aViewFields, 1)
m.cFieldAlias = m.cViewName + "." + ALLTRIM(aViewFields(nLoop, 1))
m.clKeyField = IIF(DBGetProp(m.cFieldAlias, 'Field', 'KeyField'),'.T.','.F.')
m.clUpdatable = IIF(DBGetProp(m.cFieldAlias, 'Field', 'Updatable'),'.T.','.F.')
m.ccUpdateName = ALLTRIM(DBGetProp(m.cFieldAlias, 'Field', 'UpdateName'))
m.cViewFieldSetPrefix = [DBSetProp(']+m.cFieldAlias+[', 'Field', ]
WriteFile(m.nFileHand, '* Props for the '+m.cFieldAlias+' field.')
WriteFile(m.nFileHand, m.cViewFieldSetPrefix + ['KeyField', ] + m.clKeyField + [)])
WriteFile(m.nFileHand, m.cViewFieldSetPrefix + ['Updatable', ] + m.clUpdatable + [)])
WriteFile(m.nFileHand, m.cViewFieldSetPrefix + ['UpdateName', '] + m.ccUpdateName + [')])
m.cTemp = DBGETPROP(m.cFieldAlias, "Field", "RuleExpression")
IF !EMPTY(m.cTemp)
m.cTemp = STRTRAN(m.cTemp, ["], ['])
WriteFile(m.nFileHand, m.cViewFieldSetPrefix + ['RuleExpression', "]+m.cTemp+[")])
ENDIF
m.cTemp = DBGETPROP(m.cFieldAlias, "Field", "RuleText")
IF !EMPTY(m.cTemp)
m.cTemp = STRTRAN(m.cTemp, ["], ['])
WriteFile(m.nFileHand, m.cViewFieldSetPrefix + ['RuleText', "]+m.cTemp+[")])
ENDIF
m.cTemp = DBGETPROP(m.cFieldAlias, "Field", "Caption")
IF !EMPTY(m.cTemp)
m.cTemp = STRTRAN(m.cTemp, ["], ['])
WriteFile(m.nFileHand, m.cViewFieldSetPrefix + ['Caption', "] + m.cTemp + [")])
ENDIF
m.cTemp = DBGETPROP(m.cFieldAlias, "Field", "Comment")
IF !EMPTY(m.cTemp)
m.cTemp = STRTRAN(m.cTemp, ["], ['])
*! Strip Line Feeds
m.cTemp = STRTRAN(m.cTemp, CHR(10))
*! Convert Carriage Returns To Programmatic Carriage Returns
m.cTemp = STRTRAN(m.cTemp, CHR(13), '" + CHR(13) + "')
WriteFile(m.nFileHand, m.cViewFieldSetPrefix + ['Comment', "] + m.cTemp + [")])
ENDIF
m.cTemp = DBGETPROP(m.cFieldAlias, "Field", "InputMask")
IF !EMPTY(m.cTemp)
m.cTemp = STRTRAN(m.cTemp, ["], ['])
WriteFile(m.nFileHand, m.cViewFieldSetPrefix + ['InputMask', "] + m.cTemp + [")])
ENDIF
m.cTemp = DBGETPROP(m.cFieldAlias, "Field", "Format")
IF !EMPTY(m.cTemp)
m.cTemp = STRTRAN(m.cTemp, ["], ['])
WriteFile(m.nFileHand, m.cViewFieldSetPrefix + ['Format', "] + m.cTemp + [")])
ENDIF
m.cTemp = DBGETPROP(m.cFieldAlias, "Field", "DisplayClass")
IF !EMPTY(m.cTemp)
m.cTemp = STRTRAN(m.cTemp, ["], ['])
WriteFile(m.nFileHand, m.cViewFieldSetPrefix + ['DisplayClass', "] + m.cTemp + [")])
ENDIF
m.cTemp = DBGETPROP(m.cFieldAlias, "Field", "DisplayClassLibrary")
IF !EMPTY(m.cTemp)
m.cTemp = STRTRAN(m.cTemp, ["], ['])
WriteFile(m.nFileHand, m.cViewFieldSetPrefix + ['DisplayClassLibrary', "] + m.cTemp + [")])
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -