Power Builder 入门分享

    技术2022-05-20  56

    选取数据源:1,Quick Select(快速选择):主要用于从一个表或多个表通过外键连接的表中选择某些数据列,而且这些数据列都是非计算列。2,Sql Select:主要用于从一个表或多个表中通过SQL语句来选择数据3,Query:数据来源于一个已经定义并存储的查询之中4,Stored Procedure:数据来源于数据库中所定义的存储过程

    1,连接数据库,建立数据源--------------------------------------------------------// Profile pssx 连接数据库SQLCA.DBMS = "O84 Oracle8/8i (8.x.4+)"SQLCA.LogPass = 'sjjxc'SQLCA.ServerName = "pssx"SQLCA.LogId = "sj"SQLCA.AutoCommit = FalseSQLCA.DBParm = "PBCatalogOwner='sj'"

    idw_fzm.settransobject(sqlca)  ---set连接对象SQLCA  -------默认连接事物CONNECT USING SQLCA;IF SQLCA.SQLCODE <> 0 THEN HALTEND IF

    if sqlca.sqlcode <> 0 then ls_errtext = sqlca.sqlerrtext rollback; messagebox("数据库连接错误" ,ls_errtext) return;else

    OPen(w_myfirst)   -------打开windowCLOSE(w_myfirst)

    2.dw控件相关方法调用----------------------------------------------------------- a ,数据窗口取值 dw_1.settransobject(ltr_sjjk) dw_1.retrieve() b ,add  del   update ****************************     select if sle_find.text="" then  ll_findrow=0 else  ll_findrow = dw_grid.find("bmbh='"+ls_bmbh+"'",1,dw_grid.rowcount()) end if ****************************      insert long ll_insertrow ll_insertrow = dw_1.insertrow(0) ****************************      delete long ll_deleterow ll_deleterow = dw_1.getrow() dw_1.deleterow(ll_deleterow)

     ls_bmmc = dw_grid.object.bmmc[ll_getrow]  //获得ll_getrow的bmmc字段值

            ****************************      update //update 的前提是数据窗口必须设置过update属性 dw_1.accepttext() dw_1.update() c , dw_qt.scrolltorow(ll_row)  //滚到ll_row行 //**************选中行 dw_grid.selectrow(0,false) dw_grid.selectrow(ll_findrow,true) //**************filter过滤 ls_bmbh = trim(sle_find.text) dw_grid.setfilter("bmbh='"+ls_bmbh+"'") dw_grid.filter() dw_grid.setfilter("")   //取消过滤 dw_grid.filter()

     dw_qt.setcolumn('lx')  定位到lx列 dw_qt.setfocus() rollback;    commit;    数据保存到数据库表中 debugbreak()   添加断点调试

     dw_1.ScrollNextRow()    移到下一行 dw_1.GetChild('fzm', idw_fzm)得到子窗口 idw_fzm

    3,数据窗口的取值与赋值——————————————————————————————string ls_namels_name = dw_1.object.name[row]ls_name = dw_1.object.name[3]ls_name = dw_1.GetItemstring(3, "name") ----注意对应的item数据类型          dw_1.GetItemDate(3, "day")          dw_1.object.name[row] = ls_name       ----------------赋值

    4,数据窗口循环------------------------------------------------------int li_rowcount

    li_rowcount = dw_1.rowcount()if li_rowcount = 0 then return//**********************顺序循环for i=1 to li_rowcount ls_temp=dw_grid.getitemstring(i,"bmbh") ll_fzh =dw_grid.object.fzh[i] ls_temp1+='|'+ls_tempnext//**********************倒序循环,在删除记录时需要这样处理string ls_templong ll_fzhfor i= li_rowCount to 1 step -1 ls_temp=dw_grid.getitemstring(i,"bmbh") ll_fzh =dw_grid.object.fzh[i] IF ll_fzh=0 or isnull(ll_fzh) then  dw_grid.deleterow(i)  end if ls_temp1+='|'+ls_tempnext5, 一个数据窗口的内容移到另一个窗口。----------------------------------------------------------dw_1.rowsmove(ll_row, ll_row, Primary!,dw_2,1,primary!)  

    5.1,添加断点----------------------------------------------------------debugbreak()        //添加断点

    6,把dw_1窗口中的数据保存到ls_file中类型为Excel----------------------------------------------------------dw_1.saveas(ls_file,Excel! ,true)

    7 ,得到ddlb_1下拉框的全部item----------------------------------------------------------li_total = ddlb_1.totalitems()

    8,统计数据窗口中isnull(shdxhbz)的行数-----------------------------------------------------dw_1.describe("evaluate('sum(if(isnull(shdxhbz),1,0))',1)")

    9,判断是否为数字----------------------------------------------------------if  len(ls_text) = 7 and IsNumber(ls_text) then    lsnumber(ls_text) 

    10,profilestring//profilesetstring----------------------------------------------------------profilestring(path+'text.ini',program,userid,'')  //取program(key).valueprofilesetstring(path+'text.ini',program,userid,'')  //赋值program(key).value

    10,获得current行是否修改状态-----------------------------------------------------------DwItemStatus l_statusl_status = dw_3.GetItemStatus( current, 0, Primary!/Delete!/Filter! )  //1,Primary  (默认值)dw里没有delete且没有filter  //2,Delete   已delete,but没有commit//3,Filter   已从dw里面Filter

    l_status =NotModified! /  DataModified!   /  New!   /  NewModified!  

    峪荥珊锋

    11,游标使用-----------------------------------------------------------DECLARE 游标名 CURSOR FORSELECT XM,XB FROM ZGXX;//SQL语句;OPEN 游标名 ;

    DO WHILE TRUE    FETCH 游标名 INTO :xm,:xb;   If Sqlca.Sqlcode <> 0 Then      Exit   Else      //正常循环的处理语句      End if Loop

    Close 游标名;

    例如:ddlb_hcbm.reset()DECLARE c_data_hcbm CURSOR FOR SELECT bmbh,bmmc from dk.dm_hcbm where bmzt ='3' order by bmbh;OPEN c_data_hcbm ;

    DO WHILE TRUEFETCH c_data_hcbm INTO :ls_bmxx,:ls_bmbh;  If Sqlca.Sqlcode <> 0 Then     Exit  Else     ddlb_hcbm.additem(ls_bmxx)  End if LoopCLOSE c_data_hcbm;ddlb_hcbm.selectitem(1)

    //动态游标ls_sql =" SELECT HCBH from dk.DM_PSHC where HCZT ='3' AND SSBM ='" + AS_HCBM +"' order by HCBH"DECLARE c_data_hcbm DYNAMIC CURSOR FOR SQLSA ;PREPARE SQLSA FROM :ls_sql ;OPEN DYNAMIC c_data_hcbm ;

    DO WHILE TRUEFETCH c_data_hcbm INTO :ls_bmxx;  If SQLca.Sqlcode <> 0 Then   Exit  Else   ddlb_hcbh.additem(ls_bmxx) //加到listitems  End if LoopCLOSE c_data_hcbm;                 //关闭游标

    ddlb_hcbh.selectitem(1)return

    12,动态sql------------------------------------------------------ls_sql = dw_1.getsqlselect()                    //取出sqlls_sql = ls_sql +" and djzt='LR'"               //加工sql

    dw_1.reset()dw_1.object.datawindow.table.select = ls_sql    //重新赋值sql 也可以dw_1.setsqlselect(ls_sql)dw_1.settransobject(sqlca)dw_1.retrieve()

    13,窗口间传值------------------------------------------------------OpenWithParm(w_employee, "James Newton")w_employee.openst_empname.Text = Message.StringParm

    类型对应Message.DoubleParm NumericMessage.PowerObjectParm PowerObject (PowerBuilder objects, including user-defined structures)Message.StringParm String

    14,sqlca.sqlcode's   value------------------------------------------------------sqlca.sqlcode =0    Success 100  Fetched row not found -1   Error; the statement failed. Use SQLErrText or SQLDBCode to obtain the details

    Profilestring(as_inifilepath,as_hostname,'DBMS','')

    15,datastore------------------------------------------------------datastore lds_qt lds_qt= create datastore

    lds_qt.dataobject = 'd_cc_d_qt'lds_qt.settransobject(sqlca)

    lds_aa.retrieve()

    //其它操作功能类似datawindow

    1:可见性,datawindow 可见, datastore 不可以 2:创建, datawindow 可以拖曳,动态要用语法创建,datastore 只能用create的方法创建。3:在函数里面如果把一个datastore赋值给另一个datastore ,是地址的拷贝。例如: lds_datastore1 = lds_datastore2        if isvalid(lds_datastore2) then destroy lds_datastore2如果销毁lds_datastore2,那么lds_datastore1也同时销毁。如果需要用到datasotre作为参数,也不能用lds_datastore2.sharedata(lds_datastore1),sharedata是两个数据窗口数据同时保持一致,做好的选择就是用rowscopy函数

    16,datawindow子窗口使用------------------------------------------------------datawindowchild dwc_ddhdw_1.getchild('ddh',dwc_ddh)dwc_ddh.settransobject(sqlca)dwc_ddh.retrieve()

    17,datawindow的排序等------------------------------------------------------dw_emp.SetRedraw(false) //须成对出现 dw_emp.SetSort("glbh")dw_emp.Sort()dw_emp.GroupCalc()

    dw_emp.SetRedraw(true) //须成对出现


    最新回复(0)