4. 保存报表格式,这可以通过Cb_savereport按钮的clicked事件实现。    string ls_filename    long ll_count    blob Emp_id_pic    ls_filename =“temp70201.psr”    //保存报表格式到硬盘临时文件    dw_print.saveas(ls_filename,PSReport! ,false)    sqlca.autocommit = true    select count(*) into :ll_count from dyn_report where dwobject =:is_dwobject;    if ll_count =0 then    insert into dyn_report(dwobject,rptitle)    values(:is_dwobject,:ls_filename,:ls_path);    end if   //从硬盘临时文件读取数据保存到数据库表中    emp_id_pic = of_readbmpfile(ls_filename)    //该函数将二进制文件内容读到大文本对象中    UPDATEBLOB dyn_report SET memo = :Emp_id_pic where dwobject = :is_dwobject;    //更新数据库   sqlca.autocommit = false       5. 动态报表的实现。通过数据窗口dw_print的clicked事件捕获数据窗口中的对象,并将对象名存放在实例变量is_dwobject中,为下一步修改报表做准备。    string ls_type,ls_dwoname   //得到对象类型和名称    ls_type = trim(upper(dwo.type))    ls_dwoname = trim(dwo.name)    is_dwtype = ls_type    choose case ls_type    case “TEXT”,“CommandButton”,“GROUPBOX”    is_dwobject = ls_dwoname    //设置为可以拖动和改变大小    this.modify(ls_dwoname+“.Resizeable=‘”+“1’”)    this.modify(ls_dwoname+“.moveable=”+“1”)    case “LINE”   //直线对象不能通过设置Resizeable和moveable属性进行调整,必须通过其他途径    is_dwobject = ls_dwoname    case “RECTANGLE”,“ELLIPSE”,“GRAPH”,“BITMAP”    is_dwobject = ls_dwoname    this.modify(ls_dwoname+“.Resizeable=‘”+“1’”)    this.modify(ls_dwoname+“.moveable=‘”+“1’”)    case “COLUMN”,“COMPUTE”   is_dwobject = ls_dwoname    this.modify(ls_dwoname+“.Resizeable=‘”+“1’”)    this.modify(ls_dwoname+“.moveable=‘”+“1’”)   end choose       最后再通过modify()函数就可以实现基本的动态报表操作,这一类的文章较多,PB中也有大量的例子可直接使用,在此不再赘述。       6. 在cb_exit按钮的clicked()事件中加入:close(parent)。       7. 在应用的open事件中加入: open(w_temp)。然后保存并运行,全部工作到此结束!    本程序在PB7.0、Oracle 8.05下调试通过。               
 
  2/2   首页 上一页 1 2  |