Resources Up

#INCLUDE DEFINES.H

PARAMETER cScrptName, cAppName, cDbName, cScrptType, cInstallPath
** cScrptType is 'FULL' OR 'MIGRATE'
PUBLIC oSqlSrvr, oDb
STORE .F. TO llError, lRelease, llSchemaAdded
ON ERROR llError = .T.
lnParams = PARAMETERS()
IF  lnParams < 4  OR NOT (cScrptType == 'FULL' OR cScrptType == 'MIGRATE')
	WAIT WINDOW "Usage: SchemaGen2 <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 + 'Just Tables Error.log') TO eh
STORE FCREATE(cScrptName) TO _TEXT
STORE FCREATE(_LOG_PATH + "\" + UPPER(cAppName) + 'Just 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
/******************** Script Started: <<TTOC(DATETIME())>> ********************/
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 FOR ALLTRIM( UPPER( type )) =  'TABLE'
	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
IF ((jcType = 'TABLE') .AND. (EVALUATE(cAppName + "_Tables.Order") = 0))
TEXT
GO
CREATE SCHEMA AUTHORIZATION sa
ENDTEXT
ENDIF
** For Full Schema generation
IF cScrptType = 'MIGRATE'
TEXT
<<STRTRAN(IIF(jcType = 'TABLE', STRTRAN(oDb.Tables(cTblName).Script(_MIGRATE_SCRIPT), ;
					'(suser_name(null))', 'SYSTEM_USER'), ;
		STRTRAN(oDb.Views(cTblName).Script(_MIGRATE_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

TEXT
/******************** Script Ended: <<TTOC(DATETIME())>> ********************/
PRINT 'Creation of Tables(Only) Completed.'
GO
ENDTEXT
= FCLOSE(ah)
SET TEXTMERGE OFF
SET TEXTMERGE TO
IF FSEEK(eh, 0, 2) > 0
	= FCLOSE(eh)
	cLogFile = _LOG_PATH + "\" + cAppName + 'Just 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.