I have written the vbs script for doing reverse engineering (in PowerDesigner) but when I am running the script through Python, I am getting the error "Object Required": PdPDM Error. I have written the vbs script below.
' Define PDM file path
Const filename = "C:\test.pdm"
' SQL script file name
const sScrptFile = "C:test.sql"
Dim pModel, pOpt
' Create model with appropriate DBMS
Set pModel=CreateModel(PdPDM.cls_Model, "|DBMS=Teradata V16")
pModel.name = "test"
' Hide dialogs
InteractiveMode = im_Batch
Set MyPckg = pModel.Packages.CreateNew()
' package name and package code
MyPckg.name = "test"
MyPckg.code = "test"
Set opt = pModel.GetPackageOptions()
' Set reverse engineer mode to script file
opt.ReversedScript = True
' Set the SQL script file name
opt.ReversedFile = sScrptFile
' Start the reverse engineering
pModel.ReverseDatabase
pModel.save(filename)
I am not able to find from where to import PdPDM library in vbs script.
EDIT: we have read the suggested duplicate "Object required" when using Set in an assigment, but it is not at all the same problem, and the solution does not apply. In this case, we have a script working in PowerDesigner, which just cannot work outside of PD.
This is the general question of using PowerDesigner VBScript from outside PowerDesigner. Inside PD, it loads many typelibs before calling the script, which are not available when called through Windows Script.
The solution I've found is to write rather a .wsf file, than a .vbs, which allows adding typelib references.
<job id="VBSReverse">
<!-- Sybase PdCommon 16.7 Type Library -->
<reference guid="{A552E368-E3AD-452B-A703-9A2199B008D9}" version="16.7" />
<!-- Sybase PdPDM 16.7 Type Library -->
<reference guid="{B18A8271-9633-11D1-9914-006097355D9B}" version="16.7" />
<script language="VBScript">
option explicit
' Define PDM file path
Const filename = "C:\temp\test.pdm"
' SQL script file name
const sScrptFile = "C:\temp\test.sql"
dim app
set app = CreateObject("PowerDesigner.Application")
if not app is nothing then
Dim pModel
dim pOpt
' Create model with appropriate DBMS
Set pModel = app.CreateModel(PdPDM.cls_Model, "|DBMS=Teradata V16")
pModel.name = "test"
' Hide dialogs
app.InteractiveMode = im_Batch
dim MyPckg : Set MyPckg = pModel.Packages.CreateNew()
' package name and package code
MyPckg.name = "test"
MyPckg.code = "test"
dim opt : Set opt = pModel.GetPackageOptions()
' Set reverse engineer mode to script file
opt.ReversedScript = True
' Set the SQL script file name
opt.ReversedFile = sScrptFile
' Start the reverse engineering
pModel.ReverseDatabase
pModel.save(filename)
app.ActiveWorkspace.Close true
end if
</script>
</job>
In my test, I executed it with cscript test.wsf
.