Database 版 (精华区)

发信人: joy ( 雨送黄昏花易落), 信区: Database
标  题: pb应用程序举例
发信站: 紫 丁 香 (Mon Jul 27 10:34:54 1998), 转信

程序段01
建立事务对象并设置事务对象参数,该程序段常用于应用对象Open脚本
   
Transaction SQLServerTrans  //说明SQL Server的事务对象
SQLCA.DBMS="OR6"            //设置数据库为ORACLE V6
SQLCA.Logid="scott"         //设置用户名为"scott"
DQLCA.Logpass="tiger"       //设置口令为"tiger"
SQLCA.servername="T:scosysv:orac"  //设置服务器名
CONNECT;                          //连接到数据库ORACLE6

SQLServerTrans TRANSACTION        //创建SQL Server 事务对象
SQLServerTrans.DBMS="SYBASE"      //设置数据库为SYBASE
SQLServerTrans.Logid="sa"         //设置用户名为"sa"
SQLServerTrans.Logpass=           //设置口令为空
SQLServerTrans.servername="SYBASE"  //设置服务器名
CONNECT USING SQLServerTrans;       //连接到数据库SYBASE
Insert into auths(author_clde) value('A00001') Using
       SQLServerTrans;              //插入到SYBASE 一条纪录
Insert into emp(ename) values('Smith');  //插入到oracle一条纪录
DISCONNECT;                        //断开到ORACLE的连接
DISCONNECT USING SQLServerTrans;    //断开到SYBASE的连接
DBSTROY SQLServerTrans              //清除事务对象 SQLServerTrans
程序段02
该程序段利用游标实现多个记录的模糊查询

string name
string V1 ='A%'
DECLARE C1 CURSOR FOR          //定义光标,光标名为C1.
   SELECT name FROM auths
   WHERE author_code like : %V1;
OPEN C1;                       //打开光标,执行此光标对应的 SQL 语

lab1:
FETCH C1 INTO :name;          //取记录
if SQLCA.SQLCode=0 then
   if name="王达琳" then
        delete from auths      //删除"王达琳'这条记录
         WHERE CURRENT OF C1;

   end if 

   if name="冯兆鸣" then
        update auths
        set nationality='汉族'    //修改"冯兆鸣"的民族
        WHERE CURRENT OF C1;
   end if
goto lab1                     //如果成功取出记录,则取下一条
end if
程序段03
这段程序利用动态游标含参数查询多条记录并输出多个参数

string strvar
int intvar,i
string dstring
dstring="SELECT name, sex FROM auths"
DESCRIBE SQLSA FROM : dstring;
DECLARE C1 DYNAMIC CURSOR FOR SQLSA;

lab1:
FETCH C1 USING DESCRIPTOR SQLDA;
if SQLCA.SQLCode=0 then             //若FETCH成功
   for i=1 to SQLDA.NumOutputs
                 //SQLDA.NumOutPuts  含有输出参数个数
       CHOOSE CASE SQLDA.OutparmType[i]
           CASE TypeString!
               strvar= GetDynamicString (SQLDA,i)
           CASE TypeInteger!
               intvar= GetDynamicNumber (SQLDA,i)
       END CHOOSE
    next
   got lab1       //如果成功取出记录,则取下一条
end if 
CLOSE C1;
程序段04
下面这段程序,查询指定分组中的指定项,若没有指定项,就出现提示信息,
若有,则高亮指定行。

boolean foundtag
long break
foundtag=FALSE
break=1
do while (not foundtag)
 break=dw_1.FindGroupChange (break,1)
 if break<=0 then exit    //若没有分隔组或发生错误,则退出
//若在分隔组中发现指定的记录,就设foundtag 为 TRUE
 if dw_1. GetItemString (break,"nativeplace_code")="003" &
    then foundtag=TRUE
 if break=dw_1.RowCount ( ) then exit
 break=break+1
loop
if foundtag=FALSE then MessageBox ("提示信息","没有找到指定"&+"的籍贯码")
if foundtag=TRUE then
    dw_1.SelectRow (break,TRUE)
    dw_1.ScrollToRow (break)
end if
程序段05
这段程序查询所有无值的项,并提示用户输入信息

long row
int colnbr
string colname
row=1
colnbr=1
DO WHILE row <> 0
//若出错,就退出
if dw_1.FindRequired (primary!,row,colnbr,colname,TRUE) < 0 then
    exit
end if 
//若row非0,就是发现了无值的项,则显示提示信息
if row <> 0 then
    MessageBox ("所需值丢失","在列"+colname +"和行" & + string (row))
//使光标移到需要输入值的项
    dw_1. SetColumn (colnbr)
    dw_1. ScrollToRow (row)
end if 
LOOP
程序段06
下面这段程序写在窗口的Open事件上,找到当前的CPU及操作系统的信息,
其中ENV为environment变量类型

environment env
integer i
string os_type
i=getenvironment(env)     //为environment变量env赋值
choose case env.cputype   //找到系统cpu类型
  case !286!
    mle_1. text='286'
  case !386!
    mle_1. text='386'
  case !486!
    mle_1. text='486'
  case pentium!
    mle_1. text='Pentium'
  case powerpc!
    mle_1. text='PowerPC'
end choose

choose case env.ostype   //找到系统操作系统类型
  case macintosh!
    os_trpe='Macintosh'
  case Windows!
    os_type='Windows'
  case Windowsnt!
    os_type='Windows NT'
end choose

mle_1.text=mle_1.text+"~r~n"+os_type  //将cpu和操作系统类型写入多行
编辑器mle_1中
程序段07
这段程序用于窗口的存盘按钮的clicked事件处理脚本

int n
CONNECT;
dw_1.SetTransObject (SQLCA)
dw_2.SetTransObject (SQLCA)
n=dw_1.Update (TRUE,FALSE)
if n=1 then
    n=dw_2.Update (TRUE,FALSE)
end if 
if n=1 then
    dw_1.ResetUpdate ( )
    dw_2.ResetUpdate ( )
    COMMIT;
else
    ROLLBACK;
end if
程序段08
这段程序是将窗口的OLE 2.0 控制中的OLE对象存在文件中,可以作为窗口"另存
为"按钮的clicked事件处理程序

string pname, fname
GetFileSaveName ("保存文件",pname, fname, "ole", "OLE Files(*.ole),
                    *.ole,& DOC Files(*.doc),*.doc)
//显示标准 File SaveAs 窗口,定义缺省后缀为.doc
//并将选中的文件放在fname 中
ole.ole_1.SaveAs (fname)
//将特定.doc存储文件中的OLE对象放到窗口上的OLE 2.0控制上
程序段09
这段程序将窗口上的OLE 2.0 控制保存在创建的OLEStorage变量中

int n,i,m
olestorage sub1
olestorage stg_first
stg_first=CREATE OLEStorage
i=str_first.Open("c:xx.ole")    //打开存储 stg_first
n=ole.ole_1.SaveAs(stg_first,"sub1")
程序段10
这段程序将源OLEStorage变量 stg_first保存在目标OLEStorage变量stg_second
的子存储sub1中

boolean exist
int result,i,m,n
string pname, fname
getfilesavename ("保存文件",pnme,fname,"ole","OLE Files(*.ole),
               *.ole,& DOC Files(*.doc),*.doc)
stg_first=CREATE olestorage
stg_second=CREATE olestorage    //创建两个存储
m=stg_second.open(fname)   //打开存储stg_decond,fname 可以是一个
                             固定的文件名
i=stg_first.Open("c:xx.ole")  //打开存储stg-first
resule=stg_first.SaveAs("sub1",stg_second)
stg_second.MemberExists("sub1",exist)  //判断SaveAs函数是否运动成功
//如果成功就显示成功信息
if exist then messagebox("成功","父存储中存在sub1子存储。",Exclamation!) 程序段10
这段程序将源OLEStorage变量 stg_first保存在目标OLEStorage变量stg_second
的子存储sub1中

boolean exist
int result,i,m,n
string pname, fname
getfilesavename ("保存文件",pnme,fname,"ole","OLE Files(*.ole),
               *.ole,& DOC Files(*.doc),*.doc)
stg_first=CREATE olestorage
stg_second=CREATE olestorage    //创建两个存储
m=stg_second.open(fname)   //打开存储stg_decond,fname 可以是一个
                             固定的文件名
i=stg_first.Open("c:xx.ole")  //打开存储stg-first
resule=stg_first.SaveAs("sub1",stg_second)
stg_second.MemberExists("sub1",exist)  //判断SaveAs函数是否运动成功
//如果成功就显示成功信息
if exist then messagebox("成功","父存储中存在sub1子存储。",Exclamation!)
程序段11
该段程序定义了func_validationtext ( )用户自定义函数,
该函数完成校验规则

func_validationtext(gettext( ))=0
//func-validationtext ( )为用户自定义函数

用户自定义函数func_validationtext( ) 的内容为(这是在"函数'画笔中编写的):
int k 
select count(*) into : k from auths where author_code=:auth_code;
//auth_code为此函数传递参数
if len(trim(auth_code))<>4 or left(auth_code,1)<>"A" or k>0 then //校验规则
      return 1    //如不符合校验规则,返回1
else
      teturn 0    //如符合校验规则,返回0
end if
程序段12
这段程序是将数据库表"nativeplaces"中的值循环写入数据窗口列
"nativeplace_code"中

string code
string nativeplace
int i=1
declare cl cursor for
   select native_place,nativeplace_code from
   nativeplaces using SQLCA;
open c1;
fetch c1 into : nativeplace, : code;
DO WHILE sql.sqlcode=0
   setvalue(dw_1,"nativeplace_code",+i,nativeplace+"~t"+code)
   i=i+1
   fetch c1 into : nativeplace,:code;
loop
close c1;
程序段13
这段程序用于数据存储处理,当存储出错时,提示出错信息,该程序段用于
"存盘"的clicked事件脚本

if update(dw_1, true,false)=1 then
   if update(dw_2.,true,false)=1 then
         dw_1.resetupdate ( )
         dw_2.resetupdate ( )
         commit;
         dw_1.reset( )
         dw_2.reset( )
       else
         rollback;
         messagebox("错误信息","存盘失败")
      end if 
    else
      rollback;
      messagebox("错误信息","存盘失败")
end if
程序段14
这段程序在数据窗口中定义了一个统计图,单击统计图形数据窗口时,
抽取鼠标单击到的切片,然后双击抽取的切片,得到抽取的百分比,
该程序段用于数据窗口的clicked的事件中
GetDataPieExplode()得到饼图中取出的切片所占的百分比
SetDataPixExplode()使这个切片离开饼图中心的距离。

integer series, datapoint
grObjectType clickedtye
integer percent
percent=60
clickedtype=dw_1. ObjectAtPointer("gr_1",series,datapoint)
//series为组号,datapoint存储点中的数据,gr_1为统计图对象名
IF (series>0 and datapoint>0) THEN
dw_1. SetDataPieExplode("gr_1",series,datapoint, percent)
       //抽取点中的切片离开圆心的距离,为半径的60%
END IF
//在数据窗口中doubleclicked事件中脚本如下
integer series,datapoint
grObjectType clickedtype
integer percent
clickedtype=dw_1.ObjectAtPointer("gr_1",series,datapoint)
IF (series>0 and datapoint>0 ) THEN
     // 得到切片被抽取的百公比后,显示这个百分比  
  dw_1.GetDataPieExplode("gr_1",series,datapoint,& percent)
  MessageBox("切片抽取的百分比",dw_1.CategoryName("gr_1",datapoint) &
     +"这个切片"+"被抽取了"+ String(percent)+"%")
END IF
程序段15
这段程序用在命令按钮上,用来得到DDE服务器数据

int return_value
string data
return_value=getremote("DDE通信",data,"my_appl",my_topic")
//"DDE通信"是数据在DDE服务器窗口的位置,这里指DDE服务器窗口内的一单行
//编辑器(如DDE服务器是Excel应用,dde_getremote_field可为"RIC2")
if return_value=1 then
//返回数据写入多行编辑器mle_1中
   mle_1. text=("Getremote调用~r~n~r~n~r~n"+"="+data)
else
   messagebox("getremote调用错误",String(return_value))
end if
程序段16
这段程序用于建立DDE通讯间的热连接

int return_value
return_value=starthotlink("DDE通信","my_appl","my_topic")
//my_appl 为DDE为服务器应用名,my_topic为DDE为服务器主题名
if return_value <> 1 then
   messagebox("热连接失败",string(return_value))
   return
end if
程序段17
这个程序段用来启动DDE服务器,常用于窗口的Open事件

if startserverdde("my_appl","my_topic","DDE通信")=1 then
mle_1.text=("DDE服务器启动!") rnd if

这个程序用来关闭DDE服务器,常用于窗口的 close 事件

stopserverdde("my_appl","my_topic")
程序段17
这个程序段用来启动DDE服务器,常用于窗口的Open事件

if startserverdde("my_appl","my_topic","DDE通信")=1 then
mle_1.text=("DDE服务器启动!") rnd if

这个程序用来关闭DDE服务器,常用于窗口的 close 事件

stopserverdde("my_appl","my_topic")
程序段18
这段程序用来响应客户应用程序的服务请求,用于窗口的remoteexec事件中

string data,appl,topic
getcommandddeorigin(appl)
getcommanddde(data)
mle_1.text=("已响应客户应用程序的请求,~r~n应用名="+appl+&
                "~r~n 客户指令="+data)
respondremote(true)
程序段19
这段程序用于开始建立于客户的热连接,常用于窗口的remotehotelinkstart事件中

string item,appl,topic
getdataddeorigin(appl,topic,item)
mle_1.text=("已建立与客户的热连接,~r~n 应用名="+appl+"~r~n
              主题名=& "+topic"~r~n DDE内容="+item)
respondremote(true)
程序段20
这段程序用于结束与客户的热连接,常用于窗口的remotehotelinkstop事件中

string item,appl,topic
beep(1)
getdataddeorigin(appl,topic,item)
mle_1.text=("与客户的热连接已被切断,~r~n应用名="+appl+"~r~n &
             主题名= "+topic+"~r~n DDE内容="+item)
respondremote(true)

--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.229.128]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:212.398毫秒