在学习和使用PB时候所进行的知识总结(6)

2019-03-15 20:10

也可是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

********************************************************************************************************


在学习和使用PB时候所进行的知识总结(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:技术经济学试题及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: