表名:dyn_report
Dwobject Varchar2(20) 数据窗口对象名称 Primary key
Rptitle Varchar2(80) 报表的标题名称
Memo Long raw 报表格式
2、建立一个窗口w_temp。 定义实例变量如下:
string is_dwtype,is_dwobject //保存报表中对象的类型及名称
控件名称 控件含义
Dw_print 数据窗口对象
Cb_exit 退出按钮
Cb_savereport 报表格式保存按钮
3、在窗口的OPEN事件中加入如下代码, 校验报表格式是否存在,如果存在读取定义好的报表格式到数据窗口。
blob emp_pic
long ll_handle
string ls_dwobject,ls_reportfile,ls_path
ls_dwobject = dw_print.dataobject
//判断是否存在该数据窗口的报表格式
select count(*) into:ll_count from dyn_report where dwobject =:ls_dwobject
if ll_count>0 then
//读取报表格式文件到大文本变量
selectblob memo into:emp_pic from dyn_report where dwobject =:ls_dwobject
//创建psr临时文件到硬盘
ls_reportfile = '\temp7089.psr'
ll_handle = FileOpen(is_reportfile,StreamMode!,write!,LockWrite!,Replace!)
FileWrite(ll_handle,emp_pic)
FileClose(ll_handle)
dw_print.dataobject = ls_reportfile
dw_print.settransobject(sqlca)
else
Dw_print.settransobject(sqlca)
End if
Dw_print.retrieve()
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)。然后保存并运行,大功告成啦!
8、本程序在PB7.0加Oracle8.05下调试通过。
解决方法如下:关闭连接。出现了上述问题,首先要做的就是关闭这个数据库连接,才能 *** 作这个连接的属性。关闭方法直接选中右击,选关闭连接;
选择编辑属性。选中连接,还是右键单击,选择编辑连接,就会出现如图所示的d框;
选高级。选中高级栏目,在高级下可以看到有个设置位置,我们就需要改正这个地方的路径。不是默认的路径,而是咱们现在安装的navicat目录;
设置完毕后,点击查询,选择新建查询,可以看到打开了新的页面,能够输入SQL语句进行查询;
输入SQL测试。能够正确执行SQL语句,问题解决了。
如果你连接的数据库是Access2000以后的版本(Access97除外),你必须要安装VssP5的补丁,但是这个补丁根本就找不到(除非你是微软的正版用户),VB当中还有其他的数据库控件,在部件中可以设置找到,建议你还是用另外一个数据库控件,另外一个肯定没有问题。
原因可能是参考文献的题名错误或者这篇文献并未被搜索的数据库收录。通过参考文献的题名可以在数据库中搜索这篇文献,如果搜索不到,那么可能是这篇文献的题名错了或者没有被该数据库收录,这时可以通过在数据库中搜索这篇文献的来源期刊等是否被数据库收录,若收录了,则是文献题名错了,若未收录,则这篇文献也就搜索不到。
搜索文献的方式很多,也可以通过文献作者等换个方式搜索下。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)