例如:
Provider=Microsoft.Jet.OLEDB.4.0Data Source=" &App.Path &"\用户表.mdbPersist Security Info=False这一整句是数据库连接字符串
Visual Basic作为应用程序的开发“利器”也表现在数据库应用程序的开发上,它良好的界面和强大的控件功能使数据库编程变得简单多了。但即便如此,数据库应用程序的开发仍然算得上是VB编程中的难点,这是因为你不仅要熟悉VB中关于数据库编程方面的知识(当然这是十分简单的)还要了解数据库的知识。所以我们先介绍一下数据库的基本知识,算是学习数据库编程前的热身运动吧!一、热身运动
首先需要声明是,我们这里介绍的数据库知识都是指的关系数据库。所谓关系数据库就是将数据表示为表的集合,通过建立简单表之间的关系来定义结构的一种数据库。
不管表在数据库文件中的物理存储方式如何,它都可以看作一组行和列,与电子表格的行和列类似。在关系数据库中,行被称为记录,而列则被称为字段。下面是一个客户表的例子。
表1 客户表
客户号 姓名 地址 城市 街道 邮编
1723 Doe John 1234 Ffth Avenue New York NY 1004
3391 Smith Mary 9876 Myrtle Lavee Bosten MA 6078
3765 Blasel Mortimer 2296j River Road peoria IL 7011
此表中每一行是一个记录,它包含了特定客户的所有信息,而每个记录则包含了相同类型和数量的字段:客户号、姓名等等。
表 是一种按行与列排列的相关信息的逻辑组,类似于工作单表。
字段 数据库表中的每一列称作一个字段。表是由其包含的各种字段定义的,每个字段描述了它所含有的数据。创建一个数据库时,须为每个字段分配一个数据类型、最大长度和其它属性。字段可包含各种字符、数字甚至图形。
记录 各个客户有关的信息存放在表的行,被称为记录。一般来说,数据库表创建时任意两个记录都不能相同。
键 键就是表中的某个字段(或多个字段),它(们)为快速检索而被索引。键可以是唯一的,也可以是非唯一的,取决于它(们)是否允许重复。唯一键可以指定为主键,用来唯一标识表的每行。例如,在前面的例子中,客户标识号 (客户号) 是表的主键,因为客户号唯一地标识了一个客户。
关系 数据库可以由多个表组成,表与表之间可以以不同的方式相互关联。例如,客户数据库还可以有一个包含某个客户的所有定单的表。它只用“客户号”字段来引用该定单的客户,而不在定单表中的每项重复所有客户信息,如下表所示:
表2 定货表
定货 客户号 日期 内容 数量
14764 3391 2/23/94 27 $22.95
14932 3391 3/17/94 46 $9.57
15108 8765 2/15/96 27 $22.95
在这个表中,客户号字段引用了客户表中的 客户号字段,从而把定单和客户联系起来了。可以看到,客户 3391 (Mary Smith) 在 94 年 2 月 23 日订购了 27 项,在 94 年 3 月 17 日订购了 46 项。用来建立关系的键叫做外部键,因为它与“外部”表(客户表)的主键关联。
一对多和多对多关系 上表中的关系类型叫做一对多关系,因为一个客户可以发出多个定单,而某个特定的定单只能是一个客户所发。也可以建立多对多的关系。例如,列出所有可以销售的项(存货)的盘存表:
表3 盘存表
内容 描述 供应商 费用 盘存
27 Straw Hat Garden Supply Co. $14.00 50
46 Garden gloves Garden Supply Co. $4.50 75
102 hanging floral industries $6.00 137
从盘存表中,可以看到在客户和存货项之间存在多对多的关系。也就是说,一个客户可以订购多个存货项,而一个存货项又能够被多个客户订购。多对多关系是通过两个独立的一对多关系来定义的,公共的“多”表包含了两个其它表的外部键。在该例中,定货s 表与 盘存 表(通过 “内容”)与 Customer 表(通过 客户号)都相关联。通过这三个表,我们可以看到,Mary Smith (客户号 3391) 订购了 Straw Hat (“内容” 27) 和Garden Gloves (“内容” 46),而 Mary Smith (客户号 3391) 和 Mortimer Blaselflatz (客户号 8765) 都订购了Straw Hat (“内容” 27)。如果把客户表和盘存表的相关字段与 定货表的“定货”字段联结起来,建立一个“关联”表,那么这个关系就更清楚了。
表4 关联表:按客户号和内容排序
定货号 客户号 姓名 内容 描述
14764 33391 Smith Mary 27 Straw Hat
14932 33391 Smith Mary 46 Garden Gloves
15168 8765 Blaselfatz Mortimer 27 Straw Hat
规范化 数据库设计者的任务就是组织数据,而组织数据的方法,应能消除不必要的重复,并为所有必要信息提供快速查找路径。为了达到这种目标而把信息分离到各种独立的表中去的过程,叫作规范化。
规范化是用许多指定的规则和不同级别的范式来进行规范的复杂过程。该过程的研讨已超出了本文的范围。但是,大多数简单数据库的规范化可以用下面简单的经验规则来完成:包含重复信息的表必须分成独立的几个表来消除重复。
例如,使学生和课程对应的学生数据库,包含了下表所示的信息。
表5
学生 课程 描述 教授
1 4 Introduction to Physiology Dawson
2 3 Applied Basketweaing Carruth
3 1 Physics for Short-定货 cooks Adms
4 2 Introduction to Physiology Dawsons
如果有选学了十二门课程的 1000 个学生,每门课程的说明和教师将显示100多次— 对选了那门课程的每个学生都要重复一次。要避免这种低效率,应当把表分成两个独立的表来规范化,一个用来表示学生,另一个用来表示课程,如表6,表7所示。
学生 课程
1 4
2 3
3 1
4 4
课程 描述 教授
1 Physics for Short-定货 cooks Adms
2 Counterculture Sociology Beckely
3 Applied Basketweaing Carruth
4 Introduction to Physiology Dawsons
表6
表7
现在表被规范化了,所以,要改变特定课程的课程描述或“数据”,只要改变一个记录就可以了。
以上是关于数据库的基本知识,这是学习数据库编程所必须的。虽然数据库技术作为一门学科,其深度和广度不是这点篇幅能描述的,但作为入门和简单数据库编程应该是足够了。
好了,下面我们就可以开始练练了。我们经常遇到数据库系统是登记系统,不管你是在单位,或是参加什么组织,登记是免不了的,而且它的结构比较简单,我们就以一个登记系统为例吧。分析一下该系统所涉及到的数据。
二、磨刀不误砍柴功
对于登记,要跟踪的信息包括:
● 姓名 ● 性别
● 籍贯 ● 年龄
● 出生年月 ● 单位
● 地址 ● 邮政编码
● 电话 ● 传真
当然,可以简单地创建一个表,使得上述的每个数据项对应一个字段。
现在需要给表指派主键,用以唯一标识每一条记录,在登记表中分别添加登记号作为唯一键,这样就保证数据库中的任两条记录都不同了。
对数据库作出以上分析后,我们就可以开始建立数据库了。
三、建营扎寨
在这里我们学习怎样建立数据库,首先需要确定要建立数据库的类型。在Visual Basic中通过数据访问控件或数据访问对象(DAO)可以访问下列数据库:
1. JET数据库,即Microsoft Access
2. ISAM数据库,如:dBase,FoxPro等
3. ODBC数据库,凡是遵循ODBC标准的客户/服务器数据库。如:Microsoft SQL Server、Oracle
一般来说,如果要开发个人的小型数据库系统,用Access数据库比较合适,要开发大、中型的数据库系统用ODBC数据库更为适宜。而dBase和FoxPro数据库由于已经过时,除非特别的情况,否则不要使用。在我们的例子中,当然选用Access数据库了。建立Access数据库有两种方法:一是在Microsoft Access中建立数据库。点击“新建”按钮就可以建立新的表了(如图1)。这里我们主要介绍第二种方法:使用可视化数据管理器,不需要编程就可创建数据库。可视化数据管理器是一个非常有用的应用程序,它是VB企业版和专业版附带的,在目录..DevStudiovbsamplesVisdata下,其界面如下图。
点击菜单“文件”项下“新建”子项“Microsoft ACCESS”子项的“版本7.0 MDB”项。在d出窗口中输入新建数据库的名称“登记”,出现下面图3所示窗口:
要生成新的表,右键单击数据库窗口d出菜单,然后选择“新表”命令,在随后出现的“表结构”对话框中建立所要的字段。每次向表中加入新的字段,单击“增加字段”按钮,会出现图4 的“增加字段”对话框。
“增加字段”对话框中的选项如表10所示,根据字段的类型,有些选项是无效的,无法读取。
在我们建立的登记数据库中,各个字段的类型如表11。
要注意的是,由于字段登记号用来唯一标志记录的,因此,它不能由用户输入。所以在定义该字段时需要定义为Long数据类型,“自动生成字段”项有效,并选中这一项。这样当用户每输入一条新记录时,系统就会在该字段上自动输入一个与其它记录不同的值。
在ACCESS数据库中,关键字是用索引实现的,作为编程人员在对表类型的记录集编程时,只需调用索引名。在查询时,Rushmore技术自动用索引信息优化查询。完成表定义后,点击“增加索引”按钮,d出如图5所示窗口。
在窗口中右边有三个选项,其意义如表 12。
添加索引对话框选项
完成之后如图6。
当然,学会数据库的建立也并非一朝一夕的事,读者不妨多练习一下。下面你就可以运行VB开始我们的编程了。
四、千里相会
Visual Basic 数据库应用程序有三个部分,如图7所示。
用户程序是程序员开发的,也是我们即将用VB来编写的部分。数据库引擎是数据库驱动程序,使用它程序员可以用统一的格式访问各种数据库,不管这个数据库是本地的 Visual Basic 数据库,还是所支持的其它任何格式的数据库格式,所使用的数据访问对象和编程技术都是相同的。数据库则是我们上面完成的部分。从这个结构可以看出用户与正在访问的特定数据库无关。那我们在用VB编写数据库程序时,就需要使程序能够访问指定的数据库。
如果是简单的数据库应用,可以使用 Data 控件来执行大部分数据访问 *** 作,而根本不用编写代码。与 Data 控件相捆绑的控件自动显示来自当前记录的一个或多个字段的数据。
DATA数据控件
属性
CONNECT属性 指定打开的数据库类型,并且包括参数,如用户和口令等。
例如:
打开Access数据库(缺省)
CONNECT=“ACCESS”
打开ODBC数据库
CONNECT=“ODBC;DATABASE=??;UID=??;PWD=??;DSN=??”
DATABASENAME属性 确定数据控件访问哪一个数据库。
对于多表数据库它为具体的数据库文件名,例如:ACCESS数据库
DATABASENAME=“D:...DEMO.MDB"
对于单表数据库它为具体的数据库文件所在的目录,而具体文件名放在RECORDSOURCE属性中,例如:访问FOXPRO数据库文件D:FOXDEMO.DBF
DATABASENAME=“D:FOX”
RECORDSOURCE=“DEMO”不带文件扩展名
RECORDSOURCE属性
确定数据控件的记录集,即:所要访问的数据内容。它可以是一个表名、存储查询名或SQL语句。例如:访问Register表所有数据 :
RECORDSOURCE=“Register”访问RC表中1973年以前出生的数据:
RECORDSOURCE=“SELECT *FROM Register WHERE [BIRTHDAY]<#1/1/1973#"
注意:当我们在运行时修改了该属性后,需要调用REFRESH方法刷新记录集。
方法
REFRESH方法 当我们在运行时修改了Record-
Source属性后,需要调用该方法刷新记录集。
UPDATERECORD方法 将绑定在数据控件上的控件的数据写入数据库中。即:当我们修改了数据后调用该方法确定修改。
CANCELUPDATE方法 将数据库中的数据重新读到绑定在数据控件上的控件中。即:当我们修改了数据后调用该方法放弃修改。
事件
VALIDATE事件 当我们移动记录集记录指针时发生。例如:我们将记录集记录指针从A移动到记录B时当产生VALIDATE事件时,记录指针仍在记录A上。
Sub XXXX_Validate(Action As integer,Save As integer)
其中:
Action 指出如何产生了该事件,如:移动,增加,查询等。
Save 表示是否保存已修改的数据。当我们修改了绑定在数据控件的数据,又没有UPDATERECORD,则移动指针时,Save=True。如果在事件中令Save=False,则放弃修改。
例如:
Sub XXXX_Validate(Action As integer,Save As integer)
If Save then
I= MsgBox("Dada changed,Save?",vbYesNo)
If I = vbNo then
Save = False
End if
End if
End Sub
Reposition事件 当我们移动记录集指针时发生。例如:我们将记录集记录指针从A移动到记录B 时,当产生Reposition事件时,记录指针已移动到B上。
通常我们在该事件中显示当前的指针位置。例如:
Sub XXXX_Reposition()
XXXX.Caption=??
XXXX.RecordSet.AbsolutePosition + 1
End Sub
了解了DATA控件之后我们就可以连接数据库了。现在我们可以编写一个应用程序。因为虽然我们建立了Register数据库,但是数据库中却没有数据,我们程序的目的就是向数据库中输入数据。它的运行情况如图8。
各个文本框正好对应着表Register的各个字段,在文本框中输入数据,点击“增加”按钮,就完成了一条记录的输入。我们看一下,DATA控件是怎样和数据库连接起来的,各个文本框又是怎样和DATA控件捆绑起来的。
在DATA控件的CONNECT属性中,选中“ACCESS”项,在DatabaseName属性中,输入“C:TEMP登记.mdb”,在RecordSource属性中,选中“Register”,这样就完成了数据库与DATA控件的连接,也就是完成了与应用程序的连接。
数据库中各个字段又是怎样和文本框连接起来的呢?在VB中,我们可以将普通控件绑定在数据控件上,来完成自动地显示、更新记录集的数据。常用的可绑定的控件有:Label,Text,checkBox,Image等。通过设置这些控件的DataSource和DataField属性来完成绑定。
DataSource 属性 表示绑定到哪一个数据控件上,程序中我们可能使用多个数据控件。
DataField 属性 表示绑定到记录集的哪一个记录上。
现在我们需要把Text1与表“登记”中的姓名字段连接起来。完成DATA控件的连接之后,在Text1控件的DataSource属性中,选中“Data1”,在DataField属性中,选中“姓名”值。用同样的方法,将各个文本框分别绑定到对应的字段上,就完成了文本框的捆绑。
下面我们编写两个按钮命令,完成其相应的 *** 作了。喂!别着急,还有一个重要的对象没讲呢!
当应用程序启动时,Data 控件被自动地初始化。如果 Connect、DatabaseName、Options、RecordSource、Exclusive、ReadOnly 和 RecordsetType 属性是合法的, Microsoft Jet 数据库引擎就会试图创建一个新的基于这些属性的 Recordset 记录集对象。Recordset 对象可以表示表中的记录或者作为查询结果的记录,使用 Recordset 对象可以在记录一级上对数据库中的数据进行处理。这在数据库编程中是一个十分重要的,也是比较复杂的对象。
Recordset 对象有三种类型:表、动态集、快照,它们之间存在明显的区别。
表类型的 Recordset 对象是指当前数据库中的表在创建表类型的记录集时,数据库引擎打开的表。后续的数据 *** 作都是直接对表进行的。只能对单个的表打开表类型的记录集,而不能对联接或者联合查询打开表类型的记录集。与其它类型的 Recordset 对象相比,表类型的搜索与排序速度最快。
动态集类型的 Recordset 对象可以是本地的表,也可以是返回的行查询结果。它实际上是对一个或者几个表中的记录的一系列引用。可用动态集从多个表中提取和更新数据,其中包括链接的其它数据库中的表。动态集类型具有一种与众不同的特点:不同数据库的可更新联接。利用这种特性,可以对不同类型的数据库中的表进行可更新的联接查询。动态集和它的基本表可以互相更新。如果动态集中的记录发生改变,同样的变化也将在基本表中反映出来。在打开动态集的时候,如果其他的用户修改了基本表,那么动态集中也将反映出被修改过的记录。动态集类型是最灵活的Recordset 类型,也是功能最强的。不过,它的搜索速度与其它 *** 作的速度不及表类型的 Recordset。
快照类型的 Recordset 对象包含的数据是固定的,它反映了在产生快照的一瞬间数据库的状态。从 Microsoft Jet 数据源得到的快照是不可更新的,从开放数据库互连 (ODBC) 数据源得到的某些快照是可以更新的,这取决于数据库系统本身的能力。与动态集类型和表类型的 Recordset 对象相比,快照的处理开销较少。因此,它执行查询和返回数据的速度更快,特别是在使用 ODBC 数据源时。快照类型保存了表中所有记录的完整复本,因此,如 果记录的个数很多,快照的性能将比动态集慢得多。为了确定快照与动态集哪一个更快,可以先以动态集方式打开记录集,然后再以快照方式打开它。
具体使用什么记录集,取决于需要完成的任务:是要更改数据呢,还是简单地查看数据。例如,如果必须对数据进行排序或者使用索引,可以使用表。因为表类型的 Recordset 对象是做了索引的,它定位数据的速度是最快的。如果希望能够对查询选定的一系列记录进行更新,可以使用动态集。如果在特殊的情况下不能使用表类型的记录集,或者只须对记录进行扫描,那么使用快照类型可能会快一些。
一般来说,尽可能地使用表类型的 Recordset 对象,它的性能通常总是最好的。
为选择特定的 Recordset 类型,把 Data 控件的RecordsetType属性设成:
RecordSet记录集属性
BOF属性 当记录集记录指针指向第一条记录时返回True
EOF属性 当记录集记录指针指向最后一条记录时返回True
AbsloutePosition属性 返回当前记录集记录指针,第一条记录为0,是只读属性
Bookmark属性 String类型,返回或设置当前记录集记录指针的书签,是可读写属性。每一条记录都有自己唯一的书签,它与记录在记录集中的顺序无关。将Bookmark属性存放到变量中,后面可以通过将该变量赋值给Bookmark属性,并返回到这个记录。
注意:程序中使用BookMark属性重定位记录指针,而不能使用Abslouteposition
NoMatch属性 当我们使用Find方法查询时如果未找到则返回True。常与BookMark属性同时使用。
例如:查找[NAME]字段中第一个姓李的人
Dim S As String
With XXXX.RecordSet
S = .BookMark
.FindFirst "[NAME] Like ’李*’"
if .NoMatch then
MsgBox "数据未找到“
.BookMark = S
End if
End With
记录集方法
AddNew方法 向记录集增加一条新记录
Delete方法 从记录集中将当前记录删除。在删除后常使用MoveNext方法移动指针。
例如:
With XXXX.RecordSet
.Delete
.MoveNext
if .EOF then .MoveLast
End With
MoveXXXX方法
MoveFirst 将记录集指针移动到第一条记录上
MoveLast 将记录集指针移动到最后一条记录上
MovePrevious 将记录集指针移动到前一条记录上
MoveNext 将记录集指针移动到下一条记录上
FindXXXX方法
FindFirst在记录集中查询符合条件的第一条记录
FindLast 在记录集中查询符合条件的最后一条记录
FindPrevious 在记录集中查询符合条件的前一条记录
FindNext 在记录集中查询符合条件的下一条记录
好了,有了这么充分的知识了,编写两个按钮命令简直是小菜一碟,先来试一下,添一个“增加”命令按钮吧。
Private Sub Command1_Click()
Data1.Recordset.AddNew
End Sub
哇!怎么这么简单,再看一下“删除”命令按钮
Private Sub Command2_Click()
Data1.Recordset.Delete
Data1.Recordset.AddNew
End Sub
就这样行了吗?运行程序吧,OK!一切正常,迫不及待地输入一条记录,点击“增加”按钮,怎么?出问题了!因为你只有在进行了AddNew方法后才可以输入数据,好吧,在窗口的初始化时就增加一条新记录吧。
Private Sub Form_Initialize()
Data1.Recordset.AddNew
End Sub
输入完了数据,我们打算退出程序,很自然的我们执行关闭窗口 *** 作,就顺利地结束了输入工作。真的很顺利吗?打开数据库,看看数据库中的数据,我们发现刚才输入的最后一条记录没有存入数据库中。这个很好解释,每当我们调用AddNew方法时,它就将输入的记录存入数据库中,而当我们关闭窗口时,刚输入的记录并没有保存到数据库中,那么在关闭窗口之前对DATA控件进行一次刷新就可以将数据存入数据库中了。
Private Sub Form_QueryUnload(Cancel As Inte ger, UnloadMode As Integer)
Data1.Refresh
End Sub
到了这里,我们似乎可以稍稍轻松了一点,这个窗口的功能差不多完成了。但是我不得不给你提出一个忠告:在数据库系统中,应尽量将错误在应用级上处理。这句话看起来似乎有点抽象,实际上用在这个程序中就简单多了。在表Register中,我们将出生日期定义为Date/Time类型,如果在程序运行时,在该字段对应的文本框中输入的不是Date/Time格式,在向数据库提交数据时会出现什么情况呢?数据库会向用户报告错误信息。然而这样对应用程序并不好,这样的错误应该由用户程序处理,而不是交给数据库去处理,所以在数据提交之前就应该检查该字段的输入是否合法。
Private Sub Text3_LostFocus()
If IsDate(Text3.Text) Or Text3.Text = "" Then ’检查是否输入合法数据
Exit Sub
End If
MsgBox ("输入错误,请输入你出生的年月日!")
,将选取不合法的数据,以便重新输入,并使控制焦点不动
Text3.SetFocus
Text3.SelStart = 0
Text3.SelLength = Len(Text3.Text)
End Sub
Visual Basic(VB)是由微软公司开发的包含协助开发环境的事件驱动编程语言。它源自于BASIC编程语言。VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建ActiveX控件。程序员可以轻松的使用VB提供的组件快速创建一个应用程序。.NET Framework引入之前
VB 1
VB1.0的DOS版本
1991年4月,Visual Basic 1.0 for Windows版本发布。1992年9月,Visual Basic 1.0 for DOS版本发布。这个连接编程语言和用户界面的进步被称为Tripod(有些时候叫做Ruby),最初的设计是由阿兰·库珀(Alan Cooper)完成的。这在当时引起了很大的轰动。许多专家把VB的出现当做是软件开发史上的一个具有划时代意义的事件。以现在的眼光来看,VB1.0版的功能其实非常的弱,但它在推出当时可是第一个“可视”的编程软件。这使得程序员欣喜之极,都尝试在VB的平台上进行软件创作。
VB 2
1992年11月,VB2.0发布。它对于上一个版本的界面和速度都有所改善。
VB 3
1993年夏天,VB3.0发布,分为标准版和专业版。其中包含一个数据引擎,可以直接读取Access数据库。这使得VB的数据库编程能力大大提高。
VB 4
1995年8月,VB4.0发布了32位版本和16位的版本。其中包含了对类的支持。从VB4开始,逐步引入了面向对象的程序设计思想。VB功能强大,学习简单。而且,VB还引入了“控件”的概念,使得大量已经编好的VB程序可以被我们直接拿来使用。
Visual Basic 1.0~4.0 都必须将源代码编译成 VB 伪代码后解释执行。
VB 5
1997年2月,VB5.0发布。程序员可以用32位的版本导入由4.0版本创建的16位程序,并且能顺利编译。同时还包含了对用户自建控件的支持。自从 Visual Basic 5.0 以后,VB 支持编译成本机代码,但必须在 VB 运行库的支持下工作。
VB 6
1998年夏天,VB6.0发布。VB6是VB.NET至今仍无法完全取代的版本。
.NET Framework引入之后
主条目:Visual Basic .NET
VB.NET 7
2001年,Visual Basic .NET和.NET Framework发布。由于其使用了新的核心和特性,所以很多VB的程序员都要改写程序。
2002年 Visual Basic .NET 2002 (v7.0)问世,此后Visual Basic 包含在 Visual Studio 套装中。
2003年 Visual Basic .NET 2003 (v7.1)推出。
VB.NET 8
2004年,微软开放了Visual Studio.NET 2005的测试版本(代号Whidbey)。包含了.NET Framework2.0的测试版本。2005年11月7日 Visual Basic 2005 (v8.0) 发布,同时为初学者与学生提供 Visual Basic 2005 的免费简化版本 Express Edition。原定免费使用期限一年,之后微软宣布 Express 版本永久免费。Visual Basic 2005的“显著”优点是,可以直接编写出 Windows XP 风格的控件;但是其编写的小程序就需要近 10MB 的内存。
VB.NET 9
2008年2月1日 Visual Basic 2008 (v9.0) 发布。
通过几年的发展,它已成为一种专业化的开发语言和环境。用户可用 Visual Basic 快速创建 Windows 程序,现在还可以编写企业水平的客户/服务器程序及强大的数据库应用程序。
VB.NET 10
Visual Basic 10.0按计划于2010年3月22日随Visual Studio 2010一起正式发布。
新加入的功能:
自动实现属性
集合初始化
不需要在代码断行书写时输入下划线“_”
更好的lambda表达式支持
更好地与Python及Ruby等动态语言的互通 *** 作
Visual Basic .NET 2002(7.0) 及以后的版本运行在 .NET Framework 环境下。
由VB派生的语言
微软开发了一系列有关VB的脚本语言:
Visual Basic for Applications,即VBA,包含在微软的应用程序中(比如Microsoft Office),以及类似WordPerfect Office这样第三方的产品里面。VBA这样嵌入在各种应用程序中看起来有些矛盾,但是它的功能和VB一样强大。
VBScript是ASP的默认语言,还可以用在Windows脚本编写(Shell Script)和网页编码(HTML)中。尽管它的语法类似于VB,但是它却是一种完全不同的语言。VBS不使用VB运行库运行,而是由Windows脚本宿主(wscript.exe - Microsoft Windows Based Script Host)解释执行。这两种语言之中的不同点影响ASP网站的表现。
当微软准备开发一种新的编程工具的时候,第一决定就是利用最抢手的 VB6 来进行修改,或者就是重新组建工程开发新工具。微软后来开发了VB的继任者Visual Basic .NET,同时也是.NET平台的一部分。VB.NET编程语言是一种真正的面向对象编程语言(VB4-VB6 只能称为基于对象而不是面向对象,最明显的特征就是 VB4-VB6 都不支持类的继承),和传统 Visual Basic 并不完全兼容。
语言特性
VB的中心思想就是要便于程序员使用,无论是新手或者专家。VB使用了可以简单创建应用程序的GUI系统,但是又可以开发相当复杂的程序。VB的程序是一种基于窗体的可视化组件安排的联合,并且增加代码来指定组建的属性和方法。因为默认的属性和方法已经有一部分定义在了组件内,所以程序员不用写多少代码就可以完成一个简单的程序。过去的版本里面VB程序的性能问题一直被放在了桌面上,但是随着计算机速度的飞速增加,关于性能的争论已经越来越少。
窗体控件的增加和改变可以用拖放技术实现。一个排列满控件的工具箱用来显示可用控件(比如文本框或者按钮)。每个控件都有自己的属性和事件。默认的属性值会在控件创建的时候提供,但是程序员也可以进行更改。很多的属性值可以在运行时候随着用户的动作和修改进行改动,这样就形成了一个动态的程序。举个例子来说:窗体的大小改变事件中加入了可以改变控件位置的代码,在运行时候每当用户更改窗口大小,控件也会随之改变位置。在文本框中的文字改变事件中加入相应的代码,程序就能够在文字输入的时候自动翻译或者阻止某些字符的输入。
VB的程序可以包含一个或多个窗体,或者是一个主窗体和多个子窗体,类似于 *** 作系统的样子。有很少功能的对话框窗口(比如没有最大化和最小化按钮的窗体)可以用来提供d出功能。
VB的组件既可以拥有用户界面,也可以没有。这样一来服务器端程序就可以处理增加的模块。
VB使用引用计数的方法来进行垃圾收集,这个方法中包含有大量的对象,提供基本的面向对象支持。因为越来越多组建的出现,程序员可以选用自己需要的扩展库。和有些语言不一样,VB对大小写不敏感,但是能自动转换关键词到标准的大小写状态,以及强制使得符号表入口的实体的变量名称遵循书写规则。默认情况下字符串的比较是对大小写敏感的,但是可以关闭这个功能。
VB使得大量的外界控件有了自己的生存空间。大量的第三方控件针对VB提供。VB也提供了创建、使用和重用这些控件的方法,但是由于语言问题,从一个应用程序创建另外一个并不简单。
术语
在讨论 Visual Basic(不包含 .NET)时,经常可以听到以下这些术语,因此掌握这些术语的基本理解对初学者十分有帮助。
控件:简单的说,控件就是构成或者说建造 Visual Basic 应用程序的图形化工具,包括窗体、按钮、复选框、列表框、数据控件、表格控件和图片控件等等……
事件:由用户或 *** 作系统引发的动作,例如击键、单击鼠标(Click)、双击鼠标(DblClick)、一段时间的限制,或从端口接收数据。
方法:嵌入在对象定义中的程序代码,它定义对象怎样处理信息并响应某事件。例如,数据库对象有打开纪录集并从一个记录移动到另一个记录的方法程序的基本元素,它含有定义其特征的属性,定义其任务和识别它可以响应的事件的方法。控件和窗体是Visual Basic中所有对象的示例。
对象:一个控件、窗体等都可被看作一个对象。
过程:为完成某些特定的任务而编写的代码段,过程通常用于响应特定的事件,也可以当作应用程序的用户自定义函数来使用。
属性:属性是组成用户界面的各对象的性质的具体描述。例如上述“对象”中所提到的尺寸、位置、颜色、宽度、高度等等都称为控件的属性。属性决定对象的外观,有时也决定对象的行为。对象的属性绝大部分是VB中已经事先定义好的,但也有的属性是需要在应用过程中才去定义的。属性即可为对象提供数据,也能从对象取回信息。
VB.NET的变革
VB(6.0 及以前)不拥有的特性
继承 (计算机科学):Visual Basic 5 以后,VB 虽然提供了简化的类支持,但仍然不能满足程序员的需求。
多线程支持:虽然可以使用Windows API完成,不过稳定性与调试都很难保证。
异常处理:只支持"On Error Goto line"语句。
对指针的支持非常有限。
VB只能支持8到32位的整数,很多语言都有无限制的支持。
VB不允许在任何数组存储器在不变的变量。
VB不支持其它程序语言共享程序代码。
Visual Basic .NET(VB 7.0)以后的版本基本支持了上述特性。
VB 6 与 VB.NET 比较
很多程序编写者也会留恋VB6。VB6仍保留了一些script语言的特性,例如:不用事先声明变量类型。 当第一次对未声明类型的变量进行赋值时,VB6便会把这个值的类型作为该变量的类型。这种script语言的特性,对程序的可维护有很多不良的影响,尤其对初阶程序员来说,更会被培养成不良的编写程序习惯,所以VB.NET之后的版本已不保留这种特性。
Basic是作为初学者的编程语言而被制作,当时是以直译式(参见VB 伪代码)的形式出现。同样拥有不用事先声明变量类型的特性。这种特性对于帮助初学者快速入门,其实是有正面的作用,可以使初学者更快完成简单的代码编写,而不用顾虑到程序要用哪些变量,要选哪些类型。对于有一定程序编写经验的人来看,要经常为for i=1 to 9中的变量i声明类型也颇烦人,所以这种特性在某些场合上,是相当讨人欢心的。
VB.NET 的具体变革如下:
子程序(函数)的定义与调用。
数组的初值设定并且需要注明范围。
函数在格式上的改变:Date函数、Time函数、部分数学函数部分不能直接使用,String函数不能使用,DatePart、DateAdd、DateDiff函数的第一个参数在定义上有所改变。
Set保留字不再使用。
Wend保留字以End While取代。
新增运算符:+=、-=、/=、*=。
缺点
这样大的变革一度被认为是微软为了延长VB的生命力而做出的,结果把VB改得几乎面目全非,成了一个类似于C#的新语言。VB6的程序几乎无法运行在VB.NET中,尽管微软针对该问题提供了“升级向导”,也无法执行彻底的转换。这样,程序员不得不付出相当大的精力,手工转换代码。
2005年,微软宣布将不会再对非.NET版本的VB进行支持。VB社区立即作出反应表示关心这个消息,一些老用户还递交了希望能够继续对VB进行技术支持的请愿书。微软目前还不愿意改变他们的决定。
关于VB的争议
反对者
VB是一种充满了争议的语言:很多程序员对VB程序的品质有强烈的反感。很多人认为VB不配他们使用,认为它是一种给儿童和菜鸟程序员的语言。它自从设计开始就是一种简单的语言。一些C++和Java中的特性在VB中并没有出现。在感受开发的方便和快速的同时,一些类似于编译时进行类型和声明检查的功能在默认情况下是关闭的。这样一些程序员一边感叹VB的易用性,一边沮丧地看着一些类似于“未定义类型”错误的发生。
一些批评家认为VB的简单特性使得其在未来具有伤害性。很多人自学了VB,但是并没有学到好的编程习惯。当VB进入课堂的时候,学生们不会学到很多基础的程序技术和结构,因为很多技术已经包含在那些对用户可见的组件里面了。不用学习标准的编程习惯,因为VB具有可视化的特性,所以导致了一些莫名其妙的代码的产生。而且很多错误和警告的检查默认情况下都是关闭的,程序员很难找到隐藏的错误。有经验的程序员在用VB编程的时候都会把这些选项打开。
很多批评家批评微软简单地拷贝了BASIC的思想到VB中。著名的计算机科学家艾兹格·迪科斯彻说过一句名言:“如果一个学生最早学过BASIC,那么几乎不可能让他学会优秀的编程:因为这些人已经放弃了重生的希望。”(Dijkstra对待Fortran、PL/1、COBOL和APL同样也毫不留情。)另外一个笑话是:“真正的程序员不用BASIC。12岁以下的孩子才用。”
并不是非常简便,它开发的程序只能运行在Microsoft Windows中。
文件太大了。Visual Studio要用好几张盘才能装下。VB程序在运行时候还需要一个1.4M大小的运行库。
IDE中有错误。
VB不能很好的综合Windows的基础API,很多时候要使用低级运算的“小伎俩”来进行编程。而C语言的低级内存运算比VB的要简单得多。
支持者
但是很多VB的支持者解释说VB的易用性就是它最大的优势,可以让经验丰富的VB程序员或是刚刚懂得皮毛的人都能用自己的方式快速开发程序。而且VB的程序可以非常简单的和数据库连接。比如利用控件可以绑定数据库,这样一来用VB写出的程序就可以掌握数据库的所有信息而不用写一行代码。
很多语言的特性比如GoSub、On Error和用变量名字的最后一个字符判断声明类型(比如字符串型str$)都是从BASIC中来的。VB的语法和绝大部分语言都不同,可能会让新的程序员混淆。比如声明“Dim a, b, c As Integer”声明了 c 为整形变量,但是 a,b 依然是 Variant(.NET 中为 Object)类型的。(如果想声明 3 个 Integer,必须写 Dim a As Integer, b As Integer, c as Integer;而直接写Dim a,后面不写类型,则自动变成Variant类型——占用大量资源。这个问题在 VB.NET 以后的版本已经解决,Dim a, b, c As Integer的类型都将为整型)
还有一些特性,比如下划线字符“_”支持一行代码分多行写。一些程序员在使用的时候由于不符规范而引起错误。
总结
VB会吸引更多的赞誉和批评,也会继续为广大的用户和程序员使用。它非常适合用来开发拥有友好界面的程序(比如针对终端的数据),但是不适合开发其它程序(比如联合计算程序)。
VB对初学编程者是一个很好的入门软件,尤其对一些有编程才能而自己也不知道的人,由VB着手可轻易引发他们的潜能,发挥他们在这方面的才华。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)