VB通过DAO访问Access数据库_第1页
VB通过DAO访问Access数据库_第2页
VB通过DAO访问Access数据库_第3页
VB通过DAO访问Access数据库_第4页
VB通过DAO访问Access数据库_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VB通过DAO访问Access数据库2001/11/08

14:06中国电脑教育报文/张喜瑞、毛立夏Access是Office系列中功能完备的数据工具,本文将其作为应用程序的后台仓库,即一个数据库可以包括多个二维表,实现各类数据的存储,适合用来作为数据处理的中间桥梁。VisualBasic对Access数据库的集成非常紧密,通常由以下几个部分组成。引用DAO类型库1、从“工程”菜单中选择“引用”菜单项;2、在可引用列表框中选择“MicrosoftDAO3.51ObjectLibrary”项。3、最后“确定”即可设置DAO数据类型变量DAO数据类型变量共分成两种:1、Database变量对应于Access数据库,通常在模块中被定义为Public全程变量:PublicAccessDBFAsDatabase'定义数据库对象实例AccessDBF2、RecordSet变量对应于Access数据库中的一个表,可定义为全程变量或局部变量,亦可作为函数参数进行传递:DimthePrintTableAsRecordSet'定义一个表对象实例thePrintTable打开DAO数据类型1、打开Access的方法通常可设置一个专门的Public函数用来打开一个Access数据库,并且该函数在启动窗体的PrivateSubForm_load()过程中被调用,函数定义格式如下:PublicSubOpenDatabase()DimsConeectAsStringSConnect=";PWD=8830428;UID=admin"'设置打开时的用户名、口令等参数SetAccessDBF=Nothing'确认关闭对象实例SetAccessDBF=WorksPaces(0).OpenDatabase(App.Path&&"/ToXls.MDB",False,sConnect)'打开当前路径的ToXls.MDB数据库EndSub2、打开RecordSet的方法RecordSet遵循即用即开的原则,所以它通常在函数中打开SetthePrintTable=AcessDBF.OpenRecordSet("Table_1",dbOpenSnapshot)相关的数据操作数据实际需要对Access表中的记录、字段、数据项进行操作。下列双重循环把数据输出到Excel对应的单元格中:Forj=0To2ForI=0To3ThePrintTable.MoveNextExcel.Sheet.Range(Trim(chr(71+j*10+I))+"G").Value=thePrintTable.Fields(0)NextINextj关闭数据库1、关闭Database它通常在整个应用程序的最后进行操作,即通常出现在PrivateSubForm_unload(CannelAsInterger)过程中。命令格式实例如下:AccessDBF.Close2、关闭RecordSet它遵循用完即关的原则,所以通常出现在函数中。当完成了相关的数据操作后就关闭它,下次再用时再打开即可:thePrintTable.Close结论:通过系统集成开发应用程序的输入和输出模块,它一方面充分利用了OLE对象程序的优点,轻松完成人机界面设计,使程序员从繁琐而又简单的点、线、框等定位中脱离出来;另一方面,由于充分利用了用户操作熟练的软件作为人机界面,使用户有亲切感和熟练操作的能力,从而能够充分发挥所开发的应用程序的功能。在中用连接Access巧巧电脑网络

2007-12-27

qqread

逃の妖豆

论坛

收藏此文大中小在ADO.net中,微软为我们提供了OleDB和SqlClient两种数据库的调用方法,对于微软的SQLServer,我们使用SqlClient来处理在速度上比较快,而OleDB可用于其它各种类型的数据库。SqlClient在中命名空间为System.Data.SqlClient,OleDB的命名空间为System.Data.OleDb。对于连接Access数据库,则可以使用OleDB来实现。一个数据库连接,最重要的是建立一个Connection,对于一个Access数据库,其Connection的标准ConnectionString为以下语句:Connection.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=\somepath\mydb.mdb;UserId=admin;Password=;"Provider为数据源提供者,DataSource为数据库名称,UserId和Password为数据库的用户名与密码,对于没有密码保护的Access数据库我们可以省略后面的两个参数。[art_myurl]下面一段代码是一个根据数据库名称或者路径来建立一个数据连接的函数:PublicFunctionCreateConnection(ByValfilepathAsString)AsOleDbConnectionDimmycnAsNewOleDbConnectionTry'检查filepath是完整的路径还是缺省的文件名IfInStr(1,filepath,":\",1)<>0Thenmycn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&filepathElse'假定该文件位于程序运行的目录下mycn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Application.StartupPath&"\"&filepathEndIfmycn.Open()CatchexAsExceptionMessageBox.Show(ex.Message)EndTryReturnmycnEndFunctionvs2005如何连接access2007的*.accdb文件2007年04月14日星期六11:11vs2005如何连接access2007的*.accdb文件description:

Provider=Microsoft.ACE.OLEDB.12.0;DataSource=c:\work\users.accdb;PersistSecurityInfo=False<addname="fyConnectionString2"connectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="D:\test\fy.mdb""

providerName="System.Data.OleDb"/>如果要用虚拟路径的话要怎么办?在CS页面可以用Server.MapPath("test\fy.mdb"),在Web.Config里面直接写数据库的相对路径就行了。连接access20072009-12-2618:01:17|分类:数据库|标签:|字号大中小订阅.今天弄了一下午用连接access2007开始想应该是按套路来,但过程中遇到了各种各样的问题首先是连接字符串请注意连2007access时的字符串是Provider=Microsoft.ACE.OLEDB.12.0;DataSource="+My.Application.Info.DirectoryPath+"\data\hostel.accdb"My.Application.Info.DirectoryPath是指向工程目录因为我把数据库放在了工程下的data文件夹里然后出现了提示NetFramework数据提供程序要求MicrosoftDataAccessComponents(MDAC)2.6或更高。但我的MDAC是2.8上网找原因【第一、打开"c:\windows\inf"注意:“inf”是隐藏目录。找到文件“mdac.inf”。鼠标点击右键——>安装。第二、提示要“I386文件夹中的文件”,插入windowsxp安装盘(或为网上下在windowsI386文件。)安装完,就ok了!】但却出现了无法安装和复制adcjavas.inc再找错.找到c:\windows\inf\mdac.inf2.选中,点鼠标右键,选择安装3.提示需要adcjavas.inc文件,选择来源:C:\WINDOWS\ServicePackFiles\i3864.竟然出现复制错误:安装程序无法复制文件adcjavas.inc(换其它电脑安装时没有发现问题)...别急,继续找解决办法...5.原来是Windows安全资料库出现问题,用如下命令修复:esentutl/pC:\Windows\security\database\secedit.sdb6.再安装mdac.inf,一切顺利...曲折后我终于成功看到网上很多朋友在查找使用VB.net如何对DBF、XLS等常用数据文件进行访问,特别写了个小程序,来演示一下。由于对具体数据文件的操作已经被封装到了oledb中,所以对数据文件的操作在的代码是一样的,学要我们做的就是为oldb连接字符串设置为正确连接字符串就行了。有个网站/提供了大量的关于连接字符串的信息,大家可以参考。并不是设置好链接字符串就可以访问所有的数据文件,可能还需要安装数据访问驱动程序。本实例支持dbf文件、Excel、Access(含2007版)文件的支持文章出处:飞诺网():/course/7_databases/database_other/20071019/78245.htmlImportsSystem.Data.OleDb002PublicClassForm1ClassForm1003

DimdbfconnAsOleDb.OleDbConnection=NewOleDb.OleDbConnection004

PrivateSubButton1_Click()SubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click005

'dbf文件操作006

'/?carrier=dbffoxpro007

Dimpath,FileNameAsString008

Me.OpenFileDialog1.Title="选择dbf文件"009

Me.OpenFileDialog1.Filter="dbf文件|*.dbf"010

IfMe.OpenFileDialog1.ShowDialog()=Windows.Forms.DialogResult.OKThen011

path=System.IO.Path.GetDirectoryName(OpenFileDialog1.FileName)012

FileName=System.IO.Path.GetFileName(OpenFileDialog1.FileName)013

014

FileName=Microsoft.VisualBasic.Left(FileName.ToUpper,FileName.Length-4)015

016

017

DimconnAsString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&path&";ExtendedProperties=dBASEIV;UserID=Admin;Password=;"018

019

'DimconnAsString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=e:mp;ExtendedProperties=dBASEIV;UserID=Admin;Password=;"020

DimdbfconnAsOleDb.OleDbConnection=NewOleDb.OleDbConnection021

dbfconn.ConnectionString=conn022

023

'DimcmdAsString="select*fromw"024

DimcmdAsString="select*from"&FileName025

DimadapterAsNewOleDbDataAdapter(cmd,dbfconn)026

DimtopicsAsNewDataSet027

adapter.Fill(topics)028

Me.DataGridView1.DataSource=topics.Tables(0)029

Me.DataGridView1.Refresh()030

EndIf031

032

033

EndSub034

035

PrivateSubopen_excel_Click()Subopen_excel_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handlesopen_excel.Click036

Dimpath,FileName,FileExnameAsString037

DimconnAsString038

Me.OpenFileDialog1.Title="选择Excel文件"039

Me.OpenFileDialog1.Filter="Excel文件|*.xls*"040

IfMe.OpenFileDialog1.ShowDialog()=Windows.Forms.DialogResult.OKThen041

path=System.IO.Path.GetFullPath(OpenFileDialog1.FileName)042

FileName=System.IO.Path.GetFileName(OpenFileDialog1.FileName)043

FileExname=System.IO.Path.GetExtension(OpenFileDialog1.FileName).ToUpper044

FileName=Microsoft.VisualBasic.Left(FileName.ToUpper,FileName.Length-4)045

046

IfFileExname="XLSX"Then047

048

conn="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&path&";ExtendedProperties='Excel8.0;HDR=Yes;IMEX=1';"049

Else050

conn="Provider=Microsoft.ACE.OLEDB.12.0;DataSource="&path&";ExtendedProperties='Excel12.0;HDR=YES';"051

052

EndIf053

054

055

dbfconn.ConnectionString=conn056

'获取数据表列表057

Dimtable_listAsData.DataTable=GetSchemaTable(dbfconn,"TABLE")058

059

'在combbox列表控件中显示数据库中包含的数据表060

061Me.cb_table_list.DataSource=table_list.DefaultView062

Me.cb_table_list.ValueMember="TABLE_NAME"063

Me.cb_table_list.DisplayMember="TABLE_NAME"064

065

EndIf066

EndSub067

068

069

PrivateFunctionGetSchemaTable()FunctionGetSchemaTable(ByValconnectionAsData.OleDb.OleDbConnection,ByValTypeAsString)070

'获取数据表列表071

'Type有:"TABLE,VIEW,ACCESSTABLE,SYSTEMTABLE",072

073

Type=Type.ToUpper074

connection.Open()075

Dimtable_listAsData.DataTable076

table_list=connection.GetOleDbSchemaTable(Data.OleDb.OleDbSchemaGuid.Tables,NewObject(){Nothing,Nothing,Nothing,Type})077

connection.Close()078

Returntable_list079

EndFunction080

081

PrivateSubtable_list_SelectedIndexChanged()Subtable_list_SelectedIndexChanged(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handlescb_table_list.SelectedIndexChanged082

''获取数据表的内容083

'MsgBox(Me.cb_table_list.SelectedValue)084

IfMe.cb_table_list.SelectedValue.ToString<>"System.Data.DataRowView"Then085

DimcmdAsString="select*from["&Me.cb_table_list.SelectedValue.ToString&"]"086

DimadapterAsNewOleDbDataAdapter(cmd,dbfconn)087

DimtopicsAsNewDataSet088

adapter.Fill(topics)089

Me.DataGridView1.DataSource=topics.Tables(0)090

Me.DataGridView1.Refresh()091

EndIf092

093

EndSub094

095

PrivateSubOpen_Access_Click()SubOpen_Access_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesOpen_Access.Click096

097

Dimpath,FileName,FileExnameAsString098

DimconnAsString099

Me.OpenFileDialog1.Title="选择Access文件"100

Me.OpenFileDialog1.Filter="Access文件|*.mdb|Access2007文件|*.accdb"101

IfMe.OpenFileDialog1.ShowDialog()=Windows.Forms.DialogResult.OKThen102

path=System.IO.Path.GetFullPath(OpenFileDialog1.FileName)103

FileName=System.IO.Path.GetFileName(OpenFileDialog1.FileName)104

FileExname=System.IO.Path.GetExtension(OpenFileDialog1.FileName).ToUpper105

FileName=Microsoft.VisualBasic.Left(FileName.ToUpper,FileName.Length-4)106

107

IfFileExname="MDB"Then108'access97-2003

连接字符串109

conn="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&path&";JetOLEDB:DatabasePassword=;"110

Else111'access2007连接字符串112

conn="Provider=Microsoft.ACE.OLEDB.12.0;DataSource="&path&";JetOLEDB:DatabasePassword=MyDbPassword;"113

114

EndIf115

dbfconn.ConnectionString=conn116

'获取数据表列表117

Dimtable_listAsData.DataTable,=GetSchemaTable(dbfconn,"TABLE")118

119

Me.cb_table_list.DataSource=table_list.DefaultView120

Me.cb_table_list.ValueMember="TABLE_NAME"121

Me.cb_table_list.DisplayMember="TABLE_NAME"122

EndIf123

124

125

EndSub126EndClass首先你必须保证你已经安装AccessDatabaseEngine或者Access2007这是一个示例

<connectionStrings>

<addname="WindowsApplication1.My.MySettings.Marketing_projectsConnectionString"

connectionString="Provider=Microsoft.ACE.OLEDB.12.0;DataSource="|DataDirectory|\Marketingprojects.accdb";PersistSecurityInfo=True"

providerName="System.Data.OleDb"/>

</connectionStrings>连接字符串(Connectionstrings):Usage:Provider=Microsoft.ACE.OLEDB.12.0Standardsecurity:Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:\myFolder\myAccess2007file.accdb;PersistSecurityInfo=FalseWithdatabasepassword:Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:\myFolder\myAccess2007file.accdb;JetOLEDB:DatabasePassword=MyDbPasswordDataDirectoryfunctionality:Provider=Microsoft.ACE.OLEDB.12.0;DataSource=|DataDirectory|\myAccess2007file.accdb;PersistSecurityInfo=False本文来源于EddyBlog/,原文地址:/program/278.htmlVB.net连接Access2007数据库(*.accdb)access数据格式已经从一种通用的格式转换为一种私有的格式了。目前的MDAC2.8SP8和JETDB4.0都不支持accdb格式的数据库。如果您是使用OLEDB的应用程序开发人员,请将ConnectionString属性的Provider参数设置为“Microsoft.ACE.OLEDB.12.0”

如果要连接到MicrosoftOfficeExcel数据,请将“Excel12.0”添加到OLEDB连接字符串的扩展属性。

如果您是使用ODBC连接到MicrosoftOfficeAccess数据的应用程序开发人员,请将连接字符串设置为“Driver={MicrosoftAccessDriver(*.mdb,*.accdb)};DBQ=pathtomdb/accdbfile”

如果您是使用ODBC连接到MicrosoftOfficeExcel数据的应用程序开发人员,请将连接字符串设置为“Driver={MicrosoftExcelDriver(*.xls,*.xlsx,*.xlsm,*.xlsb)};DBQ=pathtoxls/xlsx/xlsm/xlsbfile”VB实现Access数据库的数据操作(2011-04-1115:26:13)转载标签:vb连接数据库access数据库增加查询删除修改it分类:技术博论在VB中连接Access数据库并对数据进行操作。本例子使用的数据库是Access2007,实现了对Access数据库数据的查询,添加,删除,修改。要连接access数据库有两种方法用ADODC或ADO。方法一:(ADODC)

此方法首先须引用Projects-Components-MicrosoftADODataControls6.0(OLEDB).

之后在表单设置ADODC控件。然后Form_Load()输入以下代码:

PrivateSubForm_Load()

ADODC1.ConnectionString="provider=Microsoft.jet.OLEDB.4.0;Persistsecurityinfo=False;Datasource="&App.Path&"\数据库名称.mdb"

ADODC1.CommandType=adCmdText

ADODC1.RecordSource="select*from表格名称"

ADODC1.Refresh

EndSub

下面主要介绍方法二:(ADO)注:此方法在使用中应记得首先须引用工程-引用-MicrosoftActiveXDataObjects2.6Library连接access2007的字符串:

没有密码:

Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:\myFolder\myAccess2007file.accdb;PersistSecurityInfo=False;

有密码:

Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:\myFolder\myAccess2007file.accdb;JetOLEDB:DatabasePassword=MyDbPassword;

实例:在Form中设置3个Textbox和5个CommandButton

分别为

Textbox=Date(txtdate),Items(txtitems),Price(txtprice).

CommandButton=新增(cmdadd),储存(cmdsave),删除(cmddelete),

取消新增(cmdcancel),编辑(cmdedit).

DimcnAsNewADODB.Connection

DimrsAsNewADODB.Recordset

Dimmodeasstring

PrivateSubForm_Load()

cn.ConnectionString="provider=Microsoft.ACE.OLEDB.12.0;"&_

"Persistsecurityinfo=False;Datasource="&App.Path&"\daily.accdb"

cn.Open

rs.CursorLocation=adUseClient

rs.Open"select*fromDaily",cn,adOpenKeyset,adLockPessimistic(Daily为Access资料表名)

Fori=0Tors.Fields.Count-1

List1.AddItemrs.Fields(i).Name

Nexti

EndSub

以下自作函数以便文本栏显示资料表资料

SubLoadControls()

Ifrs.BOF=FalseAndrs.EOF=FalseThen

txtdate=rs.Fields("Date")

txtitems=rs.Fields("Items")

txtprice=rs.Fields("Price")

EndIf

EndSub

以下为新增按钮代码

PrivateSubcmdadd_Click()

mode="add"

txtdate.Text=CStr(Date)(显示系统今天日期)

txtitems.SetFocus

txtitems=""

txtprice=""

EndSub

以下为编辑按钮代码

PrivateSubcmdedit_Click()

mode="edit"

CallLoadControls

txtdate.SetFocus

EndSub

以下为删除按钮代码

PrivateSubcmddelete_Click()

Ifrs.EOF=FalseThen

X=MsgBox("Doyouwanttodeletethisrecord",vbExclamation+vbYesNo)

IfX=vbYesThen

rs.Delete

rs.Requery

CallLoadControls

Else

ExitSub

EndIf

EndIf

EndSub

以下为储存按钮代码

PrivateSubcmdsave_Click()

Ifmode="add"Then

rs.AddNew

rs.Fields("Date")=txtdate

rs.Fields("Items")=txtitems

rs.Fields("Price")=txtprice

rs.Update

MsgBox"SuccessfullySaveData",vbInformation+vbOKOnly

rs.Requery

txtdate.SetFocus

CallLoadControls

ExitSub

EndIf

EndSub

Ifmode="edit"Then

rs.Fields("Date")=txtdate

rs.Fields("Items")=txtitems

rs.Fields("Price")=txtprice

rs.Update

MsgBox"SuccessfullySaveData",vbInformation+vbOKOnly

rs.Requery

txtdate.SetFocus

CallLoadControls

ExitSub

EndIf

以下为取消新增按钮代码

PrivateSubCmdcancel_Click()

CallLoadControls

EndSub

查询:

在form加上1个Textbox,1个commmandbutton和1个Listbox

Textbox=txtfind

CommandButton=cmdsearch

ListBox=List1

以下为取消查询按钮代码,可查询日期,文字和数字.

PrivateSubcmdsearch_Click()

SelectCasers.Fields(List1.ListIndex).Name

Case"Items"

SQL="select*fromTableNamewhereItems="&"'"&txtfind.Text&"'"

Case"Price"

SQL="select*fromTableNamewherePrice="&txtfind.Text

Case"Date"

SQL="select*fromTableNamewhereDate=#"&txtfind.Text&"#"

EndSelect

Ifrs.State=adStateOpenThenrs.Close

rs.OpenSQL,cn,adOpenStatic,adLockOptimistic

EndSub

本文主要参考:/the6yifu/blog/item/b148917a1aa830ea2e73b311.html\o"adodb.recordset.opensqlstr,conn,3,3后面的两个差数是什么意思"adodb.recordset.opensqlstr,conn,3,3后面的两个差数是什么意思2006-07-3121:272085人阅读评论(1)\o"收藏"收藏\o"举报"举报如果单单是读取,不涉及更新操作,那就用1,1

如果涉及读取及更新操作,可以用1,3或3,2Recordset对象的Open方法原型:

Open([Source],[ActiveConnection],[CursorType],[LockType],[Options])

CursorType游标类型:

ConstadOpenForwardOnly=0

前向游标,为缺省游标,提供最快的运行性能。用它打开recordset,从对至尾顺序取得所有结果。它不支持向后滚动,只允许在结果间单向移动。ConstadOpenKeyset=1

静态游标,反映第一次打开游标时表中数据的状态,游标无法查明底层表中的数据行是否更新过、删除过或添加了新的数据。不过与只能前移的洲标不同,静态游标可以在结果间前后滚动。ConstadOpenDynamic=2

键盘驱动的游标,可以查询表中底层数据行的某些变化,但不是全部。它特别是可以准确反映数据是否更新过。但它不能查明其它用户是否曾删除过数据行(删除掉的数据行在recordset中会留下空洞)。键盘驱动的游标支持在结果间前后滚动。ConstadOpenStatic=3

动态游标,是最丰富的游标类型。游标打开时可以查询其他用户对表的任何改动,而且支持滚动。LockType加锁类型:

ConstadLockReadOnly=1

缺省的上锁类型,只读方式上锁允许多个用户同时读取同样的数据,但不能改变数据。ConstadLockPessimistic=2

以悲观上锁方式打开数据对象。该方式假定在你编辑记录时会有其它用户访问数据。此时一旦你开始编辑记录,其它用户就不能访问该数据。ConstadLockOptimistic=3

以乐观上锁方式打开数据对象。该方式假定在你编辑记录时不会有其它用户访问数据。在完成改变之前,其它用户不能访问该记录。ConstadLockBatchOptimistic=4

执行多行批处理更新时使用这种类型Options参数:

Options参数标明用来打开记录集的命令字符串的类型。告诉ADO被执行的字符串内容的有关信息有助于高效地执行该命令字符串。adCMDTable。被执行的字符串包含一个表的名字。

adCMDText。被执行的字符串包含一个命令文本。

adCMDStoredProc。被执行的字符串包含一个存储过程名。

adCMDUnknown。不指定字符串的内容。(这是缺省值。)

简单点就是:

?

RS.OPENSQL,CONN,A,B

A:ADOPENFORWARDONLY(=0)只读,且当前数据记录只能向下移动

ADOPENSTATIC(=3)只读,当前数据记录可自由移动

ADOPENKEYSET(=1)可读写,当前数据记录可自由移动

ADOPENDYNAMIC(=2)可读写,当前数据记录可自由移动,可看到新增记录B:ADLOCKREADONLY(=1)默认值,用来打开只读记录

ADLOCKPESSIMISTIC(=2)悲观锁定

ADLOCKOPTIMISTIC(=3)乐观锁定

ADLOCKBATCHOPTIMISTIC(=4)批次乐观锁定\o"ADODB——RecordSet对象"ADODB——RecordSet对象2011-06-0414:2525人阅读评论(0)\o"收藏"收藏\o"举报"举报Recordset对象的属性

1、CursorType属性

AdOpenForwardOnly:仅向前游标,默认值。除了只能在记录中向前滚动外,与静态游标相同。当只需要在记录集中单向移动时,使用它可提高性能。(顾名思义,这种游标只能向前移动。然而,由于这种游标功能有限,将它用于系统资源时是非常有效的。)

AdOpenKeyset:键集游标。尽管从您的记录集不能访问其他用户删除的记录,但除无法查看其他用户添加的记录外,键集游标与动态游标相似。仍然可以看见其他用户更改的数据。(KeySet游标允许你看见自它创建起其他用户所做的修改,然而你却不能看到其他用户增加或删除的记录。)

AdOpenDynamic:动态游标。可以看见其他用户所作的添加、更改和删除。允许在记录集中进行所有类型的移动,但不包括提供者不支持的书签操作。(此类型的游标功能强大同时也是耗费系统资源最多的游标。Dynamic游标可以看到他们保存记录集合的所有变化。使用Dynamic游标的用户可以看到其他用户所做的编辑、增加、删除。如果数据提供者允许这种类型的游标,那么它是通过每隔一段时间从数据源重取数据来支持这种可视性的。毫无疑问这会需要很多的资源。)

AdOpenStatic:静态游标。可以用来查找数据或生成报告的记录集合的静态副本。另外,对其他用户所作的添加、更改或删除不可见。(Static类游标只是数据的一幅快照。这就是说,它无法看到自它创建以后其他用户对RecordSet所做的修改。采用这类游标你可以向前和向后航行。由于其功能简单,资源的需求比Dynamic要小!)

需要注意的是:一旦打开RecordSet,你就无法改变CursorType属性。但是,如果你首先关闭RecordSet,改变CursorType属性,然后重新打开RecordSet,那么你仍可以有效地改变游标的类型!

2、LockType属性

在任何同时可被多用户修改的数据库应用程序中,你必须处理可能发生的多个用户同时对同一条记录进行操作时的情况。当这种情况出现时,数据的完整性就会受到威胁,这是因为一个用户可能会在不自觉地在保存自己所做的修改时覆盖他人的修改。到时候你会觉得自己好象是没有做事。为了处理这种情况。ADO允许你在对RecordSet对象进行更新时决定并发事件控制的类型,当一个用户编辑时,如何由他对记录进行锁定。这就是由LockType属性所决定的。这个属性有四个值:

adLockReadonly:默认值,只读。无法更改数据。(这是RecodSet的默认值,如果你把锁定的方式设为该值,那么你将不能更新Recordset。)

adLockPessimistic:保守式记录锁定(逐条)。提供者执行必要的操作确保成功编辑记录,通常采用编辑时立即锁定数据源的记录的方式。(如果设置为此类锁定,记录被锁定,且只有在编辑开始到将记录更新的提交给数据提供者这段时间内进行编辑的用户才可以访问!)

adLockOptimistic:开放式记录锁定(逐条)。提供者使用开放式锁定,只在调用Update方法时锁定记录。(只有在将数据提交给数据提供者的那一瞬间才把记录锁定。)

adlockBatchOptimistic:开放式批更新。用于与立即更新模式相反的批更新模式。(设定为这种类型的锁定制式将被称为批量更新模式的RecordSet。可以加快更新RecordSet修改数据的速度,但因为同时更新多个记录,它也会恶化与并发访问相关的问题!)

3、AbsolutePage属性

AbsolutePage属性设定当前记录的位置是位于哪一页的页数编号;使用PageSize属性将Recordset对象分割为逻辑上的页数,每一页的记录数为PageSize(除了最后一页可能会有少于PageSize的记录数)。这里必须注意并不是所有的数据提供者都支持此项属性,因此使用时要小心。

与AbsolutePosition属性相同,AbsolutePage属性是以1为起始的,若当前记录为Recordset的第一行记录,AbsolutePage为1。可以设定AbsolutePage属性,以移动到一个指定页的第一行记录位置。

4、AbsolutePosition属性

若您需要确定目前指标在RecordSet中的位置,您可以用AbsolutePosition属性。

AbsolutePosition属性的数值为目前指标相对於第一笔的位置,由1算起,即第一笔的AbsolutePosition为1。

注意,在存取RecordSet时,无法保证RecordSet每次都以同样的顺序出现。

若要启用AbsolutePosition,必须先设定为使用用户端cursor(指针):rs.CursorLocation=3

5、PageCount属性

使用PageCount属性,决定Recordset对象包括多少“页”的数据。这里的“页”是数据记录的集合,大小等于PageSize属性的设定,即使最后一页的记录数比PageSize的值少,最后一页也算是PageCount的一页。必须注意也并不是所有的数据提供者都支持此项属性。

6、PageSize属性

PageSize属性是决定ADO存取数据库时如何分页显示的关键,使用它就可以决定多少记录组成一个逻辑上的“一页”。设定并建立一个页的大小,从而允许使用AbsolutePage属性移到其它逻辑页的第一条记录。PageSize属性能随时被设定。

7、RecordCount属性

这也是一个非常常用和重要的属性,我们常用RecordCount属性来找出一个Recordset对象包括多少条记录。使用RecordCount属性可确定Recordset对象中记录的数目。ADO无法确定记录数时,或者如果提供者或游标类型不支持RecordCount,则该属性返回–1。读已关闭的Recordset上的RecordCount属性将产生错误。Recordset对象的游标类型会影响是否能够确定记录的数目。对仅向前游标,RecordCount属性将返回-1,对静态或键集游标返回实际计数,对动态游标取决于数据源返回-1或实际计数。

8、BOF与EOF属性

通常我们在ASP程序中编写代码来检验BOF与EOF属性,从而得知目前指标所指向的RecordSet的位置,使用BOF与EOF属性,可以得知一个Recordset对象是否包含有记录或者得知移动记录行是否已经超出该Recordset对象的范围。

若当前记录的位置是在一个Recordset对象第一行记录之前时,BOF属性返回true,反之则返回false。

若当前记录的位置是在一个Recordset对象最后一行记录之后时,EOF属性返回true,反之则返回false。

(BOF与EOF都为True表示在RecordSet里没有任何记录。)

9、Filter属性

为Recordset中的数据指定筛选条件,使用Filter属性可选择性地屏蔽Recordset对象中的记录,已筛选的Recordset将成为当前游标。

这将影响基于当前游标返回值的其他属性,如AbsolutePosition、AbsolutePage、RecordCount和PageCount,因为将Filter属性设置为特

定值可将当前记录移动到满足新值的第一个记录。

这属性我认为相当有用处,有的时候我们打开了Recordset进行了某些判断以后我们还想过滤记录也就是重新调整sql语句,难道我们关闭Recordset再用新的SQL语句打开?不是,我们用Filter属性进行过滤,比如说

rs.openexec,conn,1,1

ifthenrs.filter="name='xxx'"

而不是

rs.openexec,conn,1,1

if...then

rs.close

exec=exec&"wherename='xxx'"

rs.openexec,conn,1,1

endif

实际上再很多地方不得不用到Filter,在以后的ASP技巧中会说到,大家也可以想一下。

明天继续说Recordset对象的方法。

Recordset对象的方法

1、AddNew方法

创建可更新Recordset对象的新记录。

recordset.AddNewFieldList,Values

FieldList

可选。新记录中字段的单个名称、一组名称或序号位置。

Values

可选。新记录中字段的单个或一组值。如果Fields是数组,那么Values也必须是有相同成员数的数组,否则将发生错误。字段名称的次序必须与每个数组中的字段值的次序相匹配。

我们一般是

rs.addnew

rs("xx")=xx

rs("xx")=xx

rs.update

需要注意的是在立即更新模式(调用Update方法时提供者会立即将更改写入基本数据源)下,调用不带参数的AddNew方法可将EditMode属性设置为adEditAdd。提供者将任何字段值的更改缓存在本地。调用Update方法可将新记录传递到数据库并将EditMode属性重置为adEditNone。如果传送了Fields和Values参数,ADO则立即将新记录传递到数据库(无须调用Update),且EditMode属性值没有改变(adEditNone)。

可能大家会问在ASP中使用ADO的AddNew方法和直接使用“Insertinto...”语句有和不同?那种方式更好?答:ADO的AddNew方法只是将“Insertinto”语句封装了起来,所以,当对大量数据进行操作的时候,直接使用SQL语句将会大大加快存取数据的速度,因为他减少了ADO的“翻译”时间。

2、Delete方法

删除当前记录或记录组。

recordset.DeleteAffectRecords

AffectRecords

AffectEnum值,确定Delete方法所影响的记录数目,该值可以是下列常量之一。

AdAffectCurrent默认。仅删除当前记录。

AdAffectGroup删除满足当前Filter属性设置的记录。要使用该选项,必须将Filter属性设置为有效的预定义常量之一。

adAffectAll删除所有记录。

adAffectAllChapters删除所有子集记录。

使用立即更新模式将在数据库中进行立即删除,否则记录将标记为从缓存删除,实际的删除将在调用Update方法时进行。

3、Update方法

保存对Recordset对象的当前记录所做的所有更改

recordset.UpdateFields,Values

Fields

可选。变体型,代表单个名称;或变体型数组,代表需要修改的字段(一个或多个)名称及序号位置。

Values

可选。变体型,代表单个值;或变体型数组,代表新记录中字段(单个或多个)值。

如果希望取消对当前记录所做的任何更改或者放弃新添加的记录,则必须调用CancelUpdate方法。

4、CancelUpdate方法

recordset.CancelUpdate

使用CancelUpdate方法可取消对当前记录所作的任何更改或放弃新添加的记录。在调用Update方法后将无法撤消对当前记录或新记录所做的更改,如果在调用CancelUpdate方法时添加新记录,则调用AddNew之前的当前记录将再次成为当前记录。如果尚未更改当前记录或添加新记录,调用CancelUpdate方法将产生错误。

5、Find方法

搜索Recordset中满足指定标准的记录。如果满足标准,则记录集位置设置在找到的记录上,否则位置将设置在记录集的末尾。

Find(criteria,SkipRows,searchDirection,start)

criteria

字符串,包含指定用于搜索的列名、比较操作符和值的语句。

SkipRows

可选,长整型值,其默认值为零,它指定当前行或start书签的位移以开始搜索。

searchDirection

可选的SearchDirectionEnum值,指定搜索应从当前行还是下一个有效行开始。其值可为adSearchForward或

adSearchBackward。搜索是在记录集的开始还是末尾结束由searchDirection值决定。

start

可选,变体型书签,用作搜索的开始位置。

criteria“比较操作符”可以是“>”(大于)、“<”(小于)、“=”(等于)、“>=”(大于或等于)、“<=”(小于或等于)、“<>”

(不等于)或“like”(模式匹配)。criteria中的值可以是字符串、浮点数或者日期。字符串值以单引号分界(如“state='WA'”)。

日期值以“#”(数字记号)分界(如“start_date>#7/22/97#”)。

需要注意的是find是不支持多字段。但是可以用filter实现。"name='abc'"AND"city='sh'"是不允许的

6、Move方法

移动Recordset对象中当前记录的位置

recordset.MoveNumRecords,Start

NumRecords

带符号长整型表达式,指定当前记录位置移动的记录数。

Start

可选,字符串或变体型,用于计算书签。也可为下列值之一:

AdBookmarkCurrent默认。从当前记录开始。

AdBookmarkFirst从首记录开始。

AdBookmarkLast从尾记录开始。

需要注意的是:

(1)如果NumRecords参数大于零,则当前记录位置将向前移动(向记录集的末尾)。如果NumRecords小于零,则当前记录位置向后移动(向记录集的开始)。

(2)从空的Recordset对象调用Move方法将产生错误。

(3)如果Move调用将当前记录位置移动到首记录之前,则ADO将当前记录放置在记录集(BOF为True)的首记录之前。在BOF属性已经为True时试图向后移动将产生错误;如果Move调用将当前记录位置移动到尾记录之后,则ADO将当前记录放置在记录集(EOF为True)的尾记录之后。在EOF属性已经为True时试图向前移动将产生错误。

7、MoveFirst、MoveLast、MoveNext和MovePrevious方法

在指定Recordset对象中移动到第一个、最后一个、下一个或前一个记录并使该记录成为当前记录。

recordset.{MoveFirst|MoveLast|MoveNext|MovePrevious}

需要注意的是:

(1)使用MoveNext方法将当前记录向前移动一个记录(向Recordset的底部)。如果最后一个记录是当前记录并且调用MoveNext方法,则ADO将当前记录设置到Recordset(EOF为True)的尾记录之后。当EOF属性已经为True时试图向前移动将产生错误。

(2)使用MovePrevious方法将当前记录位置向后移动一个记录(向记录集的顶部)。Recordset对象必须支持向后游标移动;否则方法调用将产生错误。如果首记录是当前记录并且调用MovePrevious方法,则ADO将当前记录设置在Recordset(BOF为True)的首记录之前。而BOF属性为True时向后移动将产生错误。

8、Clone方法

创建与现有Recordset对象相同的复制Recordset对象。可选择指定该副本为只读。

SetrstDuplicate=rstOriginal.Clone

rstDuplicate

对象变量,标识正在创建的复制Recordset对象。

rstOriginal

对象变量,标识要被复制的Recordset对象。

使用Clone方法可创建多个Recordset对象副本,这对于希望在给定的记录组中保留多个当前记录十分有用。使用Clone方法比使用与初始定义相同的定义创建和打开新Recordset对象要有效得多。

也就是说

rs.openexec,conn,1,1

rs2.openexec,conn,1,1

应该这么改写

rs.openexec,conn,1,1

rs2=rs.clone

需要注意的是:

(1)新创建副本的当前记录将设置为首记录。

(2)关闭原始Recordset时并不关闭它的副本,而关闭某个副本也将不关闭原始Recordset或任何其他副本。

9、Close方法

关闭打开的对象及任何相关对象。

object.Close

需要注意的是:

(1)使用Close方法可关闭Recordset对象以便释放所有关联的系统资源。关闭对象并非将它从内存中删除,可以更改它的属性设置并且在

此后再次打开。要将对象从内存中完全删除,可将对象变量设置为Nothing。

(2)如果正在立即更新模式下进行编辑,调用Close方法将产生错误,应首先调用Update或CancelUpdate方法。

10、Open方法,为什么最后说这个,因为前面的各项属性方法没有弄清楚,我们是不会理解CursorType参数的

recordset.OpenSource,ActiveConnection,CursorType,LockType,Options

Recordset对象可以通过Source属性来连接Command对象。Source参数可以是一个Command对象名称、一段SQL命令、一个指定的数据表名称或是一个StoredProcedure。假如省略这个参数,系统则采用Recordset对象的Source属性。ActiveConnection

Recordset对象可以通过ActiveConnection属性来连接Connection对象。这里的ActiveConnection可以是一个Connection对象或是一串包含数据

库连接信息(ConnectionString)的字符串参数。CursorType

Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及ad

OpenStatic,分述如下:

常数常数值说明

adOpenForwardOnly0缺省值,启动一个只能向前移动的游标(ForwardOnly)。

adOpenKeyset1启动一个Keyset类型的游标。

adOpenDynamic2启动一个Dynamic类型的游标。

adOpenStatic3启动一个Static类型的游标。

以上几个游标类型将直接影响到Recordset对象所有的属性和方法,以下列表说明他们之间的区别。

Recordset属性adOpenForwardOnlyadOpenKeysetadOpenDynamicadOpenStatic

AbsolutePage不支持不支持可读写可读写

AbsolutePosition不支持不支持可读写可读写

BOF只读只读只读只读

CursorType可读写可读写可读写可读写

EOF只读只读只读只读

Filter可读写可读写可读写可读写

LockType可读写可读写可读写可读写

PageCount不支持不支持只读只读

PageSize可读写可读写可读写可读写

RecordCount不支持不支持只读只读

AddNew支持支持支持支持

CancelBatch支持支持支持支持

CancelUpdate支持支持支持支持

Close支持支持支持支持

Delete支持支持支持支持

Move不支持支持支持支持

MoveFirst支持支持支持支持

MoveLast不支持支持支持支持

MoveNext支持支持支持支持

MovePrevious不支持支持支持支持

Open支持支持支持支持

Update支持支持支持支持

UpdateBatch支持支持支持支持

Recordset对象Open方法的LockType参数表示要采用的Lock类型,如果忽略这个参数,那么系统会以Recordset对象的LockType属性为预设值。LockType参数包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下:

常数常数值说明

adLockReadOnly1缺省值,Recordset对象以只读方式启动,无法运行AddNew、Update及Delete等方法

adLockPrssimistic2当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性。

adLockOptimistic3当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作。

adLockBatchOptimistic4当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、删、改的操作。

需要注意的是:

如果数据源没有返回记录,那么提供者将BOF和EOF属性同时设置为True,并且不定义当前记录位置。如果游标类型允许,仍然可以将新数据添加到该空Recordset对象。ADOValue属性\o"ADOParameter对象"返回ADOParameter对象参考手册定义和用法Value属性可设置或返回Parameter,Field或Property对象的值。对象Value属性的描述ParameterValue值可设置或返回一个variant值,该值指示Parameter对象的值。注释:在读取Value属性之前,应当关闭Recordset对象。对于Parameter对象,ADO只从提供者读取Value属性一次。FieldValue属性可设置或返回一个variant值,该值指示Field对象的当前值。注释:对于被添加到Record的Fields集合的新的Field对象,在设置任何其他属性之前,您必须首先设置Value属性,并且调用Fields集合的Update。PropertyValue属性可设置或返回一个variant值,该值指示Property对象的当前值。注释:您无法为只读属性设置Value。2011/9/4AdodcVB利用ADO控件连接access数据库今天告诉大家VB利用ADO控件连接access数据库的两种方法:一种是在adodc1的属性里设置数据库文件的路径,这种方法的优点是简单易操作,缺点是,当源文件换了地方后,要重新设置数据库的路径,否则连接不上数据库了。一种是用代码设置数据库的路径,这种方法的优点就是只要源文件和数据库在同一文件夹下,无论移动到哪里都能连接上。如果没有建立好数据库的话,先建立一个数据库,然后建立一个表比如我们建的表名为message,然后把里面的字段名称和数据类型都按自己的需要设置好.然后保存就可以了.打开MicrosoftVisualBasic6.0我用的是VB6.0,在需要调用数据库的窗体上加入一个adodc控件,默认名称为:Adodc1。默认的情况下工具栏里是没有这个控件的,可以打开工程部件(快捷键CTRL+T),去掉只显示选定项的勾,然后勾上MicrosoftADODataControl(OLED

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论