几个常用的VB数据库概念:
表(Table):即关系数据库中物理存在的二维表。
记录集(RecordSet):表中的记录和执行一个查询而产生的记录组成了一个记录的集合。
SQL语言:一种数据库管理中的通用结构化查询语言。
如何建立一个完整的数据库文件:以VB6中文企业版为例
一、创建表
1.外接程序→可视化数据管理器→出现VisData窗口。
工具栏上的前三个按钮,:一是“表类型记录集”,二是“动态集类型记录集”,
三是“快照类型记录集”。选择“动态集类型记录集”。以这种记录集类型来访问VB数据库
2.文件→新建→MicroSoft Access→版本7.0MDB
3.选择数据库保存路径→数据库取名为 Myfile 保存
4.点击“数据库窗口”的Properties右键→新建表→弹出表结构对话框,表名称取名为 Phone
表名: 显示表名称。
字段列表:显示字段列表。 名称: 键入要添加的字段名。
类型: 确定字段的操作和数据类型。 定长: 字段长度固定。
大小: 确定字段的最大尺寸,以字节为单位。 变长: 字段长度可变。
自动递增:自动更新下一列或行。
允许零长:允许零长度字符串为有效字符串。
顺序位置:确定字段的相对位置。 必要的: 指出字段是否要求非-Null值。
验证文本:如果用户输入的字段值无效,应用程序显示的消息文本。
验证规则:确定字段可以添加什么样的数据。
添加字段:显示“添加”对话框。删除字段:删除选定的字段. 缺省值:确定字段缺省值。
索引列表:列出可用的索引。 名称:键入索引名。
主要的: 表的主索引。 唯一索引:这个索引项是唯一的。 外部:这个索引是表的外部键。
忽略空值:含有Null 值的字段不包括在索引之中。
必要的:指出索引是否需要非-空defNull@veendf3.chm 值。
添加索引:显示“添加索引”对话框。 删除索引:删除选定的索引。
生成表: 附加新表到当前数据库。
5.添加字段→显示“添加字段”对话框。
名称=序号 → 类型=Long → 大小=4 → 位置1 →确定 → 反复这一过程
名称=姓名 → 类型=text → 大小=8 → 位置2 →确定 → 反复这一过程
名称=电话 → 类型=text → 大小=15→ 位置3 →确定 → 反复这一过程
名称=地址 → 类型=text → 大小=30→ 位置4 →确定 → 反复这一过程
6.关闭 回到“表结构”窗→生成表 保存表结构,名为Phone的表已经搞掂了收工88
注意:要修改表结构必需先关掉数据库窗口,再打开才行,不然会发生数据库使用中的错误.
7.双击"数据库窗口" Phone→添加 写入记录→更新→反复这一过程 增添几个记录
注意:添加记录用表和动态集类型记录集打开Phone,修改时可用"在窗体上使用控件"打开
8.再建一个表,名为Article,增加几条记录
名称=序号 → 类型=Long → 大小=4 → 位置1 →自动添加字段→确定 → 反复这一过程
名称=作品 → 类型=text → 大小=15→ 位置2 →自动添加字段→确定 → 反复这一过程
表(Table):即关系数据库中物理存在的二维表。
记录集(RecordSet):表中的记录和执行一个查询而产生的记录组成了一个记录的集合。
SQL语言:一种数据库管理中的通用结构化查询语言。
如何建立一个完整的数据库文件:以VB6中文企业版为例
一、创建表
1.外接程序→可视化数据管理器→出现VisData窗口。
工具栏上的前三个按钮,:一是“表类型记录集”,二是“动态集类型记录集”,
三是“快照类型记录集”。选择“动态集类型记录集”。以这种记录集类型来访问VB数据库
2.文件→新建→MicroSoft Access→版本7.0MDB
3.选择数据库保存路径→数据库取名为 Myfile 保存
4.点击“数据库窗口”的Properties右键→新建表→弹出表结构对话框,表名称取名为 Phone
表名: 显示表名称。
字段列表:显示字段列表。 名称: 键入要添加的字段名。
类型: 确定字段的操作和数据类型。 定长: 字段长度固定。
大小: 确定字段的最大尺寸,以字节为单位。 变长: 字段长度可变。
自动递增:自动更新下一列或行。
允许零长:允许零长度字符串为有效字符串。
顺序位置:确定字段的相对位置。 必要的: 指出字段是否要求非-Null值。
验证文本:如果用户输入的字段值无效,应用程序显示的消息文本。
验证规则:确定字段可以添加什么样的数据。
添加字段:显示“添加”对话框。删除字段:删除选定的字段. 缺省值:确定字段缺省值。
索引列表:列出可用的索引。 名称:键入索引名。
主要的: 表的主索引。 唯一索引:这个索引项是唯一的。 外部:这个索引是表的外部键。
忽略空值:含有Null 值的字段不包括在索引之中。
必要的:指出索引是否需要非-空defNull@veendf3.chm 值。
添加索引:显示“添加索引”对话框。 删除索引:删除选定的索引。
生成表: 附加新表到当前数据库。
5.添加字段→显示“添加字段”对话框。
名称=序号 → 类型=Long → 大小=4 → 位置1 →确定 → 反复这一过程
名称=姓名 → 类型=text → 大小=8 → 位置2 →确定 → 反复这一过程
名称=电话 → 类型=text → 大小=15→ 位置3 →确定 → 反复这一过程
名称=地址 → 类型=text → 大小=30→ 位置4 →确定 → 反复这一过程
6.关闭 回到“表结构”窗→生成表 保存表结构,名为Phone的表已经搞掂了收工88
注意:要修改表结构必需先关掉数据库窗口,再打开才行,不然会发生数据库使用中的错误.
7.双击"数据库窗口" Phone→添加 写入记录→更新→反复这一过程 增添几个记录
注意:添加记录用表和动态集类型记录集打开Phone,修改时可用"在窗体上使用控件"打开
8.再建一个表,名为Article,增加几条记录
名称=序号 → 类型=Long → 大小=4 → 位置1 →自动添加字段→确定 → 反复这一过程
名称=作品 → 类型=text → 大小=15→ 位置2 →自动添加字段→确定 → 反复这一过程
二、增加索引
右键单击Phone表名 → 设计 → 添加索引 打开“添加索引到……”对话框
选择 可用字段 列表的字段名 → 在 名称 中加入索引名 → 确定 保存该索引。
记录(Record): 数据表中的每一行数据
字段(Field): 数据表中的每一列,表头(第一行)的内容为字段名
数据表(Table): 相关数据组成的二维表格
数据库(Database):相关数据表的集合
关系(Relation): 相关表之间通过相关联的字段建立的联系。
索引(Index): 指按表文件中某个关键字段或表达式建立记录的逻辑顺序。
它是由一系列记录号组成的一个列表,目的是提供对数据的快速访问。
索引关键字(索引表达式):用来建立索引的一个字段或字段表达式。
右键单击Phone表名 → 设计 → 添加索引 打开“添加索引到……”对话框
选择 可用字段 列表的字段名 → 在 名称 中加入索引名 → 确定 保存该索引。
记录(Record): 数据表中的每一行数据
字段(Field): 数据表中的每一列,表头(第一行)的内容为字段名
数据表(Table): 相关数据组成的二维表格
数据库(Database):相关数据表的集合
关系(Relation): 相关表之间通过相关联的字段建立的联系。
索引(Index): 指按表文件中某个关键字段或表达式建立记录的逻辑顺序。
它是由一系列记录号组成的一个列表,目的是提供对数据的快速访问。
索引关键字(索引表达式):用来建立索引的一个字段或字段表达式。
三、SQL查询 :
打开 数据库窗口→弹出一个 SQL语句 对话框→输入SQL语句,
点击 执行→弹出对话框 这是SQL传递查询吗?→回车
选择 “否”,确认查询,即可从两个表中提取满足条件的记录信息。
SQL运算符:
逻辑运算符 And (与)、 Or(或)、 Not(非)
比较运算符 < <= > >= = <>
SQL函数:
AVG 求平均值 COUNT 计数 SUM 求和 MAX 求最大值 MIN 求最小值
SQL命令:
CREATE 用于建立新的数据表结构
DROP 用于删除数据库中的数据表及其索引
ALTER 用于修改数据表结构
SELECT 用于查找符合特定条件的某些记录
INSERT 用于向数据表中加入数据
UPDATE 用于更新特定记录或字段的数据
DELETE 用于删除记录
SQL子句:
FROM 用于指定数据所在的数据表
WHERE 用于指定数据需要满足的条件
GROUP BY 将选定的记录分组
HAVING 用于说明每个群组需要满足的条件
ORDER BY 用于确定排序依据
INTO 查询结果去向
SQL语句的应用:
建立数据表
CREATE TABLE 数据表名 (字段名1 数据类型(长度), 字段名2 数据类型(长度),…)
添加字段 ALTER TABLE 数据表名 ADD COLUMN 字段名 数据类型(长度)
删除字段 ALTER TABLE 数据表名 DROP COLUMN 字段名
数据查询
SELECT 字段名表 FROM 子句 WHERE 子句 GROUP BY 子句HAVING 子句 ORDER BY 子句 INTO 子句
举例:select 姓名 from phone where 地址="香港" order by 姓名
从学生表中查询地址为香港的学生,显示其姓名并使结果按学号升序排列。
添加记录 INSERT INTO 数据表名(字段名1,字段名2……) VALUES(数据1,数据2……)
举例:insert into phone (序号,姓名,电话,地址) values("4","二楞子","无","失踪")
删除记录 DELETE FROM 数据表名 WHERE 条件表达式
举例:delete from phone where 地址="失踪" '注意:这会删掉整条记录
更新记录 UPDATE 数据表名 SET 新数据值 WHERE 条件表达式
举例:update phone set 电话=电话+5 where 地址="失踪"
查找地址字段数据为失踪的记录,把该记录电话字段的数据全部+5
打开 数据库窗口→弹出一个 SQL语句 对话框→输入SQL语句,
点击 执行→弹出对话框 这是SQL传递查询吗?→回车
选择 “否”,确认查询,即可从两个表中提取满足条件的记录信息。
SQL运算符:
逻辑运算符 And (与)、 Or(或)、 Not(非)
比较运算符 < <= > >= = <>
SQL函数:
AVG 求平均值 COUNT 计数 SUM 求和 MAX 求最大值 MIN 求最小值
SQL命令:
CREATE 用于建立新的数据表结构
DROP 用于删除数据库中的数据表及其索引
ALTER 用于修改数据表结构
SELECT 用于查找符合特定条件的某些记录
INSERT 用于向数据表中加入数据
UPDATE 用于更新特定记录或字段的数据
DELETE 用于删除记录
SQL子句:
FROM 用于指定数据所在的数据表
WHERE 用于指定数据需要满足的条件
GROUP BY 将选定的记录分组
HAVING 用于说明每个群组需要满足的条件
ORDER BY 用于确定排序依据
INTO 查询结果去向
SQL语句的应用:
建立数据表
CREATE TABLE 数据表名 (字段名1 数据类型(长度), 字段名2 数据类型(长度),…)
添加字段 ALTER TABLE 数据表名 ADD COLUMN 字段名 数据类型(长度)
删除字段 ALTER TABLE 数据表名 DROP COLUMN 字段名
数据查询
SELECT 字段名表 FROM 子句 WHERE 子句 GROUP BY 子句HAVING 子句 ORDER BY 子句 INTO 子句
举例:select 姓名 from phone where 地址="香港" order by 姓名
从学生表中查询地址为香港的学生,显示其姓名并使结果按学号升序排列。
添加记录 INSERT INTO 数据表名(字段名1,字段名2……) VALUES(数据1,数据2……)
举例:insert into phone (序号,姓名,电话,地址) values("4","二楞子","无","失踪")
删除记录 DELETE FROM 数据表名 WHERE 条件表达式
举例:delete from phone where 地址="失踪" '注意:这会删掉整条记录
更新记录 UPDATE 数据表名 SET 新数据值 WHERE 条件表达式
举例:update phone set 电话=电话+5 where 地址="失踪"
查找地址字段数据为失踪的记录,把该记录电话字段的数据全部+5
在VB中,访问数据库一般有两种方式。
一、是非编码方式,主要通过Data等控件设置属性在文本框显示和操作数据库中的数据。
二、是通过编写代码,即利用数据访问对象(DAO)来实现可以实现更灵活更复杂的操作
在非编程方式下的常用控件:
Data 数据控件 CommandButton 命令按钮 TextBox 文本框 Label标签
常用控件属性
DatabaseName 属性: 返回或设置 Data 控件的数据源的路径及名称
RecordSource 属性: 返回或设置 Data 控件的基本表名、SQL语句
DataSource 属性: 返回或指出一个数据控件,通过它把控件绑定到一个数据库。
DataField 属性: 返回或设置控件绑定到数据库的字段名
例题1:是非编码方式的简单访问
⒈.新建 标准EXE 工程→放入以下控件
一个Data控件 :指向数据库磁盘路径、库名和数库表格名
在DatabaseName属性里选择数据库文件路径 C:\Myfile
在RecordSource属性里选择数据库的表格 Phone
四个Label控件:分别设置NAME名称和显示名为
名称=Lblshyin、LblName、LblPhone、LblAddress Caption=序号、姓名、电话、地址
三个Text控件 :分别指向DATA控件和Phone表中的字段名
1.名称=TxtName DataSource=Data1 DataField=姓名
2.名称=TxtPhone DataSource=Data1 DataField=电话
3.名称=TxtAddress DataSource=Data1 DataField=地址
⒉. 运行工程→点击Data控件的四个按钮
可以看到 首、前、后、末记录在文本框里的变化。
Find方法是用来查找记录集中的特定记录,格式为:Data1.Recordset.Find方法 表达式
表达式可用Like等运算符: 比较两个字符串["姓名='美女'"],["姓名 LIKE '英雄'"]
Private Sub Cmdfind_Click()
'比较姓名字段里的数据是否符合表达表设定的值,*为通配符
Data1.Recordset.FindFirst "姓名 LIKE '英*'"
If data1.Recordset.NoMatch then '如果返回值为假就
MsgBox "无法找到匹配的记录" '显示提示信息
Else
MsgBox "已经找到匹配的记录"
EndIf
End Sub
Private Sub CmdDelete_Click()
On Error GoTo line '当删除时为空记录会出错,跳过
Data1.Recordset.Delete '删除一个记录
Data1.Recordset.MoveNext '指针下移一条记录
If Data1.Recordset.EOF Then Data1.Recordset.MovePrevious '上移
If Data1.Recordset.NoMatch Then Data1.Recordset.EOFAction = 2 '乱加进来的呵
line:
End Sub
Private Sub CmdEit_Click()
Data1.Recordset.Edit '先调用Edit方法
Data1.Recordset.Update '再修改数据
End Sub
Private Sub CmdFields_Click()
On Error GoTo line
Data1.Recordset.AddNew '先调用AddNew方法
If Text1.Text <> "" And TxtName.Text <> "" And TxtPhone.Text <> "" And TxtAddress <> "" Then
Data1.Recordset.Update '如果text都不是空的就保存数据
Data1.Recordset.MoveFirst '显示新记录
line: If Data1.Recordset.EOF Then Data1.Recordset.EOFAction = 0
End If '超出记录尾,就新建一条记录
End Sub '这个程序不成熟,也懒得搞了,88
-----------------------------ADO数据控件------------------------
ADO 数据访问接口是一种ActiveX对象,采用了OLE DB(动态连接与嵌入数据库)的数据访
问模式,是数据访问对象DAO、远程数据对象RDO和开放式数据库互连ODBC三种方式的扩展。
要使用ADO对象必需先执行 工程→引用→Microsoft ActiveX Data Object 2.0 Library。
ADO对象描述:
Connection 连接数据来源
Command 从数据源获取所需数据的命令信息
Recordset 所获取的一组记录组成的记录集
Error 在访问数据库时,由数据源所返回的错误信息
Parameter 与命令对象相关的参数
Field 包含了记录集中某个字段的信息
使用ADO数据控件:
添加ADO数据控件 工程→部件→Microsoft ADO Data ControlS 6.0(OLE DB)
1.ConnectionString 属性:用来与数据库建立连接,它包括4个参数:
Provide 指定数据源的名称
FileName 指定数据源所对应的文件名
RemoteProvide 在远程数据服务器打开一个客户端时所用的数据源名称
RemoteServer 在远程数据服务器打开一个主机端时所用的数据源名称
2.RecordSource 属性:确定具体可访问的数据,可以是单个的表名、查询或SQL查询字符串
3.ConnectionTimeout 属性:设置数据连接的超时时间,若超时连接不成功则显示超时信息
4.MaxRecords 属性: 确定从一个查询中最多能返回的记录数
ADO数据控件的属性设置:
1.先在窗体上放置一个ADO数据控件
2.在ADO属性窗口选择连接数据源的方式:
使用连接字符串 --单击“生成”按钮,通过选项设置系统自动产生连接字符串
使用Data Link文件 --通过一个连接文件来完成
使用ODBC数据资源名称--在下拉列表中选择某个创建好的数据源名称作为数据
来源对远程数据库进行控制。
3.在ADO属性窗口中单击 记录源 ,在“命令类型”中选择2--adCmdTable,
在“表或存储过程名称”中选择所需要的表。
在ADO上新增绑定控件:
DataGrid控件:位置 Microsoft DataGrid Control 6.0(OLE DB)属性 DataSource
DataCombo,DataList控件:位置 Microsoft DataList Controls 6.0(OLE DB)
属性:DataField、DataSource、ListField、RowSource、BoundColumn
MSChart控件:位置 Microsoft Chart Control 6.0(OLE DB)属性:DataSource
使用数据窗体向导:
外接程序→外接程序管理器→VB6数据窗体向导→加载→确定
外接程序→数据窗体向导→创建数据窗体,系统自动把所创建的窗体加到工程中
先下载本群共享里的 学生基本信息.rar 17.49KB
'打开窗体,点ADO数据控件右键选ADODV属性
'点 生成→选 学生基本信息\学生基本信息.mdb 路径 →测试→确定→确定...
'ADODC 控件属性CommandType=2--adCmdTable,RecordSource属性=学生基本信息
'开工~~~
Private Sub Command1_Click() '搜索
Dim mynumber As String '弹出键盘对话框输入学号
mynumber = InputBox$("请输入学号(4位)", "学号搜索")
Adodc1.Recordset.MoveFirst '将指针移到第1条记录
If mynumber <> "" Then '如果学号不是空的就
mynumber = "学号='" & mynumber & " '" '"字段名='数据记录'"
Adodc1.Recordset.Find (mynumber) '在字段名称搜索到数据记录后设为当前记录
If Adodc1.Recordset.EOF Then '如果指针超出记录未尾就
MsgBox "没有该学生!" '弹出对话窗提示
End If
End If
End Sub
Private Sub Command2_Click() '添加
Dim i As Integer
On Error GoTo apperr '出错就闪
Adodc1.Recordset.AddNew '先调用AddNew方法
For i = 0 To 6 '给Text1数组变量赋值
Text1(i).Text = "" '清空Text1文本信息
Next
Text1(0).SetFocus '将焦点移至Text1(0)控件
savecancel
Exit Sub
apperr: MsgBox "Err.Description" '如果出错弹出提示信息
End Sub
Private Sub Command3_Click() '删除
Dim s As String '弹出提示信息显示感叹号和 确定取消按钮
s = MsgBox("确定要删除吗?", vbquestion + vbOKCancel, "确定删除!")
If s = 1 Then '按确定S=1,按取消返回S=0
Adodc1.Recordset.Delete '删除当前记录
Adodc1.Recordset.MoveNext '将指针移到下一条记录
If Adodc1.Recordset.RecordCount > 0 Then '如果记录数>0就
If Adodc1.Recordset.EOF Then '如果指针不超出记录未尾就
Adodc1.Recordset.MoveLast '将指针移到最后一条记录
End If
End If
End If
End Sub
Private Sub Command4_Click() '保存
Dim s As String
On Error GoTo updateerr '发生错误时闪人
Adodc1.Recordset.Update '保存记录
Adodc1.Refresh '更新数据库记录
initial_button
Exit Sub
updateerr:
MsgBox "搞什么搞嘛,老大!" '发生错误时提示
End Sub
Private Sub Command5_Click() '取消
On Error GoTo cancelerr
Adodc1.Recordset.CancelUpdate '清空内存的记录不保存
initial_button
Exit Sub
cancelerr: MsgBox "还不快闪人?"
End Sub
Private Sub Command6_Click() '结束88
End
End Sub
Public Sub savecancel()
Command1.Enabled = False
Command2.Enabled = False
Command3.Enabled = False
Command4.Enabled = True
Command5.Enabled = True
End Sub
Public Sub initial_button()
If Adodc1.Recordset.RecordCount = 0 Then
Command1.Enabled = False
Command2.Enabled = True
Command3.Enabled = False
Command4.Enabled = False
Command5.Enabled = True
Else
Command1.Enabled = True
Command2.Enabled = True
Command3.Enabled = True
Command4.Enabled = False
Command5.Enabled = False
Command6.Enabled = True
End If
End Sub
Private Sub form_activate()
initial_button
End Sub
Public Sub savcancel()
Command1.Enabled = False
Command2.Enabled = False
Command3.Enabled = False
Command4.Enabled = True
Command5.Enabled = True
Command6.Enabled = False
End Sub
Private Sub Form_Load() '初始化窗体
Dim i As Integer
Dim s As String
With Adodc1
.ConnectionString =" Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\VB源码\学生基本信息\学生基本信息.mdb;Persist Security Info=False"
End With
For i = 0 To 6
Set Text1(i).DataSource = Adodc1 '更新Text1文本内容
Next i
End Sub
一、是非编码方式,主要通过Data等控件设置属性在文本框显示和操作数据库中的数据。
二、是通过编写代码,即利用数据访问对象(DAO)来实现可以实现更灵活更复杂的操作
在非编程方式下的常用控件:
Data 数据控件 CommandButton 命令按钮 TextBox 文本框 Label标签
常用控件属性
DatabaseName 属性: 返回或设置 Data 控件的数据源的路径及名称
RecordSource 属性: 返回或设置 Data 控件的基本表名、SQL语句
DataSource 属性: 返回或指出一个数据控件,通过它把控件绑定到一个数据库。
DataField 属性: 返回或设置控件绑定到数据库的字段名
例题1:是非编码方式的简单访问
⒈.新建 标准EXE 工程→放入以下控件
一个Data控件 :指向数据库磁盘路径、库名和数库表格名
在DatabaseName属性里选择数据库文件路径 C:\Myfile
在RecordSource属性里选择数据库的表格 Phone
四个Label控件:分别设置NAME名称和显示名为
名称=Lblshyin、LblName、LblPhone、LblAddress Caption=序号、姓名、电话、地址
三个Text控件 :分别指向DATA控件和Phone表中的字段名
1.名称=TxtName DataSource=Data1 DataField=姓名
2.名称=TxtPhone DataSource=Data1 DataField=电话
3.名称=TxtAddress DataSource=Data1 DataField=地址
⒉. 运行工程→点击Data控件的四个按钮
可以看到 首、前、后、末记录在文本框里的变化。
在通过编写代码方式下访问数据库:
1. Data 控件的其它常用属性:
Connect 指定数据控件所要连接的数据库类型,默认为Access的MDB数据库
RecordsetType 确定记录集类型,0—Table(表);1—Dynaset(动态);2—Snapshot(快照)
BofAction 当记录指针指向记录集的开始时,确定数据控件该采取的操作:
0—重定位到第一个记录 1—定位到一个无效记录,触发一个无效事件Validate
EofAction 当记录指针指向记录集的结束时,确定数据控件该采取的操作:
0—重定位到最后一个记录
1—定位到一个无效记录,触发一个记录的无效事件Validate
2—向记录集加入新的空记录,可以对新记录进行编辑,移动记录指针新记录写入数据库
2.可以与Datat控件绑定的其它常用控件属性:
MSFlexGrid 控件属性:DataSourse 位置:Microsoft FlexGrid Control 6.0(OLE DB)
DBCombo和DBList控件属性:DataField、DataSource、ListField、RowSource、BoundColumn
位置Microsoft Data Bound List Controls 6.0
DBGrid 控件属性:DataSourse 位置: Microsoft Data Bound Grid ontrol5.0(SP3)
3.数据控件的事件
Reposition事件: 当一条记录成为当前记录后就会触发此事件。
Validate 事件:
在一条不同的记录成为当前记录之前,Update 方法之前,以及 Delete、Unload 或 Close
操作之前会发生该事件。它检查被数据控件绑定的控件内的数据是否发生变化。
语法:Private Sub Data_Validate(Action As Integer, Save As Integer) …… End Sub
4.数据控件的常用方法
Refresh 激活数据控件,使各用户对数据库的操作有效。
UpdateControls 将数据从数据库中重新读到数据控件绑定的控件内,取消对数据的修改。
UpdateRecord 强制数据控件将绑定控件内的数据写入到数据库中,不再触发Validate事件
5. 记录集的属性与方法
属性:AbsolutePostion 返回当前指针值,如果是第一条记录,其值为0;是只读属性
Bof / Eof 判断指针在首记录之前时返回True;指在末记录之后返回True
Bookmark 设置或返回当前指针的标签,可以用在在程序中重定位记录集的指针
NoMatch 在记录集中进行查找时,如果找到相匹配的记录,则为Falue,找不到则为True。
RecordCount 返回记录集中的记录数,要先用MoveLast方法重置指针移到最后一条记录上
方法:Move 用于移动记录指针,共有5种方法:
MoveFirst —将指针移到第1条记录
MoveLast —将指针移到最后一条记录
MoveNext —将指针移到下一条记录
MovePrevious —将指针移到上一条记录
Move n —将指针向前或向后移动n条记录
方法:Find 在指定对象中搜寻含有特定字符串的记录,并使之成为当前记录,共有4种方法
FindFirst —从记录集的开始查找满足条件的第1条记录
FindLast —从记录集的尾部向前查找满足条件的第1条记录
FindNext —从当前记录开始查找满足条件的下一条记录
FindPrevious —从当前记录开始查找满足条件的上一条记录
Option Compare Text --设置通配符不区分大小写,默认情况下可以省略此句
Option Compare Binary --设置通配符区分大小写
方法:Seek 必需先打开表的索引,再搜索与索引规则相符的第一条记录,将其设为当前记录
Data1.Recordset.Index= "字段名" '打开表索引
Data1.Recordset.Seek "=", "数据内容" '在Table表中查找
6.利用数据控件对数据库进行增、删、改操作
增加记录:
1)调用AddNew方法:Data1.Recordset. AddNew
2)给各字段赋值:Recordset.Fields("字段名")=值或在绑定控件中直接输入内容
3)调用Update方法,将缓冲区内的数据写入数据库: Data1.Recordset. Update
4)调用MoveLast方法显示新记录: Data1.Recordset. MoveLast
注意:如果缺少第 3步而指针指到其他记录或关闭了记录,则所做的输入全部丢失;
若没有第 4步 加入了新记录后指针自动返回新记录前一个位置上,并不显示新记录
删除记录:
1)定位被删除记录使之成为当前记录(用Move或Find方法)
2)调用Delete方法: Data1.Recordset. Delete
3)调用MoveNext方法移动记录指针
注意:使用Delete方法时,虽然当前记录被删除了,但数据库绑定的控件仍旧显示
该记录的内容,所以用第 3步刷新绑定控件的内容
修改记录:
1)调用Edit方法:Data1.Recordset. Edit
2)给各字段赋值:在绑定控件中直接修改
3)调用Update方法,确定所做的修改: Data1.Recordset. Update
注意:如果要放弃对数据的所有修改,在第 3步之前用Refresh方法,重读数据库,刷新记录
1. Data 控件的其它常用属性:
Connect 指定数据控件所要连接的数据库类型,默认为Access的MDB数据库
RecordsetType 确定记录集类型,0—Table(表);1—Dynaset(动态);2—Snapshot(快照)
BofAction 当记录指针指向记录集的开始时,确定数据控件该采取的操作:
0—重定位到第一个记录 1—定位到一个无效记录,触发一个无效事件Validate
EofAction 当记录指针指向记录集的结束时,确定数据控件该采取的操作:
0—重定位到最后一个记录
1—定位到一个无效记录,触发一个记录的无效事件Validate
2—向记录集加入新的空记录,可以对新记录进行编辑,移动记录指针新记录写入数据库
2.可以与Datat控件绑定的其它常用控件属性:
MSFlexGrid 控件属性:DataSourse 位置:Microsoft FlexGrid Control 6.0(OLE DB)
DBCombo和DBList控件属性:DataField、DataSource、ListField、RowSource、BoundColumn
位置Microsoft Data Bound List Controls 6.0
DBGrid 控件属性:DataSourse 位置: Microsoft Data Bound Grid ontrol5.0(SP3)
3.数据控件的事件
Reposition事件: 当一条记录成为当前记录后就会触发此事件。
Validate 事件:
在一条不同的记录成为当前记录之前,Update 方法之前,以及 Delete、Unload 或 Close
操作之前会发生该事件。它检查被数据控件绑定的控件内的数据是否发生变化。
语法:Private Sub Data_Validate(Action As Integer, Save As Integer) …… End Sub
4.数据控件的常用方法
Refresh 激活数据控件,使各用户对数据库的操作有效。
UpdateControls 将数据从数据库中重新读到数据控件绑定的控件内,取消对数据的修改。
UpdateRecord 强制数据控件将绑定控件内的数据写入到数据库中,不再触发Validate事件
5. 记录集的属性与方法
属性:AbsolutePostion 返回当前指针值,如果是第一条记录,其值为0;是只读属性
Bof / Eof 判断指针在首记录之前时返回True;指在末记录之后返回True
Bookmark 设置或返回当前指针的标签,可以用在在程序中重定位记录集的指针
NoMatch 在记录集中进行查找时,如果找到相匹配的记录,则为Falue,找不到则为True。
RecordCount 返回记录集中的记录数,要先用MoveLast方法重置指针移到最后一条记录上
方法:Move 用于移动记录指针,共有5种方法:
MoveFirst —将指针移到第1条记录
MoveLast —将指针移到最后一条记录
MoveNext —将指针移到下一条记录
MovePrevious —将指针移到上一条记录
Move n —将指针向前或向后移动n条记录
方法:Find 在指定对象中搜寻含有特定字符串的记录,并使之成为当前记录,共有4种方法
FindFirst —从记录集的开始查找满足条件的第1条记录
FindLast —从记录集的尾部向前查找满足条件的第1条记录
FindNext —从当前记录开始查找满足条件的下一条记录
FindPrevious —从当前记录开始查找满足条件的上一条记录
Option Compare Text --设置通配符不区分大小写,默认情况下可以省略此句
Option Compare Binary --设置通配符区分大小写
方法:Seek 必需先打开表的索引,再搜索与索引规则相符的第一条记录,将其设为当前记录
Data1.Recordset.Index= "字段名" '打开表索引
Data1.Recordset.Seek "=", "数据内容" '在Table表中查找
6.利用数据控件对数据库进行增、删、改操作
增加记录:
1)调用AddNew方法:Data1.Recordset. AddNew
2)给各字段赋值:Recordset.Fields("字段名")=值或在绑定控件中直接输入内容
3)调用Update方法,将缓冲区内的数据写入数据库: Data1.Recordset. Update
4)调用MoveLast方法显示新记录: Data1.Recordset. MoveLast
注意:如果缺少第 3步而指针指到其他记录或关闭了记录,则所做的输入全部丢失;
若没有第 4步 加入了新记录后指针自动返回新记录前一个位置上,并不显示新记录
删除记录:
1)定位被删除记录使之成为当前记录(用Move或Find方法)
2)调用Delete方法: Data1.Recordset. Delete
3)调用MoveNext方法移动记录指针
注意:使用Delete方法时,虽然当前记录被删除了,但数据库绑定的控件仍旧显示
该记录的内容,所以用第 3步刷新绑定控件的内容
修改记录:
1)调用Edit方法:Data1.Recordset. Edit
2)给各字段赋值:在绑定控件中直接修改
3)调用Update方法,确定所做的修改: Data1.Recordset. Update
注意:如果要放弃对数据的所有修改,在第 3步之前用Refresh方法,重读数据库,刷新记录
Data控件的方法主要是通过初始值所创建的记录集 Recordset 来 移动、查找和修改的
例2 : 本例在前 例1 的基础上再增加了以下控件.Recordset 方法:返回当前记录的书签
五个Command控件:
1.Name名称=CmdFirst Caption=首记录
2.Name名称=CmdPrevious Caption=前记录
3.Name名称=CmdNext Caption=后记录
4.Name名称=CmdLast Caption=末记录
5.Name名称=Command1 Caption=退出
Private Sub Command1_Click()
End '当按下退出键时关闭窗口
End Sub
Private Sub CmdFirst_Click()
Data1.Recordset.MoveFirst '把当前记录指向第一条记录
End Sub
Private Sub CmdPrevious_Click()
Data1.Recordset.MovePrevious '把当前记录指向上一条记录
If Data1.Recordset.BOF Then '如果已经指向到首记录的前一位置
Data1.Recordset.MoveFirst '则要指向到首记录,以防超出记录集
End If
End Sub
Private Sub CmdNext_Click()
Data1.Recordset.MoveLast '把当前记录指向下一条记录
If Data1.Recordset.EOF Then '如果已经指向到末记录的后一位置
Data1.Recordset.MoveLast '则要指向到末记录,以防超出记录集
End If
End Sub
Private Sub CmdLast_Click()
Data1.Recordset.MoveLast '把当前记录指向最后一条记录
End Sub
通过编写代码方式下查询数据库的例子:例2 : 本例在前 例1 的基础上再增加了以下控件.Recordset 方法:返回当前记录的书签
五个Command控件:
1.Name名称=CmdFirst Caption=首记录
2.Name名称=CmdPrevious Caption=前记录
3.Name名称=CmdNext Caption=后记录
4.Name名称=CmdLast Caption=末记录
5.Name名称=Command1 Caption=退出
Private Sub Command1_Click()
End '当按下退出键时关闭窗口
End Sub
Private Sub CmdFirst_Click()
Data1.Recordset.MoveFirst '把当前记录指向第一条记录
End Sub
Private Sub CmdPrevious_Click()
Data1.Recordset.MovePrevious '把当前记录指向上一条记录
If Data1.Recordset.BOF Then '如果已经指向到首记录的前一位置
Data1.Recordset.MoveFirst '则要指向到首记录,以防超出记录集
End If
End Sub
Private Sub CmdNext_Click()
Data1.Recordset.MoveLast '把当前记录指向下一条记录
If Data1.Recordset.EOF Then '如果已经指向到末记录的后一位置
Data1.Recordset.MoveLast '则要指向到末记录,以防超出记录集
End If
End Sub
Private Sub CmdLast_Click()
Data1.Recordset.MoveLast '把当前记录指向最后一条记录
End Sub
Find方法是用来查找记录集中的特定记录,格式为:Data1.Recordset.Find方法 表达式
表达式可用Like等运算符: 比较两个字符串["姓名='美女'"],["姓名 LIKE '英雄'"]
Private Sub Cmdfind_Click()
'比较姓名字段里的数据是否符合表达表设定的值,*为通配符
Data1.Recordset.FindFirst "姓名 LIKE '英*'"
If data1.Recordset.NoMatch then '如果返回值为假就
MsgBox "无法找到匹配的记录" '显示提示信息
Else
MsgBox "已经找到匹配的记录"
EndIf
End Sub
Private Sub CmdDelete_Click()
On Error GoTo line '当删除时为空记录会出错,跳过
Data1.Recordset.Delete '删除一个记录
Data1.Recordset.MoveNext '指针下移一条记录
If Data1.Recordset.EOF Then Data1.Recordset.MovePrevious '上移
If Data1.Recordset.NoMatch Then Data1.Recordset.EOFAction = 2 '乱加进来的呵
line:
End Sub
Private Sub CmdEit_Click()
Data1.Recordset.Edit '先调用Edit方法
Data1.Recordset.Update '再修改数据
End Sub
Private Sub CmdFields_Click()
On Error GoTo line
Data1.Recordset.AddNew '先调用AddNew方法
If Text1.Text <> "" And TxtName.Text <> "" And TxtPhone.Text <> "" And TxtAddress <> "" Then
Data1.Recordset.Update '如果text都不是空的就保存数据
Data1.Recordset.MoveFirst '显示新记录
line: If Data1.Recordset.EOF Then Data1.Recordset.EOFAction = 0
End If '超出记录尾,就新建一条记录
End Sub '这个程序不成熟,也懒得搞了,88
-----------------------------ADO数据控件------------------------
ADO 数据访问接口是一种ActiveX对象,采用了OLE DB(动态连接与嵌入数据库)的数据访
问模式,是数据访问对象DAO、远程数据对象RDO和开放式数据库互连ODBC三种方式的扩展。
要使用ADO对象必需先执行 工程→引用→Microsoft ActiveX Data Object 2.0 Library。
ADO对象描述:
Connection 连接数据来源
Command 从数据源获取所需数据的命令信息
Recordset 所获取的一组记录组成的记录集
Error 在访问数据库时,由数据源所返回的错误信息
Parameter 与命令对象相关的参数
Field 包含了记录集中某个字段的信息
使用ADO数据控件:
添加ADO数据控件 工程→部件→Microsoft ADO Data ControlS 6.0(OLE DB)
1.ConnectionString 属性:用来与数据库建立连接,它包括4个参数:
Provide 指定数据源的名称
FileName 指定数据源所对应的文件名
RemoteProvide 在远程数据服务器打开一个客户端时所用的数据源名称
RemoteServer 在远程数据服务器打开一个主机端时所用的数据源名称
2.RecordSource 属性:确定具体可访问的数据,可以是单个的表名、查询或SQL查询字符串
3.ConnectionTimeout 属性:设置数据连接的超时时间,若超时连接不成功则显示超时信息
4.MaxRecords 属性: 确定从一个查询中最多能返回的记录数
ADO数据控件的属性设置:
1.先在窗体上放置一个ADO数据控件
2.在ADO属性窗口选择连接数据源的方式:
使用连接字符串 --单击“生成”按钮,通过选项设置系统自动产生连接字符串
使用Data Link文件 --通过一个连接文件来完成
使用ODBC数据资源名称--在下拉列表中选择某个创建好的数据源名称作为数据
来源对远程数据库进行控制。
3.在ADO属性窗口中单击 记录源 ,在“命令类型”中选择2--adCmdTable,
在“表或存储过程名称”中选择所需要的表。
在ADO上新增绑定控件:
DataGrid控件:位置 Microsoft DataGrid Control 6.0(OLE DB)属性 DataSource
DataCombo,DataList控件:位置 Microsoft DataList Controls 6.0(OLE DB)
属性:DataField、DataSource、ListField、RowSource、BoundColumn
MSChart控件:位置 Microsoft Chart Control 6.0(OLE DB)属性:DataSource
使用数据窗体向导:
外接程序→外接程序管理器→VB6数据窗体向导→加载→确定
外接程序→数据窗体向导→创建数据窗体,系统自动把所创建的窗体加到工程中
先下载本群共享里的 学生基本信息.rar 17.49KB
'打开窗体,点ADO数据控件右键选ADODV属性
'点 生成→选 学生基本信息\学生基本信息.mdb 路径 →测试→确定→确定...
'ADODC 控件属性CommandType=2--adCmdTable,RecordSource属性=学生基本信息
'开工~~~
Private Sub Command1_Click() '搜索
Dim mynumber As String '弹出键盘对话框输入学号
mynumber = InputBox$("请输入学号(4位)", "学号搜索")
Adodc1.Recordset.MoveFirst '将指针移到第1条记录
If mynumber <> "" Then '如果学号不是空的就
mynumber = "学号='" & mynumber & " '" '"字段名='数据记录'"
Adodc1.Recordset.Find (mynumber) '在字段名称搜索到数据记录后设为当前记录
If Adodc1.Recordset.EOF Then '如果指针超出记录未尾就
MsgBox "没有该学生!" '弹出对话窗提示
End If
End If
End Sub
Private Sub Command2_Click() '添加
Dim i As Integer
On Error GoTo apperr '出错就闪
Adodc1.Recordset.AddNew '先调用AddNew方法
For i = 0 To 6 '给Text1数组变量赋值
Text1(i).Text = "" '清空Text1文本信息
Next
Text1(0).SetFocus '将焦点移至Text1(0)控件
savecancel
Exit Sub
apperr: MsgBox "Err.Description" '如果出错弹出提示信息
End Sub
Private Sub Command3_Click() '删除
Dim s As String '弹出提示信息显示感叹号和 确定取消按钮
s = MsgBox("确定要删除吗?", vbquestion + vbOKCancel, "确定删除!")
If s = 1 Then '按确定S=1,按取消返回S=0
Adodc1.Recordset.Delete '删除当前记录
Adodc1.Recordset.MoveNext '将指针移到下一条记录
If Adodc1.Recordset.RecordCount > 0 Then '如果记录数>0就
If Adodc1.Recordset.EOF Then '如果指针不超出记录未尾就
Adodc1.Recordset.MoveLast '将指针移到最后一条记录
End If
End If
End If
End Sub
Private Sub Command4_Click() '保存
Dim s As String
On Error GoTo updateerr '发生错误时闪人
Adodc1.Recordset.Update '保存记录
Adodc1.Refresh '更新数据库记录
initial_button
Exit Sub
updateerr:
MsgBox "搞什么搞嘛,老大!" '发生错误时提示
End Sub
Private Sub Command5_Click() '取消
On Error GoTo cancelerr
Adodc1.Recordset.CancelUpdate '清空内存的记录不保存
initial_button
Exit Sub
cancelerr: MsgBox "还不快闪人?"
End Sub
Private Sub Command6_Click() '结束88
End
End Sub
Public Sub savecancel()
Command1.Enabled = False
Command2.Enabled = False
Command3.Enabled = False
Command4.Enabled = True
Command5.Enabled = True
End Sub
Public Sub initial_button()
If Adodc1.Recordset.RecordCount = 0 Then
Command1.Enabled = False
Command2.Enabled = True
Command3.Enabled = False
Command4.Enabled = False
Command5.Enabled = True
Else
Command1.Enabled = True
Command2.Enabled = True
Command3.Enabled = True
Command4.Enabled = False
Command5.Enabled = False
Command6.Enabled = True
End If
End Sub
Private Sub form_activate()
initial_button
End Sub
Public Sub savcancel()
Command1.Enabled = False
Command2.Enabled = False
Command3.Enabled = False
Command4.Enabled = True
Command5.Enabled = True
Command6.Enabled = False
End Sub
Private Sub Form_Load() '初始化窗体
Dim i As Integer
Dim s As String
With Adodc1
.ConnectionString =" Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\VB源码\学生基本信息\学生基本信息.mdb;Persist Security Info=False"
End With
For i = 0 To 6
Set Text1(i).DataSource = Adodc1 '更新Text1文本内容
Next i
End Sub
引用控件:右键点击工具箱→部件→.....
一. 高级约束数据网格控件(DBGrid)
Microsoft Data Bound Grid Control5.0(SP3):c:\winnt\system32\dbgrid32.ocx
DataSource属性:返回Data控件记录集来自动填充网格
DBGrid 控件的列 Columns 集合的 Count 属性和 Recordset 对象
的 RecordCount 属性可以确定控件中的行和列的数
二. 高级约束列表控件(DBList)和高级约束组合框控件(DBCombo)
Microsoft Data Bound List Controls 6.0 :c:\winnt\system32\dblist32.ocx
它们能列显示Data 控件的字段值,并可以更新其它相关表的字段。通过简单地设置
能更新在不同的 Data 控件的相关的字段
DBList 与DBCombo常用的属性:
RowSource:指定数据控件中的一个字段内容来填充列表控件的列表区;
ListField:返回或设置 Recordset 对象中的字段名,用于填充列表;
SelectedItem:返回一个控件中选中的记录的书签。
例题:
在列表中选定一个人名,则在其它的几个文本框中就显示这个人的所有完整的信息
在新窗体放置一个Data控件;DatabaseName=E:\szk\myfile.mdb:RecordSource=Phone 表
一个DBList控件;RowSource=Data1:ListField=姓名
四个Text控件;DataSource都=Data1: DataField分别=序号、姓名、电话、地址
在DBLIST控件的单击事件里加入代码:Data1.RecordSet.Bookmark=DBList1.SelectedItem
OK运行,什么地方就点过一次后发现的确太好用了,呵呵.
Bookmark属性: 返回或设置Data控件重新定位到特定的行。
SelectedItem属性: 返回或设置所选字段所属的记录书签
一. 高级约束数据网格控件(DBGrid)
Microsoft Data Bound Grid Control5.0(SP3):c:\winnt\system32\dbgrid32.ocx
DataSource属性:返回Data控件记录集来自动填充网格
DBGrid 控件的列 Columns 集合的 Count 属性和 Recordset 对象
的 RecordCount 属性可以确定控件中的行和列的数
二. 高级约束列表控件(DBList)和高级约束组合框控件(DBCombo)
Microsoft Data Bound List Controls 6.0 :c:\winnt\system32\dblist32.ocx
它们能列显示Data 控件的字段值,并可以更新其它相关表的字段。通过简单地设置
能更新在不同的 Data 控件的相关的字段
DBList 与DBCombo常用的属性:
RowSource:指定数据控件中的一个字段内容来填充列表控件的列表区;
ListField:返回或设置 Recordset 对象中的字段名,用于填充列表;
SelectedItem:返回一个控件中选中的记录的书签。
例题:
在列表中选定一个人名,则在其它的几个文本框中就显示这个人的所有完整的信息
在新窗体放置一个Data控件;DatabaseName=E:\szk\myfile.mdb:RecordSource=Phone 表
一个DBList控件;RowSource=Data1:ListField=姓名
四个Text控件;DataSource都=Data1: DataField分别=序号、姓名、电话、地址
在DBLIST控件的单击事件里加入代码:Data1.RecordSet.Bookmark=DBList1.SelectedItem
OK运行,什么地方就点过一次后发现的确太好用了,呵呵.
Bookmark属性: 返回或设置Data控件重新定位到特定的行。
SelectedItem属性: 返回或设置所选字段所属的记录书签
ADO数据库查询 --本文由群友 盗帅留香 提供
-------------------------------------------------
Option Explicit
'==================================================
' 用于ADO 数据库查询的枚举类型定义
'==================================================
Public Enum SeekType
MistySeek = 0 '模糊查询
Exactitude = 1 '精确查询
End Enum
'==================================================
' 用于模糊查询的 SQL 关系枚举定义
'==================================================
Public Enum Compare '数字关系比较
Equal = 0 '等于
NotEqual = 1 '不等于
Lessness = 2 '小于
Greatness = 3 '大于
End Enum
Public Enum Range '范围
Between = True '两记录之间
NotBetween = False '不再两记录之间的
End Enum
Public Enum RelateList '数据表
InList = True '属于 表中的
NotInList = False '不属于 表中的
End Enum
Public Enum ModeMatch '模式匹配
LikeThis = True '象...(Like)
NotLikeThis = False '(Not Like)
End Enum
Public Enum FieldEmpty '空值
EnptIsNull = True '是空值
EnptIsNotNull = False '不是空值
End Enum
Public Enum AllRst '所有记录
EqualAll = 0 '=All
MoreAll = 1 '>All
LessEqAll = 2 '<=All
AnyRst = 3 ' Any
End Enum
Public Enum MistyType
Comp = 0 '数字关系比较
Rang = 1 '范围
RelList = 2 '数据表
ModMatch = 3 '模式匹配
FldEmpty = 4 '空值
ForRst = 5 '所有记录
End Enum
'保持属性值 DBName的局部变量
Private mvarDBName As String '局部复制,用于存储数据库名
'保持属性值 SQLSeekStr的局部变量
Private mvarSQLSeekStr As String '局部复制
'==================================================
' 用于存储数据库SQL查询字符串的属性声明
'==================================================
Public Property Let SQLSeekStr(ByVal vData As String)
'向属性指派值时使用,位于赋值语句的左边。
'Syntax: X.SQLSeekStr = 5
mvarSQLSeekStr = vData
End Property
Public Property Get SQLSeekStr() As String
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.SQLSeekStr
SQLSeekStr = mvarSQLSeekStr
End Property
'==================================================
' 用于存储数据库名称的属性声明
'==================================================
Public Property Let DBName(ByVal vData As String)
'向属性指派值时使用,位于赋值语句的左边。
'Syntax: X.DBName = 5
mvarDBName = vData
End Property
Public Property Get DBName() As String
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.DBName
DBName = mvarDBName
End Property
'==================================================
' 用于打开单数据库连接,并实现多表查询
'==================================================
Public Function OpenDBMTSeek(Searchtype As SeekType, DBTableName() As String, myStr As String) As ADODB.Recordset
Dim myCon As ADODB.Connection '定义myCon为ADO的连接对象
Dim myRst As ADODB.Recordset '用于存储ADO记录集对象
Dim myCmd As ADODB.Command '定义ADO的Command对象
Dim errLoop As ADODB.Error '用于存储ADO的Error对象信息
Dim SQLStr As String '用于存储SQL语句的变量定义
Dim ConStr As String '用于存储连接字符串
Dim DBTableCount As Long '用于存储数据表的总数
Dim lngLoop As Long '循环变量
Dim TmpStr As String
Dim TmpSearchStr As String
TmpStr = ""
On Error Resume Next
DBTableCount = UBound(DBTableName())
For lngLoop = 0 To (DBTableCount - 1)
If lngLoop < (DBTableCount - 1) Then
TmpStr = TmpStr & DBTableName(lngLoop) '& ","
Else
TmpStr = TmpStr & DBTableName(lngLoop)
End If
Next
SQLStr = "Select DISTINCT * from " & TmpStr & " Where " & myStr
If (Right(DBName, 4) = ".mdb" Or Right(DBName, 4) = ".MDB") Then
DBName = Trim(DBName)
Else
If Left(Right(DBName, 4), 1) <> "." Then '不含扩展名的文件名
DBName = Trim(DBName) & ".mdb"
Debug.Print DBName
Else '含扩展名的非*.mdb文件
Exit Function
End If
End If
ConStr = "Provider=Microsoft.Jet.OLEDB.3.51;" & _
"Data Source=" & DBName
Set myCon = New ADODB.Connection
Set myCmd = New ADODB.Command
myCon.Open ConStr
myCmd.ActiveConnection = myCon
Set myRst = myCon.Execute(SQLStr)
Set OpenDBMTSeek = myRst
End Function
'==================================================
' 用于打开多数据库连接,并实现多表查询
'==================================================
Public Function OpenMDBMTSeek(DBName() As String, Relate() As Integer, DBTableName() As String, Searchtype As SeekType, SQLSeekStr As String) As ADODB.Recordset
End Function
'==================================================
' 用于得到数据库中所有数据表 的函数声明
'==================================================
Public Sub GetDBTable()
Dim Con As ADODB.Connection
Dim rstSchema As ADODB.Recordset
Dim strCnn As String
Set Con = New ADODB.Connection
strCnn = "Provider=Microsoft.Jet.OLEDB.3.51;" & _
"Data Source=" & DBName
'"driver={SQL Server};server=srv;" & "uid=sa;pwd=;database=pubs"
Con.Open strCnn
Set rstSchema = Con.OpenSchema(adSchemaTables)
Do Until rstSchema.EOF
Debug.Print "Table name: " & _
rstSchema!TABLE_NAME & vbCr & _
"Table type: " & rstSchema!TABLE_TYPE & vbCr
rstSchema.MoveNext
Loop
rstSchema.Close
Con.Close
End Sub
'=================================================================
' 用于拼合查询SQL语句(含多字段,多数据表的模糊查询语句)
'=================================================================
Public Function ParamDeal(Searchtype As SeekType, StrTxt() As String, ParamArray TabField() As Variant) As String
Dim StrField As String '定义存储字段参数查询的动态数组
Dim ParamCount As Integer '用于存储ParamArray参数数量的变量定义
Dim IntI As Integer
Dim intSumST As Integer
intSumST = 0
For IntI = 1 To 256
If IsNull(StrTxt(IntI)) Then
'判断StrTxt字符串是否结束,以确定元素个数,函数要求传递的参数之间不能有空值
Exit For
Else
intSumST = intSumST + 1
If intSumST <> UBound(TabField) Then
ParamDeal = Null
Else
For ParamCount = 1 To UBound(TabField)
'StrTxt(ParamCount) = TabField(ParamCount)
If Searchtype = Exactitude Then
If ParamCount = 1 Then
StrField = TabField(ParamCount) & "='" & StrTxt(ParamCount)
ElseIf ParamCount <> UBound(TabField) Then
StrField = StrField & "' and " & TabField(ParamCount) & "='" & StrTxt(ParamCount)
Else
StrField = StrField & "' and " & TabField(ParamCount) & "='" & StrTxt(ParamCount) & "'"
End If
Else
End If
Next ParamCount
ParamDeal = StrField
End If
End If
Next IntI
End Function
'===============================================================
' 返回数据库记录集Rst 中记录的总条数
'===============================================================
Public Function RstCount(Rst As ADODB.Recordset) As Long
Dim Num As Long
Num = 0
Rst.MoveFirst
Do While Not Rst.EOF
Num = Num + 1
Rst.MoveNext
Loop
RstCount = Num
End Function
'==================================================
' 用于构造数据库 SQL查询字符串 的函数声明
'==================================================
Public Function DBSQLStr(DBTableName() As String, Searchtype As SeekType, DBField() As String, DBFieldVal() As Variant) As String
Dim DBTCount As Long '用于存储数据库DBName的数据表的 DBTableName数量
Dim DBFCount As Long '用于存储数据库DBName 查询字段 DBField的数量
Dim DBFValCount As Long '用于存储数据库 查询字段的值的数组定义
Dim lngDBT As Long
Dim lngDBF As Long
Dim lngDBFV As Long
DBTCount = UBound(DBTableName())
DBFCount = UBound(DBField())
DBFValCount = UBound(DBFieldVal())
If DBFCount <> DBFValCount Then
DBSQLStr = vbNull
Else
End If
End Function
-------------------------------------------------
Option Explicit
'==================================================
' 用于ADO 数据库查询的枚举类型定义
'==================================================
Public Enum SeekType
MistySeek = 0 '模糊查询
Exactitude = 1 '精确查询
End Enum
'==================================================
' 用于模糊查询的 SQL 关系枚举定义
'==================================================
Public Enum Compare '数字关系比较
Equal = 0 '等于
NotEqual = 1 '不等于
Lessness = 2 '小于
Greatness = 3 '大于
End Enum
Public Enum Range '范围
Between = True '两记录之间
NotBetween = False '不再两记录之间的
End Enum
Public Enum RelateList '数据表
InList = True '属于 表中的
NotInList = False '不属于 表中的
End Enum
Public Enum ModeMatch '模式匹配
LikeThis = True '象...(Like)
NotLikeThis = False '(Not Like)
End Enum
Public Enum FieldEmpty '空值
EnptIsNull = True '是空值
EnptIsNotNull = False '不是空值
End Enum
Public Enum AllRst '所有记录
EqualAll = 0 '=All
MoreAll = 1 '>All
LessEqAll = 2 '<=All
AnyRst = 3 ' Any
End Enum
Public Enum MistyType
Comp = 0 '数字关系比较
Rang = 1 '范围
RelList = 2 '数据表
ModMatch = 3 '模式匹配
FldEmpty = 4 '空值
ForRst = 5 '所有记录
End Enum
'保持属性值 DBName的局部变量
Private mvarDBName As String '局部复制,用于存储数据库名
'保持属性值 SQLSeekStr的局部变量
Private mvarSQLSeekStr As String '局部复制
'==================================================
' 用于存储数据库SQL查询字符串的属性声明
'==================================================
Public Property Let SQLSeekStr(ByVal vData As String)
'向属性指派值时使用,位于赋值语句的左边。
'Syntax: X.SQLSeekStr = 5
mvarSQLSeekStr = vData
End Property
Public Property Get SQLSeekStr() As String
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.SQLSeekStr
SQLSeekStr = mvarSQLSeekStr
End Property
'==================================================
' 用于存储数据库名称的属性声明
'==================================================
Public Property Let DBName(ByVal vData As String)
'向属性指派值时使用,位于赋值语句的左边。
'Syntax: X.DBName = 5
mvarDBName = vData
End Property
Public Property Get DBName() As String
'检索属性值时使用,位于赋值语句的右边。
'Syntax: Debug.Print X.DBName
DBName = mvarDBName
End Property
'==================================================
' 用于打开单数据库连接,并实现多表查询
'==================================================
Public Function OpenDBMTSeek(Searchtype As SeekType, DBTableName() As String, myStr As String) As ADODB.Recordset
Dim myCon As ADODB.Connection '定义myCon为ADO的连接对象
Dim myRst As ADODB.Recordset '用于存储ADO记录集对象
Dim myCmd As ADODB.Command '定义ADO的Command对象
Dim errLoop As ADODB.Error '用于存储ADO的Error对象信息
Dim SQLStr As String '用于存储SQL语句的变量定义
Dim ConStr As String '用于存储连接字符串
Dim DBTableCount As Long '用于存储数据表的总数
Dim lngLoop As Long '循环变量
Dim TmpStr As String
Dim TmpSearchStr As String
TmpStr = ""
On Error Resume Next
DBTableCount = UBound(DBTableName())
For lngLoop = 0 To (DBTableCount - 1)
If lngLoop < (DBTableCount - 1) Then
TmpStr = TmpStr & DBTableName(lngLoop) '& ","
Else
TmpStr = TmpStr & DBTableName(lngLoop)
End If
Next
SQLStr = "Select DISTINCT * from " & TmpStr & " Where " & myStr
If (Right(DBName, 4) = ".mdb" Or Right(DBName, 4) = ".MDB") Then
DBName = Trim(DBName)
Else
If Left(Right(DBName, 4), 1) <> "." Then '不含扩展名的文件名
DBName = Trim(DBName) & ".mdb"
Debug.Print DBName
Else '含扩展名的非*.mdb文件
Exit Function
End If
End If
ConStr = "Provider=Microsoft.Jet.OLEDB.3.51;" & _
"Data Source=" & DBName
Set myCon = New ADODB.Connection
Set myCmd = New ADODB.Command
myCon.Open ConStr
myCmd.ActiveConnection = myCon
Set myRst = myCon.Execute(SQLStr)
Set OpenDBMTSeek = myRst
End Function
'==================================================
' 用于打开多数据库连接,并实现多表查询
'==================================================
Public Function OpenMDBMTSeek(DBName() As String, Relate() As Integer, DBTableName() As String, Searchtype As SeekType, SQLSeekStr As String) As ADODB.Recordset
End Function
'==================================================
' 用于得到数据库中所有数据表 的函数声明
'==================================================
Public Sub GetDBTable()
Dim Con As ADODB.Connection
Dim rstSchema As ADODB.Recordset
Dim strCnn As String
Set Con = New ADODB.Connection
strCnn = "Provider=Microsoft.Jet.OLEDB.3.51;" & _
"Data Source=" & DBName
'"driver={SQL Server};server=srv;" & "uid=sa;pwd=;database=pubs"
Con.Open strCnn
Set rstSchema = Con.OpenSchema(adSchemaTables)
Do Until rstSchema.EOF
Debug.Print "Table name: " & _
rstSchema!TABLE_NAME & vbCr & _
"Table type: " & rstSchema!TABLE_TYPE & vbCr
rstSchema.MoveNext
Loop
rstSchema.Close
Con.Close
End Sub
'=================================================================
' 用于拼合查询SQL语句(含多字段,多数据表的模糊查询语句)
'=================================================================
Public Function ParamDeal(Searchtype As SeekType, StrTxt() As String, ParamArray TabField() As Variant) As String
Dim StrField As String '定义存储字段参数查询的动态数组
Dim ParamCount As Integer '用于存储ParamArray参数数量的变量定义
Dim IntI As Integer
Dim intSumST As Integer
intSumST = 0
For IntI = 1 To 256
If IsNull(StrTxt(IntI)) Then
'判断StrTxt字符串是否结束,以确定元素个数,函数要求传递的参数之间不能有空值
Exit For
Else
intSumST = intSumST + 1
If intSumST <> UBound(TabField) Then
ParamDeal = Null
Else
For ParamCount = 1 To UBound(TabField)
'StrTxt(ParamCount) = TabField(ParamCount)
If Searchtype = Exactitude Then
If ParamCount = 1 Then
StrField = TabField(ParamCount) & "='" & StrTxt(ParamCount)
ElseIf ParamCount <> UBound(TabField) Then
StrField = StrField & "' and " & TabField(ParamCount) & "='" & StrTxt(ParamCount)
Else
StrField = StrField & "' and " & TabField(ParamCount) & "='" & StrTxt(ParamCount) & "'"
End If
Else
End If
Next ParamCount
ParamDeal = StrField
End If
End If
Next IntI
End Function
'===============================================================
' 返回数据库记录集Rst 中记录的总条数
'===============================================================
Public Function RstCount(Rst As ADODB.Recordset) As Long
Dim Num As Long
Num = 0
Rst.MoveFirst
Do While Not Rst.EOF
Num = Num + 1
Rst.MoveNext
Loop
RstCount = Num
End Function
'==================================================
' 用于构造数据库 SQL查询字符串 的函数声明
'==================================================
Public Function DBSQLStr(DBTableName() As String, Searchtype As SeekType, DBField() As String, DBFieldVal() As Variant) As String
Dim DBTCount As Long '用于存储数据库DBName的数据表的 DBTableName数量
Dim DBFCount As Long '用于存储数据库DBName 查询字段 DBField的数量
Dim DBFValCount As Long '用于存储数据库 查询字段的值的数组定义
Dim lngDBT As Long
Dim lngDBF As Long
Dim lngDBFV As Long
DBTCount = UBound(DBTableName())
DBFCount = UBound(DBField())
DBFValCount = UBound(DBFieldVal())
If DBFCount <> DBFValCount Then
DBSQLStr = vbNull
Else
End If
End Function
评论