VB中利用DataBase巧妙设置DataReport中的动态SQL
来源:互联网 发布:python os 复制 编辑:程序博客网 时间:2024/06/03 15:59
近日分析一VB做的报表,由于对VB只是了解,谈不上熟练,不过对其水晶报表倒有点认识,之前也做过三两个小的报表 ,加之对PB中的报表了解非常熟悉,当时信心蛮大的。
先是看了DataReport,用于绘制报表格式。再来看DataEnvironment,用于定义获取的数据列。将DataReport与DataEnvironment绑定后就可获取数据了。
基于这个思路还算是简单,做个简单的不带参数条件的SQL通过了。不过打开报表的界面无法自定义,如加个查询的按钮,让查询的条件与报表显示在同一个界面中,(PB实现就太简单了)。想到一个与DataReport差不多同名的ActiveX-DataRepeat,(想通过ActiveX加载该DataReport,这样就可在自定义界面上显示这个Report)先看看再说,结论是两码事。DataReport用于设计报表,Datarepeat与DataGrid类似数据底层转换处理的。(只怪英文差,应该从字面上可以理解这个DataRepeat与Report是两码事,不过这种精神值得提倡,没有调查就没发言权。)
无参数的SQL是没问题,下面就是有参数的了。分析别人的程序是件可怕的事,特别是对VB不熟,加上别人使用的另类方法,更是一头雾水。这回我就遇上了。
代码中没有去处理DataEnvironment,虽然DataReport都与DataEnvironment绑定了,但属于静态式绑定。原作者使用的是DataBase,通过OpenDatabase一个MDB文件,再在QueryDefs子类中去动态设置SQL,这样就将相当于对参数传入了。开始时照猫画虎了,程序未报错,可检索后没有按查询条件来检索。DataEnvironment中我定义了的CmdText方式,将报表需要的列都给出来,Where 条件给不出来,因为条件是在界面中录入的。分析下原有的DataEnvironment,使用的是CmdTable方式,与内部的视图直接对应,可我这无法对应表,我的SQL是多表关联。
“遇到问题,你baidu了吗?”,这话非常流行。那就先找找相关资料,无赖原来这们仁兄使的招数太偏,无果。
继续分析,原来那位仁兄使用了DataBase来与Report打交道,那就查查QueryDefs,该技术好像失传了一般,只能在MSDN上看到English帮助,也没看到DataBase与DataReport相关的,只有段样例是可以用来设置一个Sql语句。
换个角度看问题,既然看不到真正意义的帮助,那就自已了解,还好VB中有这个调试查看器,Debug动态跟踪再看看DataBase对象,DataBase为一数组,通过opendatabase的方法打开了一个MDB数据库,DataBase为一数组,数组序列就是其MDB中的表与视图。看样子DataBase是只接接管数据库。
现在猜测版的结论出来了。原来那位仁兄使用DataEnvironment获取数据时的CmdTable是个假象,只是用于定义些虚的列,用于在DataReport设计时引用这些列。DataReport是静态与DataEnvironment绑定,代码无需处理。最后的动态SQL是将原来的视图中的SQL进行替换,这样DataBase中的数据就是一个动态的视图,它在执行过程中进行调整。原先定义的视图只是为于满足设计时定义这些引用的数据列。
照此思路,DataEnvironment中还得使用那个虚的视图,即还得用CmdTable方式,引用那个虚的视图,在使用时再动态调整这个视图中的内容。不出所然,检索成功了。
- VB中利用DataBase巧妙设置DataReport中的动态SQL
- VB中给DataReport指定打印机
- DataReport动态报表
- VB 中打印设置中的问题
- vb中判断SQL中的NULL值
- oracle中巧妙SQL语句
- VB.NET利用正则表达式巧妙限制字符输入
- 一个数据库查询方法(可以动态设置查询参数,设置查询条件),很巧妙的组合sql语句
- 利用lua中的string.gsub来巧妙实现json中字段的正则替换
- Delphi中巧妙利用RES文件
- 如何在VisualBasic中使用DataReport
- vb中用datareport做报表遇到的问题
- 巧妙利用DHTML中的层覆盖IE中的窗口控件
- c#中的右键菜单设置,如VB.net 中handles
- 巧妙sql
- VB中查询SQL数据库中的表内容
- 巧妙利用三招保护局域网中的 IP 地址
- android 巧妙利用反射机制得到ListView中的view
- 常用的Java开源软件
- was rejected by digital signature policy
- 程序员十层楼
- 数据插入之前更新字段值
- 【转】delphi读写txt文件
- VB中利用DataBase巧妙设置DataReport中的动态SQL
- C#中匿名方法的使用
- 开通scdn
- 硬件工程师基础知识
- ASP.NET 2.0中使用Membership
- 结构体知识汇总
- 边缘
- Winform下的消息通知
- Open source CCTV / IP video System