也可是true或false,但属性值总是以\或\来保存。
如:if dw1.object.datawindow.readonly='yes' then ********** //不能写成if dw1.object.datawindow.readonly=true then
*************************************************************************************************************************
******************************************************************* 存储对象的使用:
如: datastore ids_dept
ids_dept=create datastore ids_dept.dataobject=\
ids_dept.settransobject(sqlca) ids_dept.retrieve()
ids_dept.object.data.dept_id[ids_dept.insertrow(0)]='001' ids_dept.setsort(\ ids_dept.sort() destory ids_dept
*******************************************************************************************************
**********8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888 **************8 关于对象的知识:
1.对象的使用:A:声明,B:创建C:释放 如: transacton newtrans 声明
newtrans=create transacton 创建 newtrans.autocommit=true destory newtrans 释放
(注:PB中还提供了废品对象收集功能:基本原理:给对象一个引用计数,当程序代码的运行超出了
对象的某个引用的活动范围时,减少对象的引用计数量;当引用计数量为0时,即表示这些对象和类不再使用。
可以用 garbagecollectgettimelimit()
garbagecollectsettimelimit(),garbagecollect() ) 2.在程序中访问对象的函数和事件的格式:
{objectname}.{type}{ calltype}{ when} function({argumetlist})
当派生对象中的函数和事件覆盖了祖先的函数和事件时,如不做别说明,将执行派生对对象的函数代码。
访问祖先对象中函数和事件的格式:
{objectname}.ancestorclass:{type} {when} function({argumetlist}) 如:w_demo::enent ue_process()
***************************************************************************************************
*******************88888888888888888888888888888888888888888888888 **********************************
********
8888888888888888888888888888888888888888888888888888888888888888888888
动态SQL
类型一://既无输入参参数、也无结果集
语法格式: EXECUTE IMMEDIATE SQLStatement {using transaction object}; 其中:sqlstatement是个字符串,其内容是有效的Sql语句;(这种类型的动态sql通常用于执行数据操作语句(如:定义表、删除表等)以及某数据库特有的Sql语句。
例:string mysql
mysql=\integer notnull,\char(10) not null,\char(20) not null)\
execute immediate :mysql using sqlca; 类型二://有输入参数,但没有结果集
语法格式:prepare dynamicstagingarea from sqlstatement {using transactionobject}; execute dynamicstagingarea using {parameterlist};
其中 dynamicstagingarea 是个动态策略变量(类型为:dynamicstagingarea),通常使用sqlsa; sqlstatement 是个字符串(可以是常量也可以是变量),其内容是有效的sql语句,sql语句中使用(?)代表所需参数;
parameterlist 是参数列表,各参数对应于sqlstatement中的问号。 动态策略区用于准备sql语句及所需参数个数,它的属性在运行时应用程序不能访问,sqlsa是缺省的动态策略区变量。 如: int emp_id_var=56 prepare sqlsa
from \ execute sqlsa using :emp_id_var; 类型三://编译时已经知道参数和结果集的列 a.使用游标格式:
declare cursor //说明动态游标 dynamic cursor
for dynamicstatingarea;
prepare dynamicstagingarea from slqstatement //准备动态策略区 {using transactionobject}; open dynamic cursor //打开语句 {using parameterlist};
fetch cursor into {using Hostvariablelist}; //读取一行数据 close cursor; //关闭
b.使用存储过程(和使用游标格式类似,只是使用execute语句来代替上面的open语句)格式: declare Procedure
dynamic Procedure
for dynamicstatingarea;
prepare dynamicstagingarea from slqstatement {using transactionobject}; open dynamic Procedure
{using parameterlist};
EXECUTE Procedure into {using Hostvariablelist}; close Procedure;
////其中cursor 和procedure 是游标和过程名; dynamicstagingarea是动态策略变量,通常用SQLSA; SQLSatement是字符串(常量或变量均可,变量时变量名前加上冒号(:),其内容是sql语句,并使用问号代表参数;Parameterlist是对应于sqlstatement中问号的参数列表;
hostvariblelist 是powerscript主变量(即在其前面加上冒号的powerscript变量); transactionobject是事务对象名,缺省时用:sqlca 如:
DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA; //1 int emp_id_var
string emp_state_var='MA' STRING Sqlstatement
sqlstatement=\ prepare SQLSA FROM : Sqlstatement; //2
OPEN DYNAMIC my_cursor using :emp_state_var; //3 FETCH my_cursor INTO :EMP_id_var; //4
(示例中略了必要的sql语句执行状态检查工作,应在除了DECLARE语句外,执行了SQL语句后,都应检查sqlcode属性,以判断是否成功 CLOSE my_cursor; //5
类型四://开发程序时不知道参数和结果集 格式:DECLARE CUrsor/Procedure DYNAMIC CURSOR/PROCEDURE FOR DynamicStaginArea;
PREPARE DynamicstagingArea FROM SQLStatement {USING Transactionobject}; DESCRIBE DYnamicstagingArea
INTO DynamicDescriptionArea; OPEN DYNAMIC Cursor
USING DESCRIPTOR Dynamicdescriptionarea}; EXECUTE DYNAMIC Procedure
USING descriptor DynamicDescriptionArea; FETCH Cursor/Procedure
using descriptor Dynamicdescriptionarea; close cursor/procedure;
//DynamicStaginArea:动态策略区变量,通常用SQLSA;SQLStatement:字符串的Sql语句。DynamicDescriptionArea:动态描述区变量,类型
为:DynamicDescriptionArea,通常用SQLDA;Transactionobject:通常用SQLCA;
此动态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
********************************************************************************************************