The wonderful thing about PowerDesigner automation is that you can actually connect to database from VB Script to get some crucial information that is unavailable (or was not captured) at a reverse engineering phase.
The following script queries Oracle ALL_TABLES system view to find out if table in the model stores any data. Then those tables that are empty are highlighted with thick maroon frame.
The following script queries Oracle ALL_TABLES system view to find out if table in the model stores any data. Then those tables that are empty are highlighted with thick maroon frame.
On Error Resume Next function ConnectToOra( ByRef aConnection ) Const adUseClient = 3 aConnection.CursorLocation = adUseClient aConnection.ConnectionTimeout = 300 Dim strConnection strConnection = "Provider=OraOLEDB.Oracle;Data Source=your_tns_name;User ID=your_id;Password=your_pass" output "Connecting to Oracle" aConnection.Open strConnection if ( 0 <> err ) then output "An error occurred trying to open Oracle System DSN: " & _ err.number & " " & err.description & " " & err.Source ConnectToOra = vbFalse exit function End if ConnectToOra = vbTrue Exit Function End Function const GET_ROW_COUNT_ERROR = -1 const GET_ROW_COUNT_NOT_FOUND = -2 function GetRowCount( ByRef aConnection, ByRef aRecordSet, aTableName ) Dim SQLSelect SQLSelect = "select num_rows from all_tables where owner like 'SHOPS_MOD' and table_name like '" & aTableName & "'" Set aRecordSet = aConnection.Execute( SQLSelect ) if ( 0 <> err ) then output "An error occurred trying to execute query " & _ SQLSelect & ": " & err.number & " " & err.description & " " & err.Source GetRowCount = GET_ROW_COUNT_ERROR exit function End if if ( aRecordSet.BOF and aRecordSet.EOF ) then GetRowCount = GET_ROW_COUNT_NOT_FOUND Exit Function end if GetRowCount = aRecordSet.Fields(0).Value Exit Function end function sub main( ByRef aModel ) Dim ADODBConnection: Set ADODBConnection = CreateObject("ADODB.Connection") Dim connected: connected = ConnectToOra( ADODBConnection ) if ( not connected ) then output "Not connected. Terminating" Set ADODBConnection = Nothing exit sub end if output "Successfully connected to Oracle" Dim ADODBRecordSet Set ADODBRecordSet = CreateObject("ADODB.Recordset") Dim rowCount Dim tableName Dim strRowCount For each table in aModel.Tables tableName = Trim( table.Name ) rowCount = GetRowCount( ADODBConnection, ADODBRecordSet, tableName ) strRowCount = "" & rowCount output tableName & "->" & rowCount if ( "0" = strRowCount ) then For each symbol in table.Symbols symbol.LineWidth = 75 ' double symbol.LineColor = RGB( 138, 0, 21 ) Next end if Next ADODBConnection.Close Set ADODBRecordSet = Nothing Set ADODBConnection = Nothing exit sub end sub Dim model Set model = ActiveModel main model
No comments:
Post a Comment