vb6之数据报表使用技巧vb6.0专业版和企业版中的数据报表设计器与数据环境设计器是数据访问的新内容。msdn所提供的prjnwind.vbp示例工程在设计阶段(designtime)就已将dataenvironment设为datareport的数据源,并将打印格式也设好,这种做法不太利于程序的通用性。当然,我们也可以对dataenvironment编程,在运行阶段(runtime)控制数据源。其实,datareport可以完全脱离dataenvironment,而打印由动态sql生成的recordset。实现代码如下:privatesubdatareport_initialize()…dimadoconnectionxasnewadodb.connectiondimadorecordsetxasnewadodb.recordsetadoconnectionx.open″provider=microsoft.jet.oledb.3.51;persistsecurityinfo=false;datasource=″&app.path&″\xxx.mdb″adorecordsetx.open″select*from表名″,adoconnectionxsetdatareportx.datasource=adorecordsetx′设置datareport的数据源…由vb6所提供的datareport.sections.item(index).controls.item(index)...这样的语法不太利于编程控制数据报表设计器的专用控件的位置、大小等各种属性。但是,我们可以编程根据控件所在区域(section)和所属类别等将它们分成若干集合(collection),然后通过控制集合的元素来控制其所代表的控件。当然,在设计阶段我们要将足够多的控件绘制到datareport上备用。实现的主要部分代码如下:…′根据控件所在区域(section)和所属类别分集合(collection)dimrhsec4_rptlbl_collectionasnewcollection′页标头(pageheader)区域shape(rptshape)控件集合dimphsec2_rptshp_collectionasnewcollection′细节(detail)区域textbox(rpttextbox)控件集合dimdsec1_rpttxt_collectionasnewcollectiondimctlasobject…foreachctlinme.sections.item(″section1″).controls′section1selectcasetypename(ctl)case″rptlabel″dsec1_rptlbl_collection.addctlctl.caption=″case″rptshape″dsec1_rptshp_collection.addctlcase″rpttextbox″ctl.datafield=adorecordset.fields.item(0).name′先将所有textbox(rpttextbox)控件绑定到某一字段,否则报错!dsec1_rpttxt_collection.addctlendselectctl.visible=falsenextctl…′以下通过控制集合的元素来准确有效的控制这些元素所代表的控件。dimiasintegerdimbfmtasstddataformat′定义布尔(boolean)型字段的数据格式setbfmt=newstddataformatbfmt.type=fmtbooleanbfmt.truevalue=″是″bfmt.falsevalue=″否″fori=0to5′只打印前几个字段,shape(rptshape)控件用来显示单元格,页标头(pageheader)区域:显示列表头(caption)withphsec2—rptshp—collection.item(i+1)′单元格.visible=trueifi=0then.left=0else.left=phsec2—rptshp—collection.item(i).left+phsec2—rptshp—collection.item(i).widthendif.top=0.height=400′可根据字体设单位:缇字体的高度(单位:缇)可使用form、picturebox的textheight方法或api获得.width=1500′这里可根据实际情况用数组分别设置各列的列宽endwithwithphsec2—rptlbl—collection.item(i+1)′列表头标题(caption).left=phsec2—rptshp—collection.item(i+1).left+100.top=phsec2—rptshp—collection.item(i+1).top+100.height=phsec2—rptshp—collection.item(i+1).height-180.width=phsec2—rptshp—collection.item(i+1).width-200.caption=adorecordsetx.fields.item(i).name.alignment=rptjustifycenter.visible=trueendwith′细节(detail)区域显示:withdsec1—rptshp—collection.item(i+1)′单元格ifi=0thendsec1—rptshp—collection.item(i+1).left=0else.left=dsec1—rptshp—collection.item(i).left+dsec1—rptshp—collection.item(i).widthendif.top=0.height=phsec2—rptshp—collection.item(i+1).height.width=phsec2—rptshp—collection.item(i+1).width.visible=trueendwithwithdsec1—rpttxt—collection.item(i+1)′数据.height=dsec1—rptshp—collection.item(i+1).height-180.left=dsec1—rptshp—collection.item(i+1).left+100.top=dsec1—rptshp—collection.item(i+1).top+100.width=dsec1—rptshp—collection.item(i+1).width-200.datafield=adorecordsetx.fields.item(i).name′重新绑定字段selectcaseadorecordsetx.fields.item(i).type′可根据字段数据类型设置数据格式caseadbigint,adinteger,adsmallint.dataformat.format=″###,##0″′数字.alignment=rptjustifyrightcaseadbooleanset.dataformat=bfmt′布尔型字段设为自定义格式.alignment=rptjustifycentercaseadcurrency.dataformat.format=″###,##0.00″′货币.alignment=rptjustifyrightcaseaddate,addbdate,addbtimestamp.dataformat.format=″longdate″′日期、时间.alignment=rptjustifyrightcaseelse′其它,如:文本等.alignment=rptjustifyleftendselect.visible=trueendwithnextidatareport1.sections.item(″section2″).height=400datareport1.sections.item(″section1″).height=400…endsub该方案在pwin9.x和vb6.0下通过。如果要打印分级(层)recordset,还要在datareport上增加分组标头和分组注脚区等,并根据控件的具体功能、用途为其定义各类控件集合,设计出更复杂的报表。真正好的朋友,从来不需要这些表面功夫。走在这漫漫俗尘,形如微尘的我们,每天忙碌的像只蝼蚁,哪有时间去整那些虚假的表面文章。那些沉淀在岁月里的真情实意,哪一个不是无事各自忙,有事时,却又从不问回报几何的真心相助?至于那些平日里看上去可以一起打闹,一起吃喝,一起厮混,看似好成一片的人,或许,只是你在多少次的四目相对之时,动了真心,存了真义,是你默默认定对方可称朋友,有困难的时候是你愿意伸以援手,但未必对方一样。多少看似热情的人,内心是薄情的。而多少看似淡漠的人,内心实则一片温热。那些表面热诚的人,总是相安无事各自好,一旦你有事需要援助,别说大事,就是小事需代劳,你都会发现原来不过情比纸薄,对方远比你自己想的要现实的多。有些人,自从与你接近,内心就存有一份自己的打算。定是你于他而言,多少有些可用之处。正所谓无事献殷勤,非奸即盗。在这个功利心弥漫的世态下,没有哪一份意外的热情不无所图。不仅是职场如此,男人如此,就连女人也不能免俗。接孩子的时候,被困高层电梯下不来,一个电话打来,希望能帮忙照看一下放学的孩子。实在的人总是把别人毫不见外的信任,当作是一种荣幸,于是想都不用想就能一口答应。可当你有事需要对方只是代笔签个字这样的举手之劳时,对方都能各种不情愿各种推脱,至此你终是发现,原来人与人之间真不是一杯换一盏的事儿。关键时刻,还是得找那些看似平时不联系,但一开口能力范围之内就愿意为你想办法的人。多少人天真的以为,认识的人越多,人脉就越广,自己就越厉害,其实,那些所谓的人脉,不过廉价。倘若你没有同等的利用价值,谁会与你建立起所谓的交际?最是谈钱伤感情,也最是感情不值钱。别结识了比自己优秀比自己有能力的人,就觉得有了依靠有了光环,自己不足够优秀,结识谁都没有用。在你困难需求的时候,你开口求助,能够推脱敷衍那算给面子,对你闭门不见佯装不熟也是情理之中。日久见人心,患难见真情。平时是平时,别把平时当真情。这世上多少人变脸如翻书,有求于你一个样,各自安好一个样,最是有求于他嘴脸陋,让你瞬间就明白,何谓人情凉薄。随着年龄的增长,人心的不再纯澈,人与人之间的交往就不再那么的纯粹而真心了。也正是因为如此,才更要珍惜那些默默守护在你生活中的朋友。别看平时忙的少有见面,少有聊天,就连微信,都少有私信。但有事儿的时候,只一声招呼,谁能出力都会挺身而出,义不容辞。真正好的朋友,从来不需要这些表面功夫。走在这漫漫俗尘,形如微尘的我们,每天忙碌的像只蝼蚁,哪有时间去整那些虚假的表面文章。那些沉淀在岁月里的真情实意,哪一个不是无事各自忙,有事时,却又从不问回报几何的真心相助?至于那些平日里看上去可以一起打闹,一起吃喝,一起厮混,看似好成一片的人,或许,只是你在多少次的四目相对之时,动了真心,存了真义,是你默默认定对方可称朋友,有困难的时候是你愿意伸以援手,但未必对方一样。多少看似热情的人,内心是薄情的。而多少看似淡漠的人,内心实则一片温热。那些表面热诚的人,总是相安无事各自好,一旦你有事需要援助,别说大事,就是小事需代劳,你都会发现原来不过情比纸薄,对方远比你自己想的要现实的多。有些人,自从与你接近,内心就存有一份自己的打算。定是你于他而言,多少有些可用之处。正所谓无事献殷勤,非奸即盗。在这个功利心弥漫的世态下,没有哪一份意外的热情不无所图。不仅是职场如此,男人如此,就连女人也不能免俗。接孩子的时候,被困高层电梯下不来,一个电话打来,希望能帮忙照看一下放学的孩子。实在的人总是把别人毫不见外