Powerd911 – Numéro #1 au Canada

Détecte si les tables, d’un modèle, ainsi que leurs données sont présentent dans un schéma de SGBD

Ces quelques lignes de code en Visual Basic Script permettent d’informer l’architecte, prenant connaissance des symboles graphiques sur un diagramme, de déterminer si les tables contenu dans un modèle physique sont présentent au niveau d’un schéma de base de données passé en paramètre et si des enregistrements sont associés à ces tables.

Compatible avec PowerDesigner/PowerAMC 16.5

'******************************************************************************
'* Nom du fichier : CHECK_TABLE.vbs
'* Définition : Si la table n'existe pas dans le SGBD on modifie l'épaisseur et la couleur de la ligne.
'* S'il n'y a pas d'enregistrement associé à la table on modifie la couleur de remplissage de l'objet
'* Modèle: Modèle de données physique (PDM)
'* Objets: Table
'* Auteur: Benoît Le Nabec
'* URL : http://www.Powerd911.guru
'* Créé: 2015-01-01
'* Version: 1.0
'******************************************************************************

Dim model
Set model = ActiveModel

' Appel la Sub procedure main
main model

' Sub Procedure main
sub main( ByRef aModel )

' Déclaration et connexion au schéma du SGBD Oracle
Dim ADODBConnection: Set ADODBConnection = CreateObject("ADODB.Connection")
Dim connected: connected = ConnectToOra( ADODBConnection )

' Si la connexion n'a pu être établi
if ( not connected ) then
'Indiquer au niveau de la trace que la connexion n'a pu être établi
output "La connexion a échouée"
Set ADODBConnection = Nothing
exit sub
end if

output "La connexion a été un succès"

' Création de l'objet qui va contenir le résultat
Dim ADODBRecordSet
Set ADODBRecordSet = CreateObject("ADODB.Recordset")

Dim rowCount 'Indique si l'objet existe
Dim tableName 'Nom de la table
Dim rowCountData 'Indique si nous avons des enregistrements
Dim owner

' On demande à l'utilisateur d'inscrire le nom du schéma
owner = InputBox("Nom du schéma :", "Identification du schéma", "SYSTEM")

' Pour chaque table dans le modèle
For each table in aModel.Tables
tableName = Trim( table.Name )

'Vérifie si l'objet existe dans le schéma passé en paramètre
rowCount = GetRowCount( ADODBConnection, ADODBRecordSet, tableName, owner )

'Si l'objet existe
if (RowCount) then
output "L'objet '" + tableName + "' existe dans le schéma '" + owner + "'"

rowCountData = GetRowCountData( ADODBConnection, ADODBRecordSet, tableName, owner )

' Pour chaque table affichée dans un diagramme
For each symbol in table.Symbols
symbol.LineWidth = 3 ' modifie l'épaisseur des lignes
symbol.LineColor = RGB(138, 110, 21) ' Modifie la couleur de la ligne pour "or"

'Si la table ne contiens pas d'enregistrement
if rowCountData = "0" then
output "L'objet '" + tableName + "' n'a pas de données"
' Assigne la couleur bleu à titre de couleur de remplissage
symbol.FillColor = RGB(178,214,252)
else
output "L'objet '" + tableName + "' a des données"
' Assigne la couleur grise à titre de couleur de remplissage
symbol.FillColor = RGB(100,100,100)
end if

Next

else
output "L'objet '" + tableName + "' n'existe pas dans le schéma '" + owner + "'"
' Pour chaque table affichée dans un diagramme
For each symbol in table.Symbols
symbol.LineWidth = 0 ' modifie l'épaisseur des lignes
symbol.LineColor = RGB(0, 128, 192) ' Modifie la couleur de la ligne pour "or"
Next
end if

Next

' Rafraichissement du diagramme courant
ActiveDiagram.RedrawAllViews()

'Fermeture de la connexion au SGBD
ADODBConnection.Close
Set ADODBRecordSet = Nothing
Set ADODBConnection = Nothing
exit sub
end sub

'Fonction de connexion à un SGBD Oracle
function ConnectToOra( ByRef aConnection )

'Default. Uses a server-side cursor
Const adUseClient = 3
aConnection.CursorLocation = adUseClient

aConnection.ConnectionTimeout = 300

Dim strConnection
Dim userid
Dim password

' On demande à l'utilisateur l'identifiant de connexion
userid = InputBox("Code utilisateur :", "Identification", "SYSTEM")

' On demande à l'utilisateur le mot de passe
password = InputBox("Mot de passe :", "Identification", "new_password")

strConnection = "Provider=OraOLEDB.Oracle;Data Source=MyDB;User ID=" + userid + ";Password=" + password

output "Connexion à Oracle"

aConnection.Open strConnection

'Si il y'a une erreur
if ( 0 <> err ) then
output "Une erreur s'est produite lors de la connexion au SGBD Oracle : " & _
err.number & " " & err.description & " " & err.Source
ConnectToOra = vbFalse
exit function
End if

' Connexion au SGBD Oracle réussie
ConnectToOra = vbTrue
Exit Function
End Function

const GET_ROW_COUNT_ERROR = -1
const GET_ROW_COUNT_NOT_FOUND = -2

' Indique si l'objet existe
function GetRowCount( ByRef aConnection, ByRef aRecordSet, aTableName, owner )
Dim SQLSelect
SQLSelect = "select count(*) from all_tables where owner = '" + owner + "' and table_name ='" + aTableName + "'"

'Exécute la requête
Set aRecordSet = aConnection.Execute( SQLSelect )

' Si une erreur est détectée
if ( 0 <> err ) then
output "Une erreur a été rencontrée lors de l'exécution de la requête " & _
SQLSelect & ": " & err.number & " " & err.description & " " & err.Source

'Indique qu'une erreur a été rencontrée
GetRowCount = GET_ROW_COUNT_ERROR
exit function
End if

' Indique qu'aucun enregistrement n'a été trouvé
if ( aRecordSet.BOF and aRecordSet.EOF ) then
GetRowCount = GET_ROW_COUNT_NOT_FOUND
Exit Function
end if

' Retourne le nombre d'enregistrement
GetRowCount = aRecordSet.Fields(0).Value
Exit Function
end function

' Indique si nous avons trouvé des données
function GetRowCountData( ByRef aConnection, ByRef aRecordSet, aTableName, owner )

Dim SQLSelect
SQLSelect = "select count(*) from " + aTableName

'Exécute la requête
Set aRecordSet = aConnection.Execute( SQLSelect )

' Si une erreur est détectée
if ( 0 <> err) then
output "Une erreur a été rencontrée lors de l'exécution de la requête " & _
SQLSelect & ": " & err.number & " " & err.description & " " & err.Source

'Indique qu'une erreur a été rencontrée
GetRowCount = GET_ROW_COUNT_ERROR
exit function
End if

' Indique qu'aucun enregistrement n'a été trouvé
if ( aRecordSet.BOF and aRecordSet.EOF ) then
GetRowCount = GET_ROW_COUNT_NOT_FOUND
Exit Function
end if

' Retourne le nombre d'enregistrement
GetRowCountData = aRecordSet.Fields(0).Value
Exit Function
end function

 

Laisser un commentaire