VB代码动态建立数据表
- 格式:doc
- 大小:44.50 KB
- 文档页数:6
在利用VB开发MIS系统的过程中,经常需要制作动态统计报表。
本文就如何实现动态数据源下的分组交叉统计报表进行阐述,并结合实例给出编程指导。
在VB6.0的数据环境设计器中,我们可以利用“添加命令”一项来连接报表所需的数据源,同时利用“添加命令”属性中的分组与合计功能设计分组交叉统计报表的数据源,至此我们可以设计简单的数据存在于单一表静态数据源下分组交叉报表,对于数据存在多表的复杂的动态数据源下的分组交叉报表来说,仍实现不了,实现该功能的关键在于构造一个符合动态数据源要求的中间表。
下面以一管理系统中工程成本统计报表的实例来说明如何实现动态数据源下的分组交叉统计报表。
一、报表要求与分析该报表要求列出在指定的时间段内实施的各项工程所耗器材明细、数量、费用,并且计算各项工程的成本,最终计算所有工程的累计成本。
需求分析后可知该报表是个典型的动态数据源下分组统计报表,分组项为工程名称,要求对每个分组进行子汇总和对所有分组进行总汇总。
由于在该系统中的出库单和出库单明细分别存放在不同的表中,因此必须根据报表的要求预先构造一个成本统计中间表,命名为EquipMentCost。
相关表结构如图1。
通过对表OutBill和OutBillDetail的分析,发现两者通过关键字OutBill 相联,下面通过SQL语句生成中间表EquipmentCost,语句如下:Insert into EquipmentCost(Project,Name,Standard,Type,Num,Cost)select a.project as 'Project', as 'Name',b.standard as 'Standard', b.type as 'Type',b.num aswhere a.OutDate>=date1 and a.OutDate<=date2date1 和date2 变量用来指定时间,注意插入前要先清空该中间表的所有数据。
一,在ifix帮组手册中的参考内容 (1)二,在vb中需要引用内容 (6)三,采用2中引用的ADO ext 方式连接用户数据库参考 (6)四,具体的参考代码 (8)4.1 创建新表 (8)4.2 删除不需要时间范围数据 (9)4.3 删除某个表 (10)4。
4 清除表中重复数据 (11)4.5 将临时数据表中数据倒回主数据表 (15)4.6 删除某个表中全部数据 (17)4.7 读一个数据库中数据,将该数据写入另一个数据库 (18)附件1:网络下载参考数据 (25)附录2:sql参考 (36)附录3:附带一个小资料sql参数 (40)SQL常用命令使用方法 (43)参考1:日表代码 (50)参考2:污水月表代码 (55)参考3:单年表代码 (63)参考4:多年表代码 (69)参考5:污水设备运行时间表代码 (75)参考6:删除某表指定时间前数据 (81)一,在ifix帮组手册中的参考内容Driver={Microsoft Access Driver (*.MDB)};DBQ=E:\\报表\\gyws_report。
mdb;”INSERT INTO fixreport” + _"(datatime,datatag,datavalue)” + _”V ALUES(’2010—7-13 10:11:23', ’addbc’, '124.45’)"二, 在vb中需要引用内容三,采用2中引用的ADO ext 方式连接用户数据库参考四,具体的参考代码4。
1 创建新表Private Sub close_pic16_Click()’++++++再已存在库中创建表+++++Dim cat As ADOX.CatalogDim tbl As New ADOX.TableSet cat = New ADOX。
Catalogcat.ActiveConnection = ”Provider=Microsoft.Jet。
VB利用DataReport做报表首先介绍一下DataReport对象的几个常用属性。
一是DataSource,用于设置一个数据源,通过该数据源,数据使用者被绑定到一个数据库;二是DataMember,从DataSource提供的几个数据成员中设置一个特定的数据成员;三是LeftMargin、RightMargin、TopMargin、BottomMargin等,用于指定报表的左右上下的页边距;四是Sections,即DataReport的报表标头、页标头、细节、页脚注、报表脚注5个区域,如果加上分组(可以有多层分组),则增加一对区域,即分组标头、分组脚注。
其中DataSource一般是一个数据环境或是ADODB.Connection类型的变量,而DataMember则对应数据环境中的Command或是ADODB.RecordSet类型的变量,推荐使用数据环境及Command,页边界大家肯定都很清楚,下面我主要介绍以下Sections,这也是DataReport的精髓所在。
Sections是一个集合,您可以为每一个Section指定名称,也可以用其缺省的索引,从上到下依次为1、2…。
每个Section均有Height和Visible属性,您可以在一定条件下使一个Section不可见。
在Section中可以放置各种报表控件,其中RptLabel、RptImage、RptShape 和RptLine可以放在任意的Section中,用于输出各种文字、图形及表格线;RptTextBox只能放在细节中,一般用于绑定输出DataMemeber提供的数据字段;RptFunction只能被放置在分组注脚中,用于输出使用各种内置函数计算出的合计、最大值、最小值、平均值、记数等等。
上述报表控件中常用公共属性有用于控制位置及高度宽度的Top、Left、Height、Width和控制可见性的Visible;其中RptTextBox还有DataField、DataMember、DataFormat及Font属性;其他属性不再多说。
VB常用代码Private Declare Function fCreateShellLink Lib "" (ByVal lpstrFolderName As String, ByVal lpstrLinkName As String, ByVal lpstrLinkPath As String, ByVal lpstrLinkArgs As String) As LongSub Command1_Click()Dim lReturn As Long'添加到桌面lReturn = fCreateShellLink("..\..\Desktop", "Shortcut to Calculator", "c:\windows\", "")'添加到程序组lReturn = fCreateShellLink("", "Shortcut to Calculator", "c:\windows\", "")'添加到启动组lReturn = fCreateShellLink("\Startup", "Shortcut to Calculator", "c:\windows\", "")End Sub问题二、如何让程序在Windows 启动时自动执行?有以下二个方法:方法1: 直接将快捷方式放到启动群组中。
方法2:在注册档HKEY_LOCAL_MACHINE 中找到以下机码\Software\Microsoft\Windows\CurrentVersion\Run新增一个字串值,包括二个部份1. 名称部份:自己取名,可设定为AP 名称。
信息技术 2005年第10期 中图分类号:TP311 文献标识码:B 文章编号:1009-2552(2005)10-0076-03利用VB编程实现实时数据曲线绘制关维娟,陈清华(安徽理工大学,淮南232001)摘 要:实时动态数据曲线的绘制与显示,是各种工业测控系统的重要功能。
而实现方法也不尽相同。
提出了一种基于VB编程,简单易懂的实时数据曲线绘制方法,实际使用证明完全能够满足实时监控要求。
文中通过一个实例介绍了其实现的具体方法。
关键词:测控系统;实时数据曲线;Visual BasicR ealization o f real-tim e d ata curve dra w ing using VB programmingG UAN Wei2juan,CHE N Qing2hua(Anhui U niversity of Science and T echnology,H u ainan232001,China) Abstract:Drawing and showing the real-time and dynamic data curve is an im portant function of the indus2 trial testing and controlling system,and various realizing methods are different.A sim ple method of real-time and dynamic data curve drawing based on VB programming is introduced in this paper,and it proved that the program could satis fy the real-time control requirements.It is illustrated by a coucrete exam ple.K ey w ords:testing and controlling system;real-time data curve;Visual Basic(VB)0 引言各种工业测控系统中,通常利用动态实时数据曲线,实时监测某点在现场工况变化下的控制稳定性。
在VB中用数据报表设计器创建报表数据环境设计器(Data Environment designer)与数据报表设计器(Data Report designer)均是Visual Basic 6.0的新增功能,它们的出现大大增强了Visual Basic处理数据的能力。
在以往的Visual Basic版本中,制作报表都是通过第三方产品来完成并通过ActiveX控件输出的。
这两种设计器的出现,使得Visual Basic程序员再也不用考虑选择一个什么样的第三方工具设计报表了,所有的设计全部在Visual Basic内部完成,再加上Visual Basic 6.0新增的开发IIS应用程序和开发DHTML应用程序功能,使得Visual Basic 6.0是一个名副其实的装备齐全的集成开发环境了。
下面我们以一个比较简单的报表为例,详细阐述如何使用数据环境设计器和数据报表设计器来设计一个数据报表。
一、数据环境设计器与数据报表设计器数据环境设计器提供了一个交互式的设计环境。
通过设置Connection对象和Command 对象的属性,可以快速完成到一个数据源的连接。
对于设置好的数据环境设计器,可以将它的对象拖放到表单上或是报表上,它会自动创建并完成数据绑定控件的设置。
数据报表设计器是一个极为灵活的设计报表的工具。
它以数据环境设计器作为数据源,能创建有层次的、汇总若干个关系型数据表数据的复杂报表。
除了像传统的报表设计工具那样能将报表通过打印机输出以外,数据报表设计器还能以HTML或文本文件的格式输出报表。
二、数据环境对象数据环境设计器包含以下几个对象:1. 数据连接(Connection)对象:连接对象表示到一个作为数据源的远端数据库或本地数据库的连接。
在数据环境中必须至少包含一个连接对象,要使用数据环境存取数据,必须首先创建连接对象。
2. 数据命令(Command)对象:命令对象定义了从数据库连接中将取回什么数据的详细信息。
文章编号:1006 2475(2006)02 0059 05收稿日期:2005 11 28作者简介:胡建红(1974 ),女,江西南昌人,江西省电子信息工程学校计算机系副主任,讲师,研究方向:计算机及其应用;周世科(1982 ),男,江西南昌人,江西师范大学计算机科学系硕士研究生,研究方向:计算机软件开发;谢晓明(1974 ),男,江西南昌人,江西省电子信息工程学校教师。
VB 应用程序动态连接与创建数据库表的实现胡建红1,周世科2,谢晓明1(1.江西省电子信息工程学校,江西南昌 330029;2.江西师范大学计算机科学系,江西南昌 330027)摘要:讨论在VB 数据库开发环境和Access 2000数据库管理系统中,如何实现VB 应用程序动态创建和连接数据库表。
关键词:VB;动态创建;动态连接;数据库表中图分类号:TP311 文献标识码:ARealization of VB Application Program Dynamically Joining and Establishing Database FormHU Jian hong 1,ZHOU Shi ke 2,XIE Xiao ming 1(1.School of Electronic Information Engineering of Jingx i,Nanchang 330029,China;2.Department of Computer Science,Jiangxi Normal Uni versity,Nanchang 330027,China)Abstract:This text mainly discusses with Access 2000database management system in VB database development environment how to es tablish and join database form in VB application program.Key words:VB;dynamic establishing;dynamic link;database table0 引 言在Visual Basic 中,常用的数据访问接口有下列三种:数据访问对象(DAO,Data Access Object)、远程数据对象(RDO,Remote Da ta Object)和ActiveX 数据对象(ADO,ActiveX Data Object )。
VB创建数据库和Excel报表1创建数据库、添加记录Siemens组态软件Wincc自动生成归档的过程数据库<项目名>RT.DB,每一个标签变量对应一个表,需将若干个表汇总成为一个总表,另外需建一个包含变量名称、代号、允许值等字段的表。
上述过程采用VB编程,用前面介绍的的DAO创建数据库、创建表、添加字段等来完成。
并将Access中不同的采样周期对应数据添加到临时数据库中,然后进行备份、查询和报表处理等。
主要程序如下:SetWs = DBEngine.Workspaces(0)Set dataBase = Ws.CreateDatabase(dataBasePath,dbLangGeneral, dbVersion60)Set Table = dataBase.CreateTableDef(TableName)Do Until recordTemp.EOFRs.AddNew:Rs(1) = recordTemp(0)Rs.Update:recordTemp.MoveNextLoop2数据查询和过滤使用SQL语句实现时间段和数据过滤时间的子查询,并将查询结果放在建立的临时查询表中,再将临时查询表的记录显示。
Set queryTemp =db.CreateQueryDef("", "SELECT * FROM 运行数据WHERE 时间IN ( SELECT 时间From 运行数据WHERE 时间between #" & strStart & "# and #" &strEnd & "# ) and Val(序号) Mod " & Tim& "=" & numMod & " ORDER BY 时间")3生成Excel报表由于生成的报表比较复杂,所以先在Excel中按照用户的要求作好一个模板(后缀为.xlt),对于报表中不固定的部分,需要VB程序动态生成。
mandText = sql
command.Execute
Else
MsgBox "你必须输入一个名字"
End If
Private Sub Form_Load()
Dim str As String
str = App.Path
If Right(str, 1) <>"\" Then
str = str + "\"
End If
pstr = "Provider=Microsoft.Jet.OLEDB.3.51;"
pstr = pstr & "Persist Security Info=False;"
pstr = pstr & "Data Source=" & str & "wage.mdb"
conn.Open pstr
rs.CursorLocation = adUseClient
rs.Open "工资表", conn, adOpenKeyset, adLockPessimistic
Set DataGrid1.DataSource = rs
End Sub
当然,我们还可以把程序设计得更好,比如:让用户先在窗口中任意选择所需的字段和一些条件,然后再组合生成一个新表。
但无论如何,这种操作只能在从原表的基础上产生一个新表,不能产生一个数据库文件,并且新表和原表放在同一个数据库中。
4: 建立新的数据库和表
前面讲到的方法有一定的局限性,它不能让用户产生自己所需的数据库文件,即使能产生数据表也只能在原有表的基础上生成。
我们现在的目的就是让用户利用ADO对象在程序运行过程中创建数据库和表,就好象他利用Access来建立数据库和表一样。
为此,我们应该引用对象库"Microsoft ActiveX Data Objects 2.5 Library"和"Microsoft ADO Ext 2.1. For DDL Security"
我们不妨用一个实例来说明具体的操作过程和方法。
我们的实例要达到目的是:在程序运行过程中建立一个数据库,数据库的名称由用户输入。
然后在数据库中建立一个名为"MyTable"的数据表,数据表中有三个字段,它们分别是:"编号"(整数型)、"姓名"(字符型,宽度为8)、"住址" (字符型,宽度为50),接着在数据表中添加一条记录,最后在DataGrid控件中把记录的内容显示出来,并且让用户在DataGrid控件中任意修改、添加记录。
首先在VB中新建一个窗体,然后在"工程"菜单中引用对象库"Microsoft ActiveX Data Objects 2.5 Library"和"Microsoft ADO Ext 2.1. For DDL Security"。
接着定义三个窗体级的对象变量和一个窗体级的字符串变量,它们的具体定义是:
Dim cat As New ADOX.Catalog '不用cat用另外一个名字也可以
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim pstr As String '定义该变量是为了后面的书写方便
为了更灵活地创建数据库,我们可以在窗体中加入一个通用对话框、一个DataGrid控件,三个命令按钮,它们的标题分别是:创建数据库和表、查看、更新。
通用对话框的作用是给用户输入数据库文件名和决定数据库的存放位置。
"创建数据库和表"命令按钮对应的代码是:
Private Sub Command1_Click()
Dim fm As String 'fm变量用来获取用户输入的文件名
CommonDialog1.Filter = "MDB文件(*.mdb)|*.mdb|AllFiles(*.*)|*.*|" CommonDialog1.FilterIndex = 1
CommonDialog1.InitDir = "D:\Jthpaper"
CommonDialog1.Flags = 6
CommonDialog1.Action = 2
If CommonDialog1.FileName = "" Then
MsgBox "你必须输入一个文件名,请重新保存一次!"
Exit Sub
Else
fm = CommonDialog1.FileName
End If
pstr = "Provider=Microsoft.Jet.OLEDB.4.0;" '不能把这里的4.0改为3.51 pstr = pstr & "Data Source=" & fm
cat.Create pstr '创建数据库
Dim tbl As New Table
cat.ActiveConnection = pstr
= "MyTable" '表的名称
tbl.Columns.Append "编号", adInteger '表的第一个字段
tbl.Columns.Append "姓名", adVarWChar, 8 '表的第二个字段
tbl.Columns.Append "住址", adVarWChar, 50 '表的第三个字段
cat.Tables.Append tbl '建立数据表
conn.Open pstr
rs.CursorLocation = adUseClient
rs.Open "MyTable", conn, adOpenKeyset, adLockPessimistic
rs.AddNew '往表中添加新记录
rs.Fields(0).Value = 9801
rs.Fields(1).Value = "孙悟空"
rs.Fields(2).Value = "广州市花果山"
rs.Update
End Sub
上面程序中有一个需要说明的地方,这就是语句:pstr = "Provider=Microsoft.Jet.OLEDB.4.0;",这个语句表示Microsoft Jet OLEDB驱动程序的版本是4.0,这是目前最新的版本,利用它你可以用VB中的ADO对象访问Access2000及其以下版本所建立的数据库。
你不能把这里的"4.0"改为"3.51",否则程序不能正常运行;在VB6中,3.51版本的Microsoft Jet OLEDB驱动程序对应的是Access97数据库。
换而言之,用这种方法建立的数据库和表跟用Access2000所建立的数据库和表是同一类型的,你只能直接用Access2000来打开,虽然你可以用VB6来访问这种数据库和其中的数据表,但你不能用Access97或VB6中的"可视化数据管理器"来直接打开。
在程序运行时只要用户单击该命令按钮就可以创建自己所需的数据库。
"查看"命令按钮对应的代码是:
Private Sub Command3_Click()
Set DataGrid1.DataSource = rs
End Sub
"更新"命令按钮对应的代码是:
Private Sub Command4_Click()
rs.UpdateBatch
End Sub
我们这个实例只是用来说明问题,在实际应用当中你可以把它进一步改进,例如:你在窗体中再增加一些文本框和组合框,供用户输入或选择数据表的名称、字段的名称、字段的宽度和小数位数。
这样,用户就可以自主地决定数据库的所有内容了,程序的灵活性也就大大提高了。
5: 结束语
如果你使用的是最新的数据访问接口技术ADO(Microsoft强烈建议大家使用这种最新技术),你又想在程序运行过程中创建数据库文件和数据表,此时,你应该在Visual Basic 6.0中引用对象库"Microsoft
ActiveX Data Objects 2.5 Library"和"Microsoft ADO Ext 2.1. For DDL Security",然后使用ADOX对象的Create、Append等方法就可以实现。
这种方法使用的Microsoft Jet OLEDB驱动程序的版本是4.0,因此,使用这种方法建立的数据库文件和数据表可以直接使用Access2000打开。
笔者在VB数据库软件开发过程中已多次使用这种方法,该方法在提高程序的灵活性和满足用户的特殊需要方面有很大的作用。