1

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.

pascal
  • 3,287
  • 1
  • 17
  • 35

1 Answers1

0

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.

pascal
  • 3,287
  • 1
  • 17
  • 35
  • But it is giving error PdPDM : Object Required error while running through python and regarding extension I have remove that line and trying to run without it also but still same error . – sushil gurjar Apr 10 '23 at 13:36