此动态sql使用了动态描述区对象变量,通过该对象变量的四个属性,
Numinputs,Inparmtype,Numoutputs,outparmtype 我们能够得到输入参数个数,输入参数类型,输出参数个数,输出参数类型信息。其中,inparmtype是个数组,每个元素对应SQL中的一个问号;
可以利用setdynamicparm()具体设置输入的参数值。
(**注:在此语法中,除了declare 语句外,都要检查事务对象的SQLCODE属性,以判断当前sql语句的执行是否成功。**通过多次调用fetch语句,能够读取多条数据,每读出一条数据后,通常在循环语句中使用choose case 确定输出参数的类型后再用相应的函数得到其值。
如:String stringvar,sqlstatement int intvar sqlstatement=\ PREPARE SQLSA FROM :sqlstatement; DESCIRBE SQLSA TNTO SQLDA;
DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA; OPEN DYNAMIC my_cursor DESCRIPTOR SQLDA; FETCH my_cursor USING DESCRIPTOR SQLDA;
//当FETCH语句执行成功时,动态描述区sqlda 中包含了结果集的第一行数据,反复执行fetch可得其它数据。
//SQLDA.NUMoutputs中包含了输出参数的个数。 sqlda.outparmtype数据中包含了各个参数的数据类型。
choose case sqlda.outparmtype[1] case typestring!
stringvar=getdynamicstring(sqlda,1)
case typedecimal!,typedoble!,typeinteger!,typelong!,typereal!,typeboolean!
doublevar=sqlda.getdynamicnumber(1) case typedate!
datevar=sqlda.getdynamicdate(1) case typetime!
timevar=sqlda.getdynamictime(1) end choose
CLOSE my_cursor;
*************************************************************
动态描述区(DynamicDescriptionArea) //在动态SQL语句的第四种语法格式中,PB使用此类型的变量存储有关的输入和输入出的参数的信息。
//对于每一个应有程序来说,PB都提供了一个dynamicdescriptionarea类型的全局变量,名称为:SQLDA
属性: 类型 意义描述
Numinputs INTeger 输入参数的个数。输入参数在动态sql prepare 语句中说明。当执行了descibe 语句后,pb将填充该属性的值。 numoutputs integer 输出参数的个数。输出参数在动态sql prepare 语句中说明。如果数据库管理系统支持输出参数,则执行了descibe 语句后,pb将填充该属性的值。否则,在执行了fetch语句后填充。
inparmtype[] parmtype 一个数组,指示每个输入参数的类型。有效值为:
TypeBollean!,typedata!,typedatetime!,typedatedecimal!,typedouble!,typeinteger!,typelong!,typereal!,typestring!,typetime!,typeuint!,typeulong!,typeunknown.
outparmtype[] parmtype 一个数组,指示每个输出参数的类型,同上。
*********
事件:constructor //在创建该对象时触发 destructor //在删除时触发 ***********函数
1.Dynamicdescriptionarea.getdynamicdate(index) //功能:在应用程序执行了动态sql语句后,使用该函数得到data类型输出参数的数据值。
dynamicdescrptionarea:动态描述区对象名,通常用sqlda index:int类型,指明要得到第几个输出参数的值。(其值不能超过动态描述区对象numoutputs属性的值)
返回值:date.成功时返回index参数指示的输出参数的数据值。错误时返回:1900-01-01
如: for n=1 to sqlda.numoutputs
choose case slqca.outparmtype[n]
stringvar=sqlda.getdynamicstring(n)
case typedecimal!,typedoble!,typeinteger!,typelong!,typereal!,typeboolean!
doublevar=sqlda.getdynamicnumber(n) case typedate!
datevar=sqlda.getdynamicdate(n) case typetime!
timevar=sqlda.getdynamictime(n) case else
messagebox(\不知道是什么数据类型呀\ end choose next
2.sqlda.setdynamicparm(index,value)
//功能:设置动态描述区对象输入参数的值,这些参数将在sql open或sql execute语句中使用。
index:int类型,指明要设置第几个输入参数的值,(其值不能超过动态描述区对象numinputs属性的值) Value:要设置的输入参数的值 返回值: 成功时,1 失败为:-1 如: sqlda.setdynamicparm(1,\北京\将sqlda的第一个参数设置为\北京\
********************************************************************************************8
********************************************************************************************************
libarayexport(librayname,objectname,objecttype)
//功能:从指定应用库中以对象对象的语法定义格式卸出对象。 librayname:string 类型,指定要移出对象的应用库的名称。
objectname:string 类型,指定要移出对象的名称。 objecttype:枚举型。有:exportapplication!,exportdatawindow!,exportfunction!,exportmenu!,exportpipeline!,exportquery!,exportstructure!,exportuserobject!,exportwindow!
返回值:string,发生错误返回\如: string ls_dwsyn,ls_errors
ls_dwsyn=libraryexport(\ dw_1.create(ls_dwsn,ls_errors) //移出d_emp数据窗口的定义,然后在数据窗口控件中创建数据窗口对象。 ***********************
libraryimport(libraryname,objectname,objecttype,syntax,errors{,comments})
//功能:将以语法格式表示的数据数据窗口对象装入到指定的应用库。 librayname:string 类型,指定要移出对象的应用库的名称。objectname:string类型,指定要移入的数据窗口的名称。
objecttype:Importdatawindow!。syntax:string类型,指定要移入数据窗口对象的语法。
errors:string类型,用于在发生错误时保存出错信息。comments:string类型,用于指定移入库的注解。
返回值:int, 成功 为1,错误时为-1。
(*当应用程序在运行过程中动态创建数据窗口对象后,可能使用
liabrayimport()把动态数据窗口的定义保存到应用库中。以后可直接使用该对象了。
如:string dwsysntax,errorbuffer integer rtncode
dwsyntax=dw_1.describe(\
rtncode=librayimport(\wsyntax,errorbuffer)
*************************************************************************
*8888888888888888888888888888888888888888888888888888888888888888888888888
动态创建数据窗口
dw1.create(syntax,{errorbuffer})
//功能:用于动态地创建一个数据窗口。
dw1:表示要放入的数据窗口控件的名字。syntax:是一个字符串类型的变量,表示用来创建数据窗口对象源代码语法。errobuffer:string类型,用来表示错误信息存储的字符串变量名。 返回值:1 成功, -1 失败。
transaction.syntaxfromsql(sqlselect,presentation,err)
//功能:从一个sql select语句和指定数据窗口表现风格来生成数据窗口语法
transaction表示当前连接使用的事务对象名,一般为:SQLCA; sqlselect:string类型,用来生成数据窗口语法的sql select语句;presentation:string类型,用来指定数据窗口的表现风格。err:string类型,用来指定当前出错时错误信息的存放处。
如:string ls_sql,ls_syntax,ls_error_syntaxfromsql,ls_error_create ls_sql=\address.salary>4500\
ls_syntax=sqlca.syntaxfromsql(ls_sql,\_syntaxfromsql)
if len(ls_error_syntaxfromsql)>0 then
messagebox(\ else
dw_1.create(ls_syntax,ls_error_create) if len(ls_error_create)>0 then
messagebox(\ end if end if
dw_1.settransobject(sqlca) dw_1.retrieve()
*********************************************************************
******************************************* dw1.setvalidate(column,text)
///修改数据窗口控件指定列的有效性规则。
column:可为列名,也可用列号。 rule:string类型,其值是评价数据是否有效的有效性规则。
返回值:1 成功,-1 错误。(*当用户输入的值不满足该列的有效性规则时,将触发itemerror事件。如果有效规则中包含了数值,那么数据窗口要求这些数值使用美国格式。
如果要得到当前列的使用的有效规则,可使用:getvalidate(),如得到用户刚刚输入的值,可用gettext().
如:dw1.setvalidate(dw1.getcolumn(),\//把数据窗口的当前列的值限制到必须>0
如:dw1.setvalidate(dw1.getcolumn(),\把保障了用户输入的值<同一行上full_price列的值。 如:string
rule1,rule2=\w1.setvalidate(6,rule2) ************************* dw1.getvalue(column,index)
//功能:得到数据窗口指定列的值表或代码表中指定项的值。
column:得到所需值的列。 index:值表或代码表中数据项的索引号。

