Resources Up

#INCLUDE DEFINES.H

PARAMETER cScrptName, cAppName, cDbName, cScrptType, cInstallPath
** cScrptType is 'FULL' or 'AUDIT'
PUBLIC oSqlSrvr, oDb
STORE .F. TO llError, lRelease, llSchemaAdded
ON ERROR llError = .T.
lnParams = PARAMETERS()
IF  lnParams < 4  OR NOT (cScrptType == 'FULL' OR cScrptType == 'AUDIT')
	WAIT WINDOW "Usage: SchemaGen <Script Name>, <App Name>, <Database Name>, <Script Type>" + ;
			CHR(13) + "Script Type is 'FULL' or 'AUDIT'"
	ON ERROR
	RETURN
ENDIF
IF TYPE('osqlsrvr') <> 'O'
	WAIT WINDOW NOWAIT "Connecting to SQL Server..."
	osqlsrvr = createobject('sqlole.sqlserver')
	IF TYPE('oSQLSrvr') <> 'O'
		WAIT WINDOW "Unable to create SQL Server OLE object." TIME 2.0
		RELEASE osqlSrvr
		ON ERROR
		RETURN
	ENDIF
	ret =osqlsrvr.connect(_SQL_SERVER, _SQL_LOGIN, _SQL_PASSWORD)
	lRelease = .T.
ENDIF
oDb = osqlsrvr.databases(cDbName)
IF TYPE('oDb') <> 'O'
	WAIT WINDOW "Unable to create SQL Server Database object." TIME 2.0
	RELEASE osqlSrvr, oDb
	ON ERROR
	RETURN
ENDIF
WAIT WINDOW NOWAIT "Obtaining Tables List..."
STORE FCREATE(_LOG_PATH + "\" + cAppName + ' Tables Error.log') TO eh
STORE FCREATE(cScrptName) TO _TEXT
STORE FCREATE(_LOG_PATH + "\" + UPPER(cAppName) + ' Tables Audit.log') TO ah
IF _TEXT = -1
	WAIT WINDOW "Unable to create output file." TIMEOUT 2.0
	RELEASE ALL
	ON ERROR
	RETURN
ENDIF
SET TEXTMERGE ON NOSHOW
TEXT
PRINT 'Creating Tables...'
GO
CREATE SCHEMA AUTHORIZATION sa
ENDTEXT
USE (IIF(TYPE('cInstallPath') = 'C', cInstallPath, _INSTALL_PATH) + "\" + cAppName + "_Tables")
lcCount = ALLT(STR(RECCOUNT()))
lnRecCount = 0
SELECT COUNT(*) FROM (cAppName + "_Tables") WHERE UPPER(ALLT(Type)) = 'VIEW' INTO ARRAY alnViewCnt
IF _TALLY = 0
	DIMENSION alnViewCnt[1]
	alnViewCnt[1]	= 0
ENDIF
SCAN
	lnRecCount = lnRecCount + 1
	jcType = UPPER(ALLTRIM(EVALUATE(cAppName + "_Tables.Type")))
	cTblName = "dbo." + ALLT(EVALUATE(cAppName + "_Tables.Name"))
	WAIT WINDOW NOWAIT "Generating for " + cTblName + "..." +
				ALLT(STR(lnRecCount)) + "/" + lcCount
** For 'CREATE SCHEMA' stmt addition
IF ((jcType = 'VIEW') .AND. (NOT llSchemaAdded) .AND. (cScrptType = 'FULL') .AND. (alnViewCnt[1] > 0))
llSchemaAdded	= NOT llSchemaAdded
TEXT
GO
PRINT 'Creating Views...'
GO
CREATE SCHEMA AUTHORIZATION sa
ENDTEXT
ENDIF

IF ((jcType = 'TABLE') .AND. (EVALUATE(cAppName + "_Tables.Order") = 0))
TEXT
GO
CREATE SCHEMA AUTHORIZATION sa
ENDTEXT
ENDIF
** For Full Schema generation
IF cScrptType = 'FULL'
TEXT
<<STRTRAN(IIF(jcType = 'TABLE', STRTRAN(oDb.Tables(cTblName).Script(_SCHEMA_SCRIPT), ;
					'(suser_name(null))', 'SYSTEM_USER'), ;
		STRTRAN(oDb.Views(cTblName).Script(_SCHEMA_SCRIPT), ;
					'(suser_name(null))', 'SYSTEM_USER')), 'GO')>>
GRANT SELECT ON <<cTblName>> TO public
ENDTEXT
ENDIF

** For Full Audit Database Schema generation
IF cScrptType = 'AUDIT'
TEXT
<<STRTRAN(STRTRAN(oDb.Tables(cTblName).Script(_SCHEMA_AUDIT), 'IDENTITY (1, 1) '), 'GO')>>
GRANT INSERT ON <<cTblName>> TO public
ENDTEXT
ENDIF
	IF llError
		llError = .F.
		= FPUTS(eH, cTblName + ":" + MESS())
		= FFLUSH(eH)
	ELSE
		= FPUTS(ah, cTblName)
		= FFLUSH(ah)
	ENDIF
	= FFLUSH(_TEXT)
ENDSCAN

** Create schema objects with the GO.
TEXT
GO
ENDTEXT

** Only for full scripting with DRI
IF cScrptType = 'FULL'
TEXT
PRINT 'Creating Indexes for Tables...'
GO
ENDTEXT
** Generate indexes for the tables now.
lcCount = ALLT(STR(RECCOUNT()))
lnRecCount = 0
SCAN FOR Order > 0
	lnRecCount = lnRecCount + 1
	jcType = UPPER(EVALUATE(cAppName + "_Tables.Type"))
	cTblName = "dbo." + ALLT(EVALUATE(cAppName + "_Tables.Name"))
	WAIT WINDOW NOWAIT "Generating indexes for " + cTblName + "..." + ;
				ALLT(STR(lnRecCount)) + "/" + lcCount
IF jcType = 'TABLE'
TEXT
<<oDb.Tables(cTblName).Script(_INDEX_SCRIPT)>>
ENDTEXT
ENDIF
	IF llError
		llError = .F.
		= FPUTS(eH, cTblName + ":" + MESS())
		= FFLUSH(eH)
	ELSE
		= FPUTS(ah, cTblName)
		= FFLUSH(ah)
	ENDIF
	= FFLUSH(_TEXT)
ENDSCAN
ENDIF
** Only for full scripting with DRI
USE
TEXT
/******************** Script Ended: <<TTOC(DATETIME())>> ********************/
PRINT 'Creation of Tables and Views Completed.'
GO
ENDTEXT
= FCLOSE(ah)
SET TEXTMERGE OFF
SET TEXTMERGE TO
IF FSEEK(eh, 0, 2) > 0
	= FCLOSE(eh)
	cLogFile = _LOG_PATH + "\" + cAppName + ' Tables Error.log'
	MODI FILE &cLogFile NOWAIT
ELSE
	= FCLOSE(eh)
ENDIF
IF lRelease
	WAIT WINDOW NOWAIT "Releasing Resources..."
	osqlsrvr.Close
	RELEASE ALL
	CLEAR ALL
	WAIT CLEAR
	ON ERROR
	RETURN
ENDIF
This page was last updated on May 01, 2006 04:28 PM.