vbaccess表格显示datagrid.docx
- 文档编号:25744924
- 上传时间:2023-06-12
- 格式:DOCX
- 页数:11
- 大小:20.71KB
vbaccess表格显示datagrid.docx
《vbaccess表格显示datagrid.docx》由会员分享,可在线阅读,更多相关《vbaccess表格显示datagrid.docx(11页珍藏版)》请在冰豆网上搜索。
vbaccess表格显示datagrid
竭诚为您提供优质文档/双击可除
vb,access,表格显示,datagrid
篇一:
Vb中数据库表的复杂显示1
Vb中数据库表的复杂显示
----------关于类似交叉表的生成和显示
张镭镭殷红花3
(1南京财经学校计算机组南京2100012南京航空航天大学3扬州教育学院
扬州225002)
1,2
摘要:
本文介绍了在access和sql数据库中交叉表的几种查询方法,针对类似
交叉表的复杂情况,给出了解决生成和显示的方法。
关键词:
交叉表、sql、ado
abstract:
introducingsomeinquirymethodsaboutcrosstaboftheaccess
andsqldatabases,thispaperproposessomewaystosolvetheformationanddemonstrationproblemsinviewofsomecomplexsituationssimilartocrosstabs.keywords:
crosstabsqlado
1、引言
目前开发数据库软件常用的模式是vb+mssql和vb+access两种,不管哪种模式,都会涉及到交叉表和类似交叉表的实际应用。
往往复杂的交叉表面对数据显示时困难重重。
本文给出了类似交叉表的解决方案及代码,在数据库软件开发中非常实用。
为了方便理解,以学生成绩表举例如下:
以三名学生的两门课举例
⑴在access中
transform期中select姓名fromstudentgroupby姓名pivot科目⑵在sql中
说到交叉表先提一下递归的select变量
递归的select变量可以使用select语句和子查询将一个变量与其自身拼接起来。
可以将基础表中垂直的列数据改为水平方向的数据,用来替代游标。
declaRe@sqlVaRchaR(8000)
set@sql=selectxingmingas姓名
select@sql=@sql+,max(casewhenkcm=+kcm+
thenqimoelsenullend)[+kcm+]FRom(selectdistinctkcmFRomstudent)a
set@sql=@sql+FRomstudentgRoupbyxingmingexec(@sql)go
除了上面的内部循环外,也可以用游标的方法来解决此问题,通常用比较通用的存储过程来实现:
createprocedurecorss
@strtabnameasvarchar(50)=’销售’@strcolasvarchar(50)=’所在部门’@strgroupasvarchar(50)=’员工姓名’@strnumberasvarchar(10)=’sum’as
declare@strsqlasvarchar(1000),@strtmpcolasvarchar(100)
execute(‘declarecorss_cussorcursorforselectdistinct’+@strcol+’from’+@strtabname+’forreadonly’)begin
setnocounton
set@strsql=’select’+@strgroup+’,’+@strsum+’(’+@strnumber+’)as[‘+@strnumber+’]’opencorss_cursorwhile(0=0)begin
fetchnextfromcorss_cursorinto@strtmpcol
if(@@fetch_status0)breakset
@strsql=@strsql+’,’+@strsum+’(case’+@strccol+’when’’’+@strtmpcol+’’’then’+@strnumber+’elsenullend)as[‘+‘]’end
set@strsql=@strsql+’from’+@strtabname+’groupby’+@strgroupexecute(@strsql)
if@@error0return@@errorclosecorss_cursor
deallocatecorss_cursorreturn0endgo
交叉表是解决此类问题最常用的方法。
在软件设计时常出现相似但更复杂的数据关系,解决时比较棘手。
2、提出问题
表32.1分析
从以上的窗体表现形式来看,数据不可能是直接绑定在数据库的某个查询上。
体现在:
第一、它的标题不可能直接绑定显示,
经过修改后,一个二维表的结构一目了然。
第二、它如果用上述交叉表做,交叉的数据不可能是两个,即“期中”和“期末”。
第三、也不能够通过某种查询,获得以上的结果。
经过整体观察,可以初步判断,用交叉表不能完成这个任务,那么可以把原表的数据写入到新结构的表中。
2.2解决方案
①建立新表的结构,字段为“姓名”,“课目1”,“期中”,“期末”,“课目2”,“期中”,“期末”(在实际应用中,一般情况一个学期的课程不会超过15门,所以在应用中,可以设定表的结构中,有15个科目)
②dimobjcnasnewadodb.connectiondimobjrsasnewadodb.Recordsetdimobjrs1asnewadodb.Recordsetdimobjrs2asnewadodb.Rmand
objcn.open"provider=microsoft.jet.oledb.4.0;datasource=\\192.168.245.6\db\db1.mdb;jetoledb:
databasepassword=zll;persistsecurityinfo=False"//以上定义了ado对象的连接,对象、命令。
strsql=”selectdistinct科目fromstudent”//从成绩表中读出所有的课程setcmm.activeconnection=mandtext=strsql
setobjrs=cmm.execute//把课程值放到objrs记录集中③从成绩表中分别读出每门课的学生成绩,并把他们放到记录集中a=1;//用来计数,确定有几门科目。
dowhilenotobjrs.eoF;//循环读出每门科目的所有学生成绩kcm=objrs.Fields(0);//将科目名称循环放入kcm中
strsql=“select姓名,科目,期中,期末fromstudentwhere科目=’”,‘","",qizhong2=""onclick="show_ajax(this)"class="keylink">datagrid三个部分的数据是随着student表的内容而变化的,其中,最重要的是datagrid所绑定的数据,将zongbiao绑定到datagird上,但是datagrid控件显示部分,不能够显示“学科”这一项,因此,绑定之后,在程序里要将这部分列不显示。
代码如下:
datagrid1.columns
(1).Visible=Falsedatagrid1.columns(4).Visible=False
同时,读取出第一行学科的内容,并把他们显示在标签中。
label1.caption=datagrid1.columns
(1).celltext(datagrid1.Rowbookmark(0))label2.caption=datagrid1.columns(4).celltext(datagrid1.Rowbookmark(0))
到此为止,就完成了数据的窗体显示,最后调整datagird的列间距,使下面的表格和上面画好的表格形成一个整体。
3、总结
本文主要介绍了一个类似交叉表的表结构的窗体显示,窗体显示数据是最常用、最实用的,因此将显示的方式归纳为以下几种:
1、表的直接显示(或者几个表的条件查询显示)。
2、交叉表显示(也就是改变表结构的显示方法,功能比较单一,要符合交叉表的要求)。
3、复杂表的显示(与交叉表显示结果类似,单方法完全不同)
在实际应用中,复杂表各式各样,但只要掌握了表的读取和写入的方法,触类旁通所有的问题都能迎刃而解。
参考文献
高春艳等visualbasic程序开发范例宝典人民邮电出版社396—399、569—579页张立科编visualbasic6.0程序设计参考手册人民邮电出版社220—221、282—293、
篇二:
Vb创建access数据库大全
1:
问题的提出
在Visualbasic中,常用的数据访问接口有下列三种:
数据库访问对象(dao,dataaccessobject)、远程数据库对象(Rdo,Remotedataobject)和activex数据对象(ado,activexdataobject)。
数据库访问技术一直在不断进步,而这三种接口的每一种都分别代表了该技术的不同发展阶段。
最新的是ado,它是比Rdo和dao更加简单,然而更加灵活的对象模型。
正因如此,越来越多的人在用Vb开发数据库软件时使用ado作为数据访问接口。
在开发过程中,我们通常的使用的方法是:
先使用数据库管理系统(例如:
microsoftaccess)或Vb中的可视化数据管理器建立好数据库和数据表结构,然后在程序中通过使用adodc数据库控件或引用ado对象与数据库中的表建立连接,再通过数据库感知控件(例如:
文本框、datagrid等)来进行数据库的各种操作。
在这种开发过程中,我们有时需要面对这样一个问题:
如何让用户在程序运行过程中动态地建立自己所需的数据库和数据表以提高程序的灵活性呢?
在程序运行过程中建立自己所需的数据库和数据表,其本质就是用代码(或者说通过编程)来建立数据库和数据表。
众所周知,在Foxpro或asp编程中,这是很容易的一件事件。
那么在Vb数据库编程中又是怎样来操作的呢?
在Vb数据库编程中,如果使用dao作为数据库访问接口技术,则可以用createdatabase结合createtabledef方法来实现,目前已有不少书和杂志都讲到了这种方法,本文就不再讲述了;但你如果使用的是最新的数据库访问接口技术ado,你却发现目前的书和杂志上没有文章讲到如何用代码来建立数据库和数据表的方法,可有时我们非常需要用到这种方法,下面我们就来解决这个问题。
2:
ado与adox
我们先来对ado和adox进行简单的认识。
在Vb6中,使用ado开发数据库应用程序时,我们要引用对象库"microsoftactivexdataobjects2.5library",这个东西的简称就是ado,它是Vb6数据库最核心的对象群,也是Vb数据库开发人员经常所引用的对象库,在Vb6中你可以看到它的各种版本,从2.0版到2.6版都有,很多人对它已经很熟悉,在此我们不再详细介绍。
如果要在程序运行过程中创建数据库和表,我们还要引用对象库"microsoftadoext2.1.Forddlsecurity",简称为adox,其库文件名为是:
msadox.dll。
adox是对ado对象和编程模型的扩展,它将ado扩展为包括创建、修改和删除模式对象,如表格和过程。
它还包括安全对象,用于维护用户和组,以及授予和撤消对象的权限。
adox的对象如下表所示:
adox常用方法有:
append(包括columns、groups、indexes、keys、procedures、tables、users、Views)、create(创建新的目录)、delete(删除集合中的对象)、Refresh(更新集合中的对象)等等。
有关adox的详细信息,请在/data/ado中参阅microsoft发布的有关adox说明的web页。
3:
在原有数据表的基础上产生新的数据表
如果仅仅是在已有的数据表的基础上产生新的数据表,我们只要引用对象库"microsoftactivexdataobjects2.5library"再利用selectinto语句就可以了。
例如:
有一个名为wage.mdb的数据库,数据库中有一个名为"工资表"数据表,该数据表的字段有:
编号、姓名、基本工资、津贴、应发工资、扣款、实发工资等,这个表中已经有很多的记录。
现在我们把其中的实发工资大于2000的记录筛选出来组成一个新表,新表的名称由用户从文本框中输入,新表中我们只要三个字段,它们是:
编号、姓名、实发工资。
我们用下列程序就可以实现:
(事先在窗体中添加一个文本框text1和一个命令按钮command1)
dimconnasnewadodb.connection
dimrsasnewadodb.Recordset
mand
privatesubcommand1_click()
dimbmasstring
dimsqlasstring
iftext1.text""then
bm=trim(text1.text)
sql="select编号,姓名,实发工资into"+bm+"From工资表where实发工资>2000"
setcommand.activeconnection=conn
mandtext=sql
command.execute
else
msgbox"你必须输入一个名字"
endif
privatesubForm_load()
dimstrasstring
str=app.path
ifRight(str,1)"\"then
str=str+"\"
endif
pstr="provider=microsoft.jet.oledb.3.51;"
pstr=pstr"
pstr=pstr不用cat用另外一个名字也可以
dimconnasnewadodb.connection
dimrsasnewadodb.Recordset
dimpstrasstring定义该变量是为了后面的书写方便
为了更灵活地创建数据库,我们可以在窗体中加入一个通用对话框、一个datagrid控件,三个命令按钮,它们的标题分别是:
创建数据库和表、查看、更新。
通用对话框的作用是给用户输入数据库文件名和决定数据库的存放位置。
"创建数据库和表"命令按钮对应的代码是:
privatesubcommand1_click()
dimfmasstringfm变量用来获取用户输入的文件名
commondialog1.Filter="mdb文件(*.mdb)|*.mdb|allFiles(*.*)|*.*|"commondialog1.Filterindex=1
commondialog1.initdir="d:
\jthpaper"
commondialog1.Flags=6
commondialog1.action=2
ifcommondialog1.Filename=""then
msgbox"你必须输入一个文件名,请重新保存一次!
"
exitsub
else
fm=commondialog1.Filename
endif
pstr="provider=microsoft.jet.oledb.4.0;"不能把这里的4.0改为3.51pstr=pstr创建数据库
dimtblasnewtable
cat.activeconnection=pstr
tbl.name="mytable"表的名称
tbl.columns.append"编号",adinteger表的第一个字段
tbl.columns.append"姓名",adVarwchar,8表的第二个字段
tbl.columns.append"住址",adVarwchar,50表的第三个字段
cat.tables.appendtbl建立数据表
conn.openpstr
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
endsub
上面程序中有一个需要说明的地方,这就是语句:
pstr=
"provider=microsoft.jet.oledb.4.0;",这个语句表示microsoftjetoledb驱动程序的版本是4.0,这是目前最新的版本,利用它你可以用Vb中的ado对象访问access2000及其以下版本所建立的数据库。
你不能把这里的"4.0"改为"3.51",否则程序不能正常运行;在Vb6中,3.51版本的microsoftjetoledb驱动程序对应的是access97数据库。
换而言之,用这种方法建立的数据库和
表跟用access2000所建立的数据库和表是同一类型的,你只能直接用
access2000来打开,虽然你可以用Vb6来访问这种数据库和其中的数据表,但你不能用access97或Vb6中的"可视化数据管理器"来直接打开。
在程序运行时只要用户单击该命令按钮就可以创建自己所需的数据库。
"查看"命令按钮对应的代码是:
privatesubcommand3_click()
setdatagrid1.datasource=rs
endsub
"更新"命令按钮对应的代码是:
privatesubcommand4_click()
rs.updatebatch
endsub
我们这个实例只是用来说明问题,在实际应用当中你可以把它进一步改进,例如:
你在窗体中再增加一些文本框和组合框,供用户输入或选择数据表的名称、字段的名称、字段的宽度和小数位数。
这样,用户就可以自主地决定数据库的所有内容了,程序的灵活性也就大大提高了。
5:
结束语
如果你使用的是最新的数据访问接口技术ado(microsoft强烈建议大家使用这种最新技术),你又想在程序运行过程中创建数据库文件和数据表,此时,你应该在Visualbasic6.0中引用对象库"microsoftactivexdataobjects2.5library"和"microsoftadoext2.1.Forddlsecurity",然后使用adox对象的create、append等方法就可以实现。
这种方法使用的microsoftjetoledb驱动程序的版本是4.0,因此,使用这种方法建立的数据库文件和数据表可以直接使用access2000打开。
笔者在Vb数据库软件开发过程中已多次使用这种方法,该方法在提高程序的灵活性和满足用户的特殊需要方面有很大的作用。
使用ado编程模型需添加ado对象类库的“引用”----“microsoftactivexdataobjects
2.xlibrary”
ado之Vb数据库操作主要包括读、写、修改及删除等操作,不论是进行什么数据库操作都必须首先连接到数据库。
一、连接到数据库
1、连接到sql数据库:
通过ado的connection对象可实现Vb与sql数据库的连接。
一般方法如下:
dimcnnasnewadodb.connection‘创建connection对象cnn,关键字new用于创建新对象
cnn.connectionstring="provider=sqloledb.1;password=密码;userid=用户名;initialcatalog=sql数据库文件;datasource=localhost;"指定提供者,设置数据源cnn.open‘打开到数据库的连接
篇三:
Vb代码动态建立数据表
mandtext=sql
command.execute
else
msgbox"你必须输入一个名字"
endif
privatesubForm_load()
dimstrasstring
str=app.path
ifRight(str,1)"\"then
str=str+"\"
endif
pstr="provider=microsoft.jet.oledb.3.51;"
pstr=pstr"
pstr=pstr不用cat用另外一个名字也可以
dimconnasnewadodb.connection
dimrsasnewadodb.Recordset
dimpstrasstring定义该变量是为了后面的书写方便
为了更灵活地创建数据库,我们可以在窗体中加入一个通用对话框、一个datagrid控件,三个命令按钮,它们的标题分别是:
创建数据库和表、查看、更新。
通用对话框的作用是给用户输入数据库文件名和决定数据库的存放位置。
"创建数据库和表"命令按钮对应的代码是:
privatesubcommand1_click()
dimfmasstringfm变量用来获取用户输入的文件名
commondialog1.Filter="mdb文件(*.mdb)|*.mdb|allFiles(*.*)|*.*|"commondialog1.Filterindex=1
commondialog1.initdir="d:
\jthpaper"
commondialog1.Flags=6
commondialog1.action=2
ifcommondialog1.Filename=""then
msgbox"你必须输入一个文件名,请重新保存一次!
"
exitsub
else
fm=commondialog1.Filename
endif
pstr="provider=microsoft.jet.oledb.4.0;"不能把这里的4.0改为3.51pstr=pstr创建数据库
dimtblasnewtable
cat.activeconnection=pstr
tbl.name="mytable"表的名称
tbl.columns.append"编号",adinteger表的第一个字段
tbl.columns.append"姓名",adVarwchar,8表的第二个字段
tbl.columns.append"住址",adVarwcha(vb,access,表格显示,datagrid)r,50表的第三个字段
cat.tables.appendtbl建立数据表
conn.openpstr
rs.cursorlocation=aduseclient
rs.open"mytable",conn,adopenkeyset,adlockpessimistic
rs.addnew往表中添加新记录
rs.Fields(0).Value=9801
rs.Fields
(1).Value="孙悟空"
rs
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vbaccess 表格 显示 datagrid