什么是绑定控件.docx
- 文档编号:16105363
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:15
- 大小:29.65KB
什么是绑定控件.docx
《什么是绑定控件.docx》由会员分享,可在线阅读,更多相关《什么是绑定控件.docx(15页珍藏版)》请在冰点文库上搜索。
什么是绑定控件
什么是绑定控件?
绑定控件指的是一个窗体上的”对象“,由于创建它的那个控件设置了显示数据库信息方面的功能,通过设置对象的datasource(数据源)属性和datafield(数据字段)属性,使这个对象“绑定”于一数据库。
数据对象DATA的几个重要属性:
一,connect属性:
数据库类型,缺省为ACCESS。
二,databasename属性:
选定一个路径下数据库文件,可在属性窗口设置,代码中例如:
Data1.DatabaseName="d:
\vb6\Nwind.mdb"
三,recordsource属性:
选定数据库中的一个表,如果不在属性窗口设置,代码中写也可以,例如:
Data1.RecordSource="个体户管理"
与DATA对象绑定的对象的相关属性:
四。
绑定对象的datasource属性:
在属性窗口中设置,确定“绑定”到哪个数据对象,如设置为Data1
五。
将绑定对象的datafield属性设置为该表中的某个字段名,如:
Text1.DataField="姓名"
以上是几个最基本的属性。
DATA对象的readonly属性:
选择是否以只读方式打开数据库。
Data对象的Exclusive属性:
是否以独占方式打开数据库。
Data对象的UpdateRecord方法:
在不触发Validate事件的情况下保存绑定控件中的值到数据库。
Data对象的UpdateControls方法:
把数据库中的记录值写到绑定控件中。
即忽略当前绑定控件的值,相当于取消更改。
Validate事件:
当数据被增删,修改,添加等操作前引发。
Reposition事件:
当记录指针移动到新位置时引发。
ADO是以后发展的趋势,将替代DAO和RDO,ADO可访问本地数据库,也可访问远程数据库。
基于ADO对象的数据控件:
Adodc(使用方法和DATA差不多,但DATA是DAO的),与Adodc绑定的控件:
DataGrid控件显示记录集并可修改;DataList控件;DataCombo控件,DataRepeater控件可同时显示几个绑定控件数据。
HierarchicalFlexGrid网格控件,可排序、合并等,但不能修改。
Adodc的主要属性如下:
BOFAction属性:
返回或设置当其记录集BOF时的动作。
EOFAction属性:
返回或设置当其记录集EOF时的动作。
CacheSize:
返回或设置在cache中的行数;
CommandTimeout:
等待命令返回的时间(单位为秒),超时将出错。
CommandType:
指明形成记录集的命令的类型,为1-adCmdText表示形成记录集的是SQL命令,为2-adCmdTable表示记录集由表构成,为4-adCmdStoredProc由存储过程生成记录集,为8-adCmdUnknown未知命令类型。
ConnectionString:
通过对话框来建立连接(返回字符串)。
ConnectionTimeout:
等待连接成功的时间(秒)。
超时将出错。
CursorLocation:
光标位置。
为2-adUseServer表示采用服务器端光标,为3-adUseClient表示采用客户机端光标。
CursorType:
光标类型,为1-adOpenKeyset键集光标,为2-adOpenDynamic动态光标,为3-adOpenStatic静态光标。
动态光标允许用户看到其他用户对记录的修改增删,可修改数据源;静态光标是记录集的拷贝与快照,用户看不到其他用户对记录集的修改,且只读,键集光标类似动态型光标,但用户不能看到其他用户添加的记录或已删除的记录。
MaxRecord:
每次从数据库中取的最大记录数。
UserName:
用户名。
password:
口令。
Mode:
数据库打开模式,0是未知;1是只读;2是写;3是读写;16是可共享读写;4是不可共享读;8是不可共享写;12是不共享。
RecordSet:
记录集。
RecordSource:
记录集的数据源,指定记录集数据产生的方法。
Adodc的主要事件:
EndofRecordSet:
当记录集EOF/BOF时触发;
willChangeField:
当一个字段将被修改前触发;其中的cfields参数:
返回发生改变的字段数目,fields参数:
返回发生改变的字段对象。
fieldChangeComplete:
当一个字段被修改后触发;
willChangeRecord:
当一个记录将被修改前触发;
recordChangeComplete:
当一个记录被修改后触发;
willChangeRecordset:
当一个记录集将被修改前触发;
recordsetChangeComplete:
当一个记录集被修改后触发;
willMove:
一个记录即将成为当前记录前触发;
MoveComplete:
一个记录成为当前记录后触发。
对以上事件的参数,以Willmove为例说明如下:
adReason返回产生该事件的原因,如返回AdRSNAddnew(值1)是“因添加新记录而触发”,返回AdRSNClose(9)是“因关闭触发”,adrsndelete
(2)是“因删除记录触发”,返回AdRsnMove(10)是“因记录移动而触发”,返回AdRsnUpdate(3)是“因更新触发”等等。
可到对象游览器中找那个枚举变量去。
adStatus参数设置/返回此事件或(引发事件的)此操作的状态。
adStatusOK
(1)为引发事件的操作完成,为2是发生错误,为3是“不能取消引发事件的操作”,为4即adStatusCancel是“取消引发事件的操作”,如在代码中设adStatus=4,那么就取消了(引发事件的)此操作,等于没有发生此操作。
pRecordSet参数返回(引发事件的)此操作所作用的记录集。
★如何完全在代码中使用ADO控件和绑定控件?
包括设置ADO的ConnectionString属性和RecordSource属性;绑定控件的DataSource和DataField属性。
举一例如下:
PrivateSubForm_Load()
Adodc1.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=D:
\ProgramFiles\VB98\Biblio.mdb;PersistSecurityInfo=False"
Adodc1.RecordSource="Titles"
SetText1.DataSource=Adodc1
Text1.DataField="Title"
EndSub
其中对于ADO控件,设置其ConnectionString和RecordSource属性都是字符串,重点要注意的就是绑定控件的DataSource属性,它的值是一个对象,一定要用Set赋值。
而且有一点重要常识:
绑定控件实质上是绑定到记录集上的,不要简单地理解为绑定到数据控件或数据环境的Command命令对象上,这是不准确的,你应当试试在代码中直接将DataSource赋值给一个记录集。
(注:
对于数据对象ADO是如此,但对于ADODC控件?
?
却不是)
★对用户输入的数据进行验证:
如用户输入的是无用的数据,则取消保存和更新,对于ADO控件,应在WillChangeRecord事件中进行验证。
ADO对象则在用WithEvents声明的RecordSet对象WillChangeRecord事件中,一样的。
要取消保存就将事件提供的参数adStatus设为adStatusCancel,或者用CancelUpdate方法。
DataGrid表格控件:
DataGrid控件包含1个Columns字段列集合,对单元格,行,列等操作方便。
在设计时,在DataGrid控件上单击鼠标右键,选“检索字段”,这时就会填充指定datasource中的全部字段,然后再单击鼠标右键,选“编辑”,这时就可随意调整每列的宽度了。
通过设置datagrid控件中columns字段集合的count属性和recordset对象的recordcount属性,可以规定控件显示的列数和行数。
当用户选中某个单元格时,控件的text和对应column字段对象的Value属性就指向这个单元格,通过修改这两个属性可以修改当前单元格的内容。
利用datagrid控件,还可在程序运行时对各控件进行数据的动态绑定。
以及随时将不需要的列进行隐藏。
DataGrid控件的属性方法和事件:
属性:
AllowAddnew,AllowDelete,AllowUpdate属性:
是否允许在表中增添、删除、修改记录。
如果设为false实际等于表只读,也可分别单独设置。
Col,Row属性:
运行中当前光标所在的列(col)和行(row),最左上角单元格为0,0开始。
如姓名“李海石”在第7行第0列。
Text属性:
运行时当前单元格的文本内容。
ColumnHeaders属性:
是否在表的最上1行显示字段标头。
HeadLines属性:
字段标头的文本行数(宽度)。
缺省为1行。
DataChanged属性:
表中的数据是否改变,如果设为false表数据不可修改。
VisibleCols,VisibleRows属性:
在表中(不使用滚动条)可见的列数和行数。
Columns字段集合:
对每1字段对象的操作。
如:
DataGrid1.Columns("姓名").Visible=False.隐藏"姓名"字段。
用Columns(索引或关健字)来标识每个字段,其实是columns.item(索引或关健字)的缺省形式,索引值从最小0开始。
Columns集合本身有count(字段列数),item(当前字段),add(在表中添加字段),remove(删除表中字段)四个属性方法。
如x=Datagrid1.Columns.Count.x返回6表示有六个字段。
索引为0—5。
每个字段对象有其自身的属性,Alignment——记录中文本的对齐方式(如左、右、居中);Button——是否在当前记录单元格右边显示下拉箭头;Caption——字段标题;AllowSizing——是否允许用户调整本字段列宽度;Locked——字段只读;DataChanged——是否有记录被修改(本字段);DataField——捆绑字段(只读?
);Text和Value——当前记录的本字段值。
BeforeUpdate,BeforeInsert,BeforeDelete,BeforeColUpdate,BeforeColEdit事件:
在表中修改,插入,删除记录等之前触发,如果要取消修改或删除等,只要将事件中的参数cancel设为true即可。
在修改,添加,删除等操作之后则触发AfterUpdate,AfterInsert…等事件。
RowResize,ColResize事件:
在运行时改变表的行,列宽时引发。
注意:
在使用数据绑定控件时,必须把绑定控件和数据控件放在同一窗体上。
Datacombo对象RowSource和listfield属性,指定下拉表框显示的某adodc的某字段,仅仅是显示而已。
datasource,datafield属性,绑定某adodc控件中某字段,注:
须认清一点,在绑定后,在datacombo对象文本框内的的改动会自动更新到当前记录的对应绑定字段中。
也就是说它和文本框一样“用来接受数据输入”。
MSChart控件的功能:
将数据以图表的形式显示。
数据库中的“关系”:
是建立在两个表“之间”的链接。
有一对一,一对多,多对多三种关系。
[问题:
在数据库中删除一个记录时,并不真正将其删除,而只是打上个标记而已,如何真正删除这些记录呢?
对一个打上删除标记的记录,如何恢复为原样,能显示出来呢?
]
数据绑定控件的DataFormat属性:
自定义数据的不同显示格式(自选)。
datachanged属性:
绑定控件的内容是否发生变化。
如果设为False,表示本控件中绑定数据不可修改。
(?
)
ADODC控件的connectionstring属性用来连接一个数据库,除用“连接字符串”建立连接外,还可选“使用datalink文件(链接文件)”的方式建立连接,先随便在VB外创建(如桌面)一个后缀为udl的文件(只要单击鼠标右键“新建”选“Microsoft数据链接”即可),然后双击,从“提供者”卡开始完成对话框即可。
有了这样一个链接文件,就可在adodc的connectionstring属性中指定这个Datalink文件。
使用数据链接文件的好处是:
多个不同程序的ADODC可同用一个这样的链接文件,还有利于简化用ADO对象编程时代码中写的connectionstring字符串。
★使用数据环境DataEnvironment。
数据环境用于连接数据库,比数据控件更方便有用,在实际的数据库编程中,不少方案用了数据环境!
添加数据环境:
从工程菜单中“更多ActiveX设计器”“DataEnvironment”就可添加一个数据环境,最好干脆在新建工程对话框中选择数据工程,还可在工具栏上打开“数据视图”窗口,其包含的工具栏上有“添加数据环境到当前工程”按纽。
使用数据环境:
可将一个数据环境看成一个数据控件如Adodc,但又有ADO对象的特征,
第一步:
从工程窗口双击DataEnvironment1打开它,在其中有一个缺省的Connection1对象,右键单击它,在弹出菜单中选择“属性”,即可设置要连接到的数据源,其实就是它的ConnectionString。
设置好后,单击工具栏上的“添加命令”按纽,给这个Connection1对象添加一个Command1命令对象。
右键选中Command1,选择“属性”,在对话框中设置从数据源中取得数据的方式(即RecordSource),如选中数据库对象,在其中选“表”,然后选择一个表名称即可。
第二步:
为这个DataEnvironment1添加绑定控件:
很简单,只要在DataEnvironment1中展开设置好RecordSource的Command1命令对象,会出现可用的全部字段,按住鼠标拖动字段到窗体上即可自动生成绑定控件(一个标答和一个文本框)。
可同时向不同的窗体上拖放字段,都与这个数据环境绑定,可见,DataEnvironment确实比数据控件好,它在整个工程中都可见。
当然也可自行添加绑定控件,需要设置好DataSource,
DataField以及DataMember属性,这里多出一个DataMember属性是要绑定到数据环境中的哪个Command命令对象(因为一个数据环境中经常包含多个命令对象)。
第三步:
添加代码控制DataEnvironment.其实它就象是Adodc控件,不过在使用之前要初始化,否则会出现“对象关闭”的错误提示,初始化的方法是用语句:
”DataEnvironment1.命令对象名”,如DataEnvironment1.Command1,这样就可以把Command1打开了,注意如果在代码中重复使用这句,会出现“对象已打开”的错误提示,所以应当只使用一次。
其他实际的操作,和数据控件类似,比如要使记录的指针向上移动。
可用DataEnvironment1.RecordSets(0).MovePrevious,也是有它的记录集(集合)的。
当然需要指出,因为一个数据环境可有多个连接和命令对象,当在数据环境中添加多个命令对象时,会有多个记录集,每个命令对象有一个记录集,命名约定是”rs+命令对象名”,比如有一个命令对象Command3,那么要操作它所产生的记录集:
DataEnvironment1.rsCommand3.MoveNext
rsCommand3就是对应于Command3对象的记录集,可用于代码中进行控制。
技巧:
一个数据环境可添加多个连接Connection和多个Command对象,当你选中一个对象时,在属性窗口中会显示出它的属性列表,真的和控件一样哦。
特别说明:
缺省情况下,创建的连接对象和命令对象是只读的,不能修改源数据库。
需要在命令对象的属性页“高级”选项卡上将锁定类型设为“3-开放式”,或直接在属性窗口中将命令对象的LockType属性设置为“3-adLockOptimistic开放式”。
注意:
实际上不是命令对象的LockType属性,而是它形成的记录集的LockType属性,一并放到命令对象的属性页中设置。
这点与ADO对象一样,因为ADO只在RecordSet对象中有一个LockType设置。
★使用数据环境操作关联表:
大多数数据库都在多表间存在关联。
关联有一对一,一对多,多对多三种。
最常用的是一对多的关系。
一、关联:
首先要理解关联:
关联就是能够使一个表中的记录与另一个表中的记录链接或关联的两表间连接。
对于一个表中的一条记录,在另一个表中有一条或多条记录与之对应,比如我在“个体户档案”表中有一条“吴莲秀”的记录:
姓名地址执照号码营业额行业备注
吴莲秀吉富13866712152000零售贸易
在“发票”表中有“吴莲秀”交纳的多张管理费发票:
发票号码日期姓名收费起点收费终点金额备注
01880354/1吴莲秀1/1/20021/31/200240
01880474/1吴莲秀2/1/20022/28/200240
01880734/1吴莲秀3/1/20023/31/200240
01880984/1吴莲秀4/1/20024/30/200240
在这种情况下,我们就可把这两个表关联起来,把“个体户档案”作源表,其“姓名”字段作为主关健字,把“发票”作目的表,其“姓名”字段作为外来关健字,创建一个一对多的关系,要注意:
一个表只能有一个主关健字,可以有多个外来关健字。
主关健字必须具有唯一性,即每个记录要有不同的值,这样才能正确无误地标识每条源记录,否则关联将崩溃,有一个办法就是将主关健字设为主索引,如先把“个体户档案”的“姓名”字段设为主索引,当你试图增加另一个叫吴莲秀的记录时就会出错。
且最好使用数值型字段,能“自动增加字段”更好,这里使用的是字符串,不好意思。
如何创建关联?
——通过在一个表中包含一个主关健字字段并在另一个表中提供一个外来关健字段,将一个引用存储到连接的记录上。
主关健字是唯一标识表中每个记录的ID字段,在“可视化数据库管理器”中,以建立索引的同时选中复选框的“主要的”来设定即可。
(?
)外来关健字用于存储另一个表中的主关健字以创建连接。
外来关健字不用特别设定,至多改一下字段名使其与主关健字相同就可以了。
另一方面,实际上,上面两个表原是一个表,即每张发票上的应填内容为发票号码,日期,姓名,地址,执照号码,行业,营业额,起点,终点,金额,备注等,但因每个个体户的地址,执照号,行业等对同一户来说都是一样,每张发票上都有这些字段,就会造成数据的重复。
把这样的信息分解到另外的表中,利用关联来实现同样的目的,可节省不少资源。
这种分解数据到多个关联表中以简化结构的过程叫“规范化”(也叫标准化)。
这是设计数据库时一个很重要的步骤。
数据库规范化是分解表使信息重复最小化的过程。
对于两个表中有关联的字段,应使用相同的字段名,如都为“姓名”。
在ACCESS软件中,单击“关系”按纽可显示出各表间的关系,它在有关系的不同表字段间连起一条线,在源表的主关健字处,上面标有数字1,表示一条记录,到达目的表的对应外来关健字处,上面标有无穷大符号∞,表示可对应无穷多记录,这是一对多关系,象VB提供的范例Nwind.mdb数据库中就全部是这样的关系。
一对一关系就是一个表中的一条记录被连接到另一个表的一条记录上。
有一点要注意:
不能把一对多关系反过来看成好象一对一,比如上面每张发票记录只对应一个个体户档案记录,认为是一对一,不对!
发票记录的“姓名”不能是主关健字!
不唯一,必须是从主关健字的源表引出一条记录对应另一个目的表的一条记录。
如下图一对一:
在目的表端有一个十字线,标明了源表主关健字和目的表外来关健字。
另外象上面个体户的一对多:
目的端有一个分叉,象这种图叫做气泡图,在建立表关联时事先画好作为草图很有用。
多对多在联较为复杂,第一个表中的多条记录被链接到第二个表的多条记录,反过来也是这样。
二、在数据环境中使用关联:
主要就是建立分级的命令对象,即先建立一个指向源表的Command对象,再为这个命令对象建立一个子命令对象,使它指向目的表,然后在该子命令属性页“关联”卡上,可以看到选中了“与父命令关联”复选框,而且还可看到父命令对象是指向源表的那个对象(本来就是在它下面建立的子对象嘛),在“关联定义”中定义好主关健字(父字段)和外来关健字(子字段),“添加”即可。
这样,与源表(父命令)记录集当前记录关联的目的表(子命令)所有记录就存储在子命令的记录集中。
再说一遍,也就是:
先为源表和目的表在同一Connection连接对象下各建立一个Command对象(只建立一个指向源表的也可以),再在连接到源表的那个Command对象上建立子命令对象,使它指向目的表,然后接着在子命令属性页的“关联”选项卡上,选中“与父命令关联”复选框,将父命令选定源表,在“关联定义”中选择主关健字和外来关健字,单击添加按纽即可。
这时,当指向源表的父命令对象移动记录时,指向目的表的子命令对象将与之关联的记录都生成到子对象的记录集中。
现举一例:
双击工程窗口中的DataEnvironment1,在Connection1上单击右键打开属性页,选择上面提到的个体户档案的数据库。
建立连接。
然后在Connection1下建立两个并列的Command对象(只建一个对象指向源表也可以),在属性页“通用”卡上设置,使之分别指向源表个体户档案和目的表发票。
这时,再在指向源表的那个Command命令下建立子命令对象(选中源表命令单击“添加子命令”按纽),选中新添的子命令,先在其属性页“通用”卡上设置使其指向目的表发票,然后单击“关联”选项卡,选中与父命令对象关联,并在父命令下拉框中选定指向源表的那个命令对象,然后在关联定义框架中将父对象字段(主关健字)和子对象字段(外来关健字)都选择“姓名”,单击“添加”按纽,即可。
最后是在窗体上显示源表记录和目的表中的关联记录,对于源表记录,随便怎样都可以,如直接从数据环境中拖放字段到窗体上,对于关联的目的表,因为可能同时有多条关联记录(一对多),因此最好用MSHFlexGrid全部列表显示,只要在属性窗口设置HflexGrid的DataSource和DataMember就可以了,直接将DataMember指定为那个子对象,如果在代码中设置绑定,可按如下方式写代码:
SetMSHFlexGrid1.DataSource=DataEnvironment1.rsCmdUnitRecord.Fields("CmdSubInvoice").Value
其中rsCmdUnitRecord是源表为个体户档案的对象的记录集,而子对象CmdSubInvoice确实如数据环境表中显示的那样,成了它的“字段”,只不过其Value值变成记录集,赋予MSHFlexGrid了(经验:
绑定控件的DataSource不仅可指定数据控件或环境,还可直接指定记录集来绑定)。
当然也可老方法绑定:
SetMSHFlexGrid1.DataSource=DataEnvironment1:
MSHFlexGrid1.DataMember="CmdSubInvoice"一样的。
设置好绑定(特别是子对象的绑定)后,当源表对象每移动当前记录时,目的表子对象的记录集就会更新,记录集中存储的都是与源表当前记录关联的记录,因此绑定到记录集的MSHFlexGrid会不断更新数据。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 什么是 绑定 控件