4. Embedded SQL for Fortran : Dynamic Programming for Fortran : How to Set SQLNAME for Dynamic FRS
 
Share this page                  
How to Set SQLNAME for Dynamic FRS
A few extra steps are required when you use the sqlvar with Dynamic FRS statements. These extra steps relate to the differences between Dynamic FRS and Dynamic SQL and are described in the SQL Reference Guide and the Forms-based Application Development Tools User Guide.
When using the SQLDA in a forms input or output using clause, set the sqlname to a valid field or column name. If this name was set by a previous describe statement, it must be retained or reset by the program. If the name refers to a hidden table field column, the program must set sqlname directly. If your program sets sqlname directly, it must also set sqlnamel and sqlnamec. The name portion does not need to be padded with blanks.
For example, a dynamically named table field has been described, and the application always initializes any table field with a hidden 6-byte character column called "rowid." The code used to retrieve a row from the table field including the hidden column and _state variable would have to construct the two named columns.
UNIX:
...
     character*6 rowid
         integer*4 rowstate
...

     exec frs describe table :formname :tablename 
    1     into :sqlda
...

     sqlda.sqld = sqlda.sqld + 1
         col_num = sqlda.sqld
C Set up to retrieve rowid
         sqlda.sqlvar(col_num).sqltype = IISQ_CHA_TYPE
         sqlda.sqlvar(col_num).sqllen = 6
         sqlda.sqlvar(col_num).sqldata = loc(rowid)
         sqlda.sqlvar(col_num).sqlind = 0
         sqlda.sqlvar(col_num).sqlname.sqlnamel = 5
    sqlda.sqlvar(col_num).sqlname.sqlnamec(1:5) = 'rowid'
         sqlda.sqld = sqlda.sqld + 1
         col_num = sqlda.sqld
C Set up to retrieve _STATE
         sqlda.sqlvar(col_num).sqltype = IISQ_INT_TYPE
         sqlda.sqlvar(col_num).sqllen = 4
         sqlda.sqlvar(col_num).sqldata = loc(rowstate)
         sqlda.sqlvar(col_num).sqlind = 0
         sqlda.sqlvar(col_num).sqlname.sqlnamel = 6
         sqlda.sqlvar(col_num).sqlname.sqlnamec(1:6)
    1                                       = '_state'
...

     exec frs getrow :formname :tablename using
    1       descriptor :sqlda  
VMS:
...
     character*6 rowid
     integer*4 rowstate
...

     exec frs describe table :formname :tablename 
    1     into :sqlda
...

     sqlda.sqld = sqlda.sqld + 1
     col_num = sqlda.sqld
! Set up to retrieve rowid
     sqlda.sqlvar(col_num).sqltype = IISQ_CHA_TYPE
     sqlda.sqlvar(col_num).sqllen = 6
     sqlda.sqlvar(col_num).sqldata = %loc(rowid)
     sqlda.sqlvar(col_num).sqlind = 0
     sqlda.sqlvar(col_num).sqlname.sqlnamel = 5
     sqlda.sqlvar(col_num).sqlname.sqlnamec(1:5) = 'rowid'
     sqlda.sqld = sqlda.sqld + 1
     col_num = sqlda.sqld
! Set up to retrieve _STATE
     sqlda.sqlvar(col_num).sqltype = IISQ_INT_TYPE
     sqlda.sqlvar(col_num).sqllen = 4
     sqlda.sqlvar(col_num).sqldata = %loc(rowstate)
     sqlda.sqlvar(col_num).sqlind = 0
     sqlda.sqlvar(col_num).sqlname.sqlnamel = 6
     sqlda.sqlvar(col_num).sqlname.sqlnamec(1:6) 
    1                                       = '_state'
...

     exec frs getrow :formname :tablename using
    1        descriptor:sqlda 
Windows:
...
     character*6 rowid
         integer*4 rowstate
...

     exec frs describe table :formname :tablename 
    1     into :sqlda
...

     sqlda.sqld = sqlda.sqld + 1
         col_num = sqlda.sqld
C Set up to retrieve rowid
         sqlda.sqlvar(col_num).sqltype = IISQ_CHA_TYPE
         sqlda.sqlvar(col_num).sqllen = 6
         sqlda.sqlvar(col_num).sqldata = loc(rowid)
         sqlda.sqlvar(col_num).sqlind = 0
         sqlda.sqlvar(col_num).sqlname.sqlnamel = 5
    sqlda.sqlvar(col_num).sqlname.sqlnamec(1:5) = 'rowid'
         sqlda.sqld = sqlda.sqld + 1
         col_num = sqlda.sqld
C Set up to retrieve _STATE
         sqlda.sqlvar(col_num).sqltype = IISQ_INT_TYPE
         sqlda.sqlvar(col_num).sqllen = 4
         sqlda.sqlvar(col_num).sqldata = loc(rowstate)
         sqlda.sqlvar(col_num).sqlind = 0
         sqlda.sqlvar(col_num).sqlname.sqlnamel = 6
         sqlda.sqlvar(col_num).sqlname.sqlnamec(1:6)
    1                                       = '_state'
...

     exec frs getrow :formname :tablename using
    1       descriptor :sqlda