6. Embedded SQL for BASIC : Dynamic Programming for BASIC : The SQLDA Record
 
Share this page                  
The SQLDA Record
The SQLDA (SQL Descriptor Area) passes type and size information about an SQL statement, an Ingres form, or a table field between Ingres and your program.
In order to use the SQLDA, you should issue the include sqlda statement at the proper scope of the source file, from where the SQLDA will be referenced. The include sqlda statement generates a BASIC include directive to a file that defines the SQLDA record type. The file does not declare an SQLDA record variable; your program must declare a variable of the specified type. You can also code this record declaration directly instead of using the include sqlda statement. When coding the declaration yourself, you can choose any name for the record type.
The definition of the SQLDA (as specified in the include file) is:
!
! IISQ_MAX_COLS - Maximum number of columns returned from Ingres
!
  declare word constant IISQ_MAX_COLS = 300
!
! IISQLDA - SQLDA with maximum number of entries for
! variables.
!
  record IISQLDA
         string sqldaid = 8
          long sqldabc
          word sqln
          word sqld
          group sqlvar(IISQ_MAX_COLS)
                  word sqltype
                  word sqllen
                  long sqldata ! Address of any type
                  long sqlind ! Address of 2-byte integer
                  group sqlname
                      word     sqlnamel
                      string     sqlnamec = 34
                  end group sqlname
          end group sqlvar
  end record IISQLDA
!
! Type Codes
!
  declare integer constant IISQ_DTE_TYPE = 3
! Date - Out
  declare integer constant IISQ_MNY_TYPE = 5
! Money - Out
  declare integer constant IISQ_DEC_TYPE =10
! Decimal - Out
  declare integer constant IISQ_CHA_TYPE = 20
! Char - In/Out
  declare integer constant IISQ_VCH_TYPE = 21 
! Varchar - In/Out
  declare integer constant IISQ_INT_TYPE = 30 
! Integer - In/Out
  declare integer constant IISQ_FLT_TYPE = 31 
! Float - In/Out
  declare integer constant IISQ_TBL_TYPE = 52
! Table field - Out
  declare integer constant IISQ_DTE_LEN = 25 
! Date length
!
! Dynamic allocation sizes - When allocating an
! SQLDA for N results use:
! IISQDA_HEAD_SIZE + (N * IISQDA_VAR_SIZE)
!
  declare integer constant IISQDA_HEAD_SIZE = 16
  declare integer constant IISQDA_VAR_SIZE = 48
Record Definition and Usage Notes:
The record type definition of the SQLDA is called IISQLDA. This is done so that an SQLDA variable can be called "SQLDA" without causing a compile-time BASIC conflict. You are not required to call your SQLDA record variable "SQLDA".
The sqlvar array is an array of IISQ_MAX_COLS (300) elements. If you declare a record variable of type IISQLDA, then the program will have a variable with IISQ_MAX_COLS sqlvar elements.
Note that the sqlvar array begins at subscript 0 because of the BASIC default of arrays being zero-based. Because this array begins at subscript zero, it implies that relevant result variables are described by the elements 0 through sqld-1, rather than 1 through sqld.
The sqldata and sqlind group members are declared as long integers. These must be set to the addresses of other result variables before using the SQLDA to retrieve or set Ingres data in the database or form. You can use the BASIC loc function to assign addresses.
If you declare your own SQLDA record type and variable, you must confirm that the record layout is identical to that of the IISQLDA record type, although you can allocate a different number of sqlvar array elements.
The nested group sqlname is a varying length character string consisting of a length and data area. The sqlnamec member contains the name of a result field or column after a describe (or prepare into) statement. The length of the name is specified by sqlnamel. The characters in the sqlnamec field are blank padded. You can also set the sqlname group by a program using Dynamic FRS. The program is not required to pad sqlnamec with blanks. For more information, see How to Set SQLNAME for Dynamic FRS in this chapter.
The list of type codes represents the types that will be returned by the describe statement, and the types used by the program when retrieving or setting data with an SQLDA. The type code IISQ_TBL_TYPE indicates a table field and is set by the FRS when describing a form that contains a table field.