⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 030102.htm

📁 提供一个VB学习教程,入门级。来源于网上
💻 HTM
📖 第 1 页 / 共 2 页
字号:
        Adodc1.RecordSource = "Titles"<br> 
        Set Text1.DataSource = Adodc1<br> 
        Text1.DataField = "Title"<br> 
        End Sub<br> 
        其中对于ADO控件,设置其ConnectionString和RecordSource属性都是字符串,重点要注意的就是绑定控件的DataSource属性,它的值是一个对象,一定要用Set赋值。而且有一点重要常识:绑定控件实质上是绑定到记录集上的,不要简单地理解为绑定到数据控件或数据环境的Command命令对象上,这是不准确的,你应当试试在代码中直接将DataSource赋值给一个记录集。(注:对于数据对象ADO是如此,但对于ADODC控件??却不是)<br>
        ★对用户输入的数据进行验证:如用户输入的是无用的数据,则取消保存和更新,对于ADO控件,应在WillChangeRecord事件中进行验证。ADO对象则在用WithEvents声明的RecordSet对象WillChangeRecord事件中,一样的。要取消保存就将事件提供的参数adStatus设为adStatusCancel,或者用CancelUpdate方法。<br>
        DataGrid表格控件:DataGrid控件包含1个Columns字段列集合,对单元格,行,列等操作方便。在设计时,在DataGrid控件上单击鼠标右键,选“检索字段”,这时就会填充指定datasource中的全部字段,然后再单击鼠标右键,选“编辑”,这时就可随意调整每列的宽度了。通过设置datagrid控件中columns字段集合的count属性和recordset对象的recordcount属性,可以规定控件显示的列数和行数。当用户选中某个单元格时,控件的text和对应column字段对象的Value属性就指向这个单元格,通过修改这两个属性可以修改当前单元格的内容。 利用datagrid控件,还可在程序运行时对各控件进行数据的动态绑定。以及随时将不需要的列进行隐藏。<br> 
        DataGrid控件的属性方法和事件:<br>
        属性:AllowAddnew,AllowDelete,AllowUpdate属性:是否允许在表中增添、删除、修改记录。如果设为false实际等于表只读,也可分别单独设置。<br>
        Col,Row属性:运行中当前光标所在的列(col)和行(row),最左上角单元格为0,0开始。如姓名“李海石”在第7行第0列。<br>
        Text属性:运行时当前单元格的文本内容。<br>
        ColumnHeaders属性:是否在表的最上1行显示字段标头。<br>
        HeadLines属性:字段标头的文本行数(宽度)。缺省为1行。<br>
        DataChanged属性:表中的数据是否改变,如果设为false表数据不可修改。<br>
        VisibleCols,VisibleRows属性:在表中(不使用滚动条)可见的列数和行数。&nbsp;<br>
        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——当前记录的本字段值。<br> 
        BeforeUpdate,BeforeInsert,BeforeDelete,BeforeColUpdate,BeforeColEdit事件:在表中修改,插入,删除记录等之前触发,如果要取消修改或删除等,只要将事件中的参数cancel设为true即可。在修改,添加,删除等操作之后则触发AfterUpdate,AfterInsert…等事件。<br>
        RowResize,ColResize事件:在运行时改变表的行,列宽时引发。<br>
        <br>
        注意:在使用数据绑定控件时,必须把绑定控件和数据控件放在同一窗体上。<br>
        Datacombo对象RowSource和listfield属性,指定下拉表框显示的某adodc的某字段,仅仅是显示而已。datasource,datafield属性,绑定某adodc控件中某字段,注:须认清一点,在绑定后,在datacombo对象文本框内的的改动会自动更新到当前记录的对应绑定字段中。也就是说它和文本框一样“用来接受数据输入”。<br>
        MSChart控件的功能:将数据以图表的形式显示。<br>
        数据库中的“关系”:是建立在两个表“之间”的链接。有一对一,一对多,多对多三种关系。&nbsp;<br>
        [问题:在数据库中删除一个记录时,并不真正将其删除,而只是打上个标记而已,如何真正删除这些记录呢?对一个打上删除标记的记录,如何恢复为原样,能显示出来呢?]<br>
        数据绑定控件的DataFormat属性:自定义数据的不同显示格式(自选)。<br>
        datachanged属性:绑定控件的内容是否发生变化。如果设为False,表示本控件中绑定数据不可修改。(?)<br>
        ADODC控件的connectionstring属性用来连接一个数据库,除用“连接字符串”建立连接外,还可选“使用data link文件(链接文件)”的方式建立连接,先随便在VB外创建(如桌面)一个后缀为udl的文件(只要单击鼠标右键“新建”选“Microsoft数据链接”即可),然后双击,从“提供者”卡开始完成对话框即可。有了这样一个链接文件,就可在adodc的connectionstring属性中指定这个Data link文件。使用数据链接文件的好处是:多个不同程序的ADODC可同用一个这样的链接文件,还有利于简化用ADO对象编程时代码中写的connectionstring字符串。<br> 
        ★ 使用数据环境DataEnvironment。<br> 
        数据环境用于连接数据库,比数据控件更方便有用,在实际的数据库编程中,不少方案用了数据环境!<br>
        添加数据环境:从工程菜单中“更多ActiveX设计器”“Data Environment”就可添加一个数据环境,最好干脆在新建工程对话框中选择数据工程,还可在工具栏上打开“数据视图”窗口,其包含的工具栏上有“添加数据环境到当前工程”按纽。<br> 
        使用数据环境:可将一个数据环境看成一个数据控件如Adodc,但又有ADO对象的特征,<br>
        第一步:从工程窗口双击DataEnvironment1打开它,在其中有一个缺省的Connection1对象,右键单击它,在弹出菜单中选择“属性”,即可设置要连接到的数据源,其实就是它的ConnectionString。设置好后,单击工具栏上的“添加命令”按纽,给这个Connection1对象添加一个Command1命令对象。右键选中Command1,选择“属性”,在对话框中设置从数据源中取得数据的方式(即RecordSource),如选中数据库对象,在其中选“表”,然后选择一个表名称即可。<br>
        第二步:为这个DataEnvironment1添加绑定控件:很简单,只要在DataEnvironment1中展开设置好RecordSource的Command1命令对象,会出现可用的全部字段,按住鼠标拖动字段到窗体上即可自动生成绑定控件(一个标答和一个文本框)。可同时向不同的窗体上拖放字段,都与这个数据环境绑定,可见,DataEnvironment确实比数据控件好,它在整个工程中都可见。当然也可自行添加绑定控件,需要设置好DataSource,<br>
        DataField以及DataMember属性,这里多出一个DataMember属性是要绑定到数据环境中的哪个Command命令对象(因为一个数据环境中经常包含多个命令对象)。<br>
        第三步:添加代码控制DataEnvironment.其实它就象是Adodc控件,不过在使用之前要初始化,否则会出现“对象关闭”的错误提示,初始化的方法是用语句:” DataEnvironment1.命令对象名”,如DataEnvironment1.Command1,这样就可以把Command1打开了,注意如果在代码中重复使用这句,会出现“对象已打开”的错误提示,所以应当只使用一次。其他实际的操作,和数据控件类似,比如要使记录的指针向上移动。可用DataEnvironment1.RecordSets(0).MovePrevious,也是有它的记录集(集合)的。当然需要指出,因为一个数据环境可有多个连接和命令对象,当在数据环境中添加多个命令对象时,会有多个记录集,每个命令对象有一个记录集,命名约定是”rs+命令对象名”,比如有一个命令对象Command3,那么要操作它所产生的记录集:<br> 
        DataEnvironment1.rsCommand3.MoveNext<br>
        rsCommand3就是对应于Command3对象的记录集,可用于代码中进行控制。<br>
        技巧:一个数据环境可添加多个连接Connection和多个Command对象,当你选中一个对象时,在属性窗口中会显示出它的属性列表,真的和控件一样哦。<br>
        特别说明:缺省情况下,创建的连接对象和命令对象是只读的,不能修改源数据库。需要在命令对象的属性页“高级”选项卡上将锁定类型设为“3-开放式”,或直接在属性窗口中将命令对象的LockType属性设置为“3- adLockOptimistic开放式”。注意:实际上不是命令对象的LockType属性,而是它形成的记录集的LockType属性,一并放到命令对象的属性页中设置。这点与ADO对象一样,因为ADO只在RecordSet对象中有一个LockType设置。<br> 
        ★使用数据环境操作关联表:<br>
        大多数数据库都在多表间存在关联。关联有一对一,一对多,多对多三种。最常用的是一对多的关系。<br>
        一、关联:&nbsp;<br>
        首先要理解关联:关联就是能够使一个表中的记录与另一个表中的记录链接或关联的两表间连接。对于一个表中的一条记录,在另一个表中有一条或多条记录与之对应,比如我在“个体户档案”表中有一条“吴莲秀”的记录:<br>
        姓名 地址 执照号码 营业额 行业 备注<br> 
        吴莲秀 吉富 1386671215 2000 零售贸易&nbsp;<br>
        在“发票”表中有“吴莲秀”交纳的多张管理费发票:<br>
        发票号码日期 姓名 收费起点 收费终点 金额 备注<br> 
        0188035 4/1 吴莲秀 1/1/2002 1/31/2002 40&nbsp;<br>
        0188047 4/1 吴莲秀 2/1/2002 2/28/2002 40&nbsp;<br>
        0188073 4/1 吴莲秀 3/1/2002 3/31/2002 40&nbsp;<br>
        0188098 4/1 吴莲秀 4/1/2002 4/30/2002 40&nbsp;<br>
        在这种情况下,我们就可把这两个表关联起来,把“个体户档案”作源表,其“姓名”字段作为主关健字,把“发票”作目的表,其“姓名”字段作为外来关健字,创建一个一对多的关系,要注意:一个表只能有一个主关健字,可以有多个外来关健字。主关健字必须具有唯一性,即每个记录要有不同的值,这样才能正确无误地标识每条源记录,否则关联将崩溃,有一个办法就是将主关健字设为主索引,如先把“个体户档案”的“姓名”字段设为主索引,当你试图增加另一个叫吴莲秀的记录时就会出错。且最好使用数值型字段,能“自动增加字段”更好,这里使用的是字符串,不好意思。<br>
        如何创建关联?——通过在一个表中包含一个主关健字字段并在另一个表中提供一个外来关健字段,将一个引用存储到连接的记录上。主关健字是唯一标识表中每个记录的ID字段,在“可视化数据库管理器”中,以建立索引的同时选中复选框的 “主要的”来设定即可。(?)外来关健字用于存储另一个表中的主关健字以创建连接。外来关健字不用特别设定,至多改一下字段名使其与主关健字相同就可以了。<br> 
        另一方面,实际上,上面两个表原是一个表,即每张发票上的应填内容为发票号码,日期,姓名,地址,执照号码,行业,营业额,起点,终点,金额,备注等,但因每个个体户的地址,执照号,行业等对同一户来说都是一样,每张发票上都有这些字段,就会造成数据的重复。把这样的信息分解到另外的表中,利用关联来实现同样的目的,可节省不少资源。这种分解数据到多个关联表中以简化结构的过程叫“规范化”(也叫标准化)。这是设计数据库时一个很重要的步骤。数据库规范化是分解表使信息重复最小化的过程。<br>
        对于两个表中有关联的字段,应使用相同的字段名,如都为“姓名”。<br>
        在ACCESS软件中,单击“关系”按纽可显示出各表间的关系,它在有关系的不同表字段间连起一条线,在源表的主关健字处,上面标有数字1,表示一条记录,到达目的表的对应外来关健字处,上面标有无穷大符号∞,表示可对应无穷多记录,这是一对多关系,象VB提供的范例Nwind.mdb数据库中就全部是这样的关系。<br>
        一对一关系就是一个表中的一条记录被连接到另一个表的一条记录上。有一点要注意:不能把一对多关系反过来看成好象一对一,比如上面每张发票记录只对应一个个体户档案记录,认为是一对一,不对!发票记录的“姓名”不能是主关健字!不唯一,必须是从主关健字的源表引出一条记录对应另一个目的表的一条记录。如下图一对一:在目的表端有一个十字线,标明了源表主关健字和目的表外来关健字。另外象上面个体户的一对多:<br>
        目的端有一个分叉,象这种图叫做气泡图,在建立表关联时事先画好作为草图很有用。<br>
        多对多在联较为复杂,第一个表中的多条记录被链接到第二个表的多条记录,反过来也是这样。<br>
        <br>
        二、在数据环境中使用关联:<br>
        主要就是建立分级的命令对象,即先建立一个指向源表的Command对象,再为这个命令对象建立一个子命令对象,使它指向目的表,然后在该子命令属性页“关联”卡上,可以看到选中了“与父命令关联”复选框,而且还可看到父命令对象是指向源表的那个对象(本来就是在它下面建立的子对象嘛),在“关联定义”中定义好主关健字(父字段)和外来关健字(子字段),“添加”即可。这样,与源表(父命令)记录集当前记录关联的目的表(子命令)所有记录就存储在子命令的记录集中。再说一遍,也就是:先为源表和目的表在同一Connection连接对象下各建立一个Command对象(只建立一个指向源表的也可以),再在连接到源表的那个Command对象上建立子命令对象,使它指向目的表,然后接着在子命令属性页的“关联”选项卡上,选中“与父命令关联”复选框,将父命令选定源表,在“关联定义”中选择主关健字和外来关健字,单击添加按纽即可。这时,当指向源表的父命令对象移动记录时,指向目的表的子命令对象将与之关联的记录都生成到子对象的记录集中。现举一例:<br>
        双击工程窗口中的DataEnvironment1,在Connection1上单击右键打开属性页,选择上面提到的个体户档案的数据库。建立连接。然后在Connection1下建立两个并列的Command对象(只建一个对象指向源表也可以),在属性页“通用”卡上设置,使之分别指向源表个体户档案和目的表发票。这时,再在指向源表的那个Command命令下建立子命令对象(选中源表命令单击“添加子命令”按纽),选中新添的子命令,先在其属性页“通用”卡上设置使其指向目的表发票,然后单击“关联”选项卡,选中与父命令对象关联,并在父命令下拉框中选定指向源表的那个命令对象,然后在关联定义框架中将父对象字段(主关健字)和子对象字段(外来关健字)都选择“姓名”,单击“添加”按纽,即可。<br>
        最后是在窗体上显示源表记录和目的表中的关联记录,对于源表记录,随便怎样都可以,如直接从数据环境中拖放字段到窗体上,对于关联的目的表,因为可能同时有多条关联记录(一对多),因此最好用MSHFlexGrid全部列表显示,只要在属性窗口设置HflexGrid的DataSource和DataMember就可以了,直接将DataMember指定为那个子对象,如果在代码中设置绑定,可按如下方式写代码:<br>
        Set MSHFlexGrid1.DataSource = DataEnvironment1.rsCmdUnitRecord.Fields("CmdSubInvoice").Value<br> 
        其中rsCmdUnitRecord是源表为个体户档案的对象的记录集,而子对象CmdSubInvoice确实如数据环境表中显示的那样,成了它的“字段”,只不过其Value值变成记录集,赋予MSHFlexGrid了(经验:绑定控件的DataSource不仅可指定数据控件或环境,还可直接指定记录集来绑定)。当然也可老方法绑定:Set MSHFlexGrid1.DataSource = DataEnvironment1 : MSHFlexGrid1.DataMember = "CmdSubInvoice"一样的。<br> 
        设置好绑定(特别是子对象的绑定)后,当源表对象每移动当前记录时,目的表子对象的记录集就会更新,记录集中存储的都是与源表当前记录关联的记录,因此绑定到记录集的MSHFlexGrid会不断更新数据。<br>
        <br>
        ★在数据环境中使用记录分组和参数查询:<br>
        这两项工作都是在Command对象的属性页中设置。<br>
        将记录按某个字段分组:先设置好Connection1连接和Command1的数据源,然后在Command1的属性页“分组”选项卡上选中“分组命令对象”复选框,然后从左边选择一个字段添加到右边框中,确定即可。这样生成的记录集便具有了层次性,和GROUP BY的效果是一样的,可以用MSHflexgrid或报表Data Report来绑定。<br> 
        使用带单个参数的SQL查询:在Command1的属性页“通用”卡上选中使用“SQL语句”生成记录集,然后输入在WHERE子句中带?问号的查询:SELECT [name],[money] FROM [invoice] WHERE [name] LIKE ?。这个问号就是一个参数,可以在代码中赋值,生成不同记录集。当然,仅这样参数的设置还没完成,在“参数”选项卡上为这个‘问号’设置属性,如参数名,输入/输出参数,数据类型等。<br> 
        代码中赋予具体的参数值,很简单,在初始化命令对象的语句(DataEnvironment1.Command1)后面附上参数值就可以了,如:<br>
        Private Sub Form_Load()<br> 
        DataEnvironment1.Command2 "符章秀"<br> 
        Set MSHFlexGrid1.DataSource = DataEnvironment1.rsCommand2<br> 
        End Sub<br> 
        不过只能包含一个参数。而且有一点问题本人还没解决:就是如何动态地改变参数值,因为会出现“对象已打开”的错误。<br>
        ★数据报表DataReport:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -