选取数据源: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) //须成对出现