const allinfo = "select name as 姓名,sex as 性别,hometown as 籍贯,age as 年龄,birthday as 生日,company as 单位,address as 地址,zip as 邮编,telephone as 电话,fax as 传真 from 登记" ’定义不带条件的sql查询语句
private sub command1_click()
dim t1, m, n as string
’构造sql语句的where条件段
if isnumeric(text1.text) then
m = " age >" + text1.text
end if
if isnumeric(text2.text) then
n = " age < " + text2.text
end if
if m = "" and n = "" then
t1 = ""
else
if m = "" then
t1 = n
else
if n = "" then
t1 = m
else
t1 = m + " and " + n
end if
end if
end if
if t1 <> "" then
t1 = " where " + t1
end if
data1.recordsource = allinfo + t1
’将recordsource属性的值设置为新的sql语句
data1.refresh
‘刷新数据库,获得符合当前条件的查询结果
end sub
在这个程序中,你还可以加上姓名查询、籍贯查询等,其设计过程都是通过构造sql语句来实现的。另外,还需要注意的一点是既然是查询窗口,当然允许修改,将dbgrid控件的allowupdate属性值设为false。ok!运行程序吧,啊!万事大吉。看一看应用程序,再看一看你编写的代码,不可思议,这么短的代码居然完成了这么强大的功能。事实就是这样,数据库编程中最重要的是对概念的清楚,与之相比,技巧好象摆在了次要位置。让我们闭上眼睛,想一想我们需要了解那些东西吧:data控件,recordset对象、控件的捆绑、简单的sql查询语句。熟悉了这些东西,你就可以进行数据库编程了,如果你对开发数据库系统比较感兴趣,可以再加强一下在数据库设计和sql语句方面的知识。但数据库编程真的总是这样简单吗?如果已经熟悉了上面的内容,建议你看一下下面这一节。
六、拨云见雾
还记得我们在前面说过visual basic 提供了两种与 jet 数据库引擎接口的方法吗?data 控件和数据访问对象。我们已经见识了data控件,确实给人意想不到的方便,但data 控件只给出有限的访问现存数据库的功能。而 dao 模型则可以全面控制数据库的完整编程接口。这两种方法事实上并不是互斥的,实际上,它们常同时使用。
dao 模型是设计关系数据库系统结构的对象类集合。它们提供了完成管理这样一个系统所需的全部操作属性和方法,包括创建数据库,定义表、字段和索引,建立表间的关系,定位和查询数据库等工具。dao结构的主要对象如图10所示。
visual basic 中的数据库编程就是创建dao(数据访问对象)。这些对象对应于被访问物理数据库的不同部分,如 database、tabledef、field 和 index 对象,用这些对象的属性和方法来实现对数据库的操作,能够在 visual basic 窗体中使用绑定和非绑定控件来显示操作结果并接收用户输入。这样就简化了代码,它赋予程序员很大的灵活性。因为可以使用同样的对象、属性和方法来处理各种不同的数据库格式。同时,如果从一种数据库格式变到另一种格式(例如,将本地的 microsoft access 数据库转换为网络上的 sql server 数据库),只需变动少量的代码就可以适应这种改变。甚至可以创建这样的应用程序,在单一的查询或报表中连接来自多个不同数据库的表。
我们先介绍dao对象,从上图中我们可以看到,dao对象中最关键的是dbengine对象,所有的数据库操作都要通过它来完成。
dbengine对象
dbengine对象相当于jet数据库引擎,不需要创建该对象。
createworkspace方法:创建一个工作区对象
例如 :
dim ws as workspace
set ws = dbengine.createworkspace (spname,userid,password",sptype)
其中
spname 工作区名称string
userid 用户名 string
password 口令string
sptype 工作区类型 = dbusejet jet工作区
= dbuseodbcodbc工作区
workspace对象
workspace对象为用户定义一个会话,通过与之关联的用户名和口令建立一个安全级别。当不需要安全级别时可使用缺省的工作区dbengine.workspace。
方法:
opendatebase 打开一个数据库
close 关闭当前工作区
begintrans 启动一个事务
committrans 提交当前事务
rollback 回滚当前事务
例如我们需要打开一个数据库。
我们调用workspace的opendatabase方法打开一个数据库。
例如:
dim db as database
set db=opendatabase(dbname,exc,readonly,source)
其中:
dbname 数据库文件名(对于单表数据库为路径)
exc = true 表示打开数据库后,该数据库不能被其它应用程序访问。
false 表示共享地打开数据库
readonly=true 表示打开数据库后,只能对数据库进行读操作
=false 表示打开数据库后,可对数据库进行读写操作
source数据源名,用于指定打开地数据库类型。
创建记录集
我们使用database对象的openrecordset方法打开一个记录集。
例如:
dim rs as recordset
set rs=db.openrecordset(source,type)
其中:
source 指定记录集的内容,它可以是一个表名,查询名或sql语句
type 创建记录集的类型
=dbopentable表型记录集
=dbopendynaset动态型记录集
=dbopensnapshot快照型记录集
访问odbc数据库
visual basic 通过 dao 和 jet 引擎可以识别三类数据库:visual basic 数据库,外部数据库,odbc 数据库。在开发大中型数据库系统中一般都采用odbc 数据库,如 microsoft sql server等。dao(数据访问对象)的 odbcdirect 模式允许直接访问 odbc 数据。另外,远程数据对象 (rdo) 库和远程数据控件 (rdc)也 允许直接访问 odbc 数据。
要访问odbc数据库需要两步,首先需要在windows 95 或windows nt的控制面板中设置odbc数据源名(dsn)。然后在opendatabase方法的source参数中使用该数据源名。
例如:访问microsoft sql server
source="odbc;dsn=mydsn;uid=sa;pwd=xx;database=pubs"
在程序中使用dao
dao的强大功能确实让人兴奋,只是较之data控件要复杂得多。在复杂的数据库处理中,这两种方法常常同时使用。要使用dao,必须选中vb的“工程”菜单下的“部件……”项,在控件标签中选中"microsoft dao 3.5 object library"之后就可以在程序中定义dao变量了。在这篇文章中我们所举的数据库例子比较简单,有兴趣的朋友不妨采用数据访问对象(dao)来实现这个程序。
七、高屋建瓴