正文

从零开始学vb数据库2005-10-03 09:23:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/iamben250/5604.html

分享到:

几个常用的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 →自动添加字段→确定 → 反复这一过程 二、增加索引   右键单击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 在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控件的四个按钮可以看到 首、前、后、末记录在文本框里的变化。 在通过编写代码方式下访问数据库:1. Data 控件的其它常用属性:Connect 指定数据控件所要连接的数据库类型,默认为Access的MDB数据库RecordsetType 确定记录集类型,0—Table(表);1—Dynaset(动态);2—Snapshot(快照)BofAction 当记录指针指向记录集的开始时,确定数据控件该采取的操作:0—重定位到第一个记录 1—定位到一个无效记录,触发一个无效事件ValidateEofAction 当记录指针指向记录集的结束时,确定数据控件该采取的操作:0—重定位到最后一个记录1—定位到一个无效记录,触发一个记录的无效事件Validate2—向记录集加入新的空记录,可以对新记录进行编辑,移动记录指针新记录写入数据库2.可以与Datat控件绑定的其它常用控件属性:MSFlexGrid 控件属性:DataSourse 位置:Microsoft FlexGrid Control 6.0(OLE DB)DBCombo和DBList控件属性:DataField、DataSource、ListField、RowSource、BoundColumn 位置Microsoft Data Bound List Controls 6.0DBGrid 控件属性: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 Sub4.数据控件的常用方法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. AddNew2)给各字段赋值:Recordset.Fields("字段名")=值或在绑定控件中直接输入内容3)调用Update方法,将缓冲区内的数据写入数据库: Data1.Recordset. Update4)调用MoveLast方法显示新记录: Data1.Recordset. MoveLast注意:如果缺少第 3步而指针指到其他记录或关闭了记录,则所做的输入全部丢失;若没有第 4步 加入了新记录后指针自动返回新记录前一个位置上,并不显示新记录删除记录:1)定位被删除记录使之成为当前记录(用Move或Find方法)2)调用Delete方法: Data1.Recordset. Delete3)调用MoveNext方法移动记录指针注意:使用Delete方法时,虽然当前记录被删除了,但数据库绑定的控件仍旧显示该记录的内容,所以用第 3步刷新绑定控件的内容修改记录:1)调用Edit方法:Data1.Recordset. Edit2)给各字段赋值:在绑定控件中直接修改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 SubPrivate Sub CmdFirst_Click()Data1.Recordset.MoveFirst '把当前记录指向第一条记录End SubPrivate Sub CmdPrevious_Click()Data1.Recordset.MovePrevious '把当前记录指向上一条记录If Data1.Recordset.BOF Then '如果已经指向到首记录的前一位置Data1.Recordset.MoveFirst '则要指向到首记录,以防超出记录集End IfEnd SubPrivate Sub CmdNext_Click()Data1.Recordset.MoveLast '把当前记录指向下一条记录If Data1.Recordset.EOF Then '如果已经指向到末记录的后一位置Data1.Recordset.MoveLast '则要指向到末记录,以防超出记录集End IfEnd SubPrivate 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 SubPrivate Sub CmdEit_Click()Data1.Recordset.Edit '先调用Edit方法Data1.Recordset.Update '再修改数据End SubPrivate Sub CmdFields_Click()On Error GoTo lineData1.Recordset.AddNew '先调用AddNew方法If Text1.Text <> "" And TxtName.Text <> "" And TxtPhone.Text <> "" And TxtAddress <> "" ThenData1.Recordset.Update '如果text都不是空的就保存数据Data1.Recordset.MoveFirst '显示新记录line: If Data1.Recordset.EOF Then Data1.Recordset.EOFAction = 0End 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)属性 DataSourceDataCombo,DataList控件:位置 Microsoft DataList Controls 6.0(OLE DB)属性:DataField、DataSource、ListField、RowSource、BoundColumnMSChart控件:位置 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 IfEnd IfEnd SubPrivate Sub Command2_Click() '添加Dim i As IntegerOn Error GoTo apperr '出错就闪Adodc1.Recordset.AddNew '先调用AddNew方法For i = 0 To 6 '给Text1数组变量赋值Text1(i).Text = "" '清空Text1文本信息NextText1(0).SetFocus '将焦点移至Text1(0)控件savecancelExit Subapperr: MsgBox "Err.Description" '如果出错弹出提示信息End SubPrivate Sub Command3_Click() '删除Dim s As String '弹出提示信息显示感叹号和 确定取消按钮s = MsgBox("确定要删除吗?", vbquestion + vbOKCancel, "确定删除!")If s = 1 Then '按确定S=1,按取消返回S=0Adodc1.Recordset.Delete '删除当前记录Adodc1.Recordset.MoveNext '将指针移到下一条记录If Adodc1.Recordset.RecordCount > 0 Then '如果记录数>0就If Adodc1.Recordset.EOF Then '如果指针不超出记录未尾就Adodc1.Recordset.MoveLast '将指针移到最后一条记录End IfEnd IfEnd IfEnd SubPrivate Sub Command4_Click() '保存Dim s As StringOn Error GoTo updateerr '发生错误时闪人Adodc1.Recordset.Update '保存记录Adodc1.Refresh '更新数据库记录initial_buttonExit Subupdateerr:MsgBox "搞什么搞嘛,老大!" '发生错误时提示End SubPrivate Sub Command5_Click() '取消On Error GoTo cancelerrAdodc1.Recordset.CancelUpdate '清空内存的记录不保存initial_buttonExit Subcancelerr: MsgBox "还不快闪人?"End SubPrivate Sub Command6_Click() '结束88EndEnd SubPublic Sub savecancel()Command1.Enabled = FalseCommand2.Enabled = FalseCommand3.Enabled = FalseCommand4.Enabled = TrueCommand5.Enabled = TrueEnd SubPublic Sub initial_button()If Adodc1.Recordset.RecordCount = 0 ThenCommand1.Enabled = FalseCommand2.Enabled = TrueCommand3.Enabled = FalseCommand4.Enabled = FalseCommand5.Enabled = TrueElseCommand1.Enabled = TrueCommand2.Enabled = TrueCommand3.Enabled = TrueCommand4.Enabled = FalseCommand5.Enabled = FalseCommand6.Enabled = TrueEnd IfEnd SubPrivate Sub form_activate()initial_buttonEnd SubPublic Sub savcancel()Command1.Enabled = FalseCommand2.Enabled = FalseCommand3.Enabled = FalseCommand4.Enabled = TrueCommand5.Enabled = TrueCommand6.Enabled = FalseEnd SubPrivate Sub Form_Load() '初始化窗体Dim i As IntegerDim s As StringWith Adodc1.ConnectionString =" Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\VB源码\学生基本信息\学生基本信息.mdb;Persist Security Info=False"End WithFor i = 0 To 6Set Text1(i).DataSource = Adodc1 '更新Text1文本内容Next iEnd 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属性: 返回或设置所选字段所属的记录书签 ADO数据库查询 --本文由群友 盗帅留香 提供-------------------------------------------------Option Explicit'==================================================' 用于ADO 数据库查询的枚举类型定义'==================================================Public Enum SeekTypeMistySeek = 0 '模糊查询Exactitude = 1 '精确查询End Enum'==================================================' 用于模糊查询的 SQL 关系枚举定义'==================================================Public Enum Compare '数字关系比较Equal = 0 '等于NotEqual = 1 '不等于Lessness = 2 '小于Greatness = 3 '大于End EnumPublic Enum Range '范围Between = True '两记录之间NotBetween = False '不再两记录之间的End EnumPublic Enum RelateList '数据表InList = True '属于 表中的NotInList = False '不属于 表中的End EnumPublic Enum ModeMatch '模式匹配LikeThis = True '象...(Like)NotLikeThis = False '(Not Like)End EnumPublic Enum FieldEmpty '空值EnptIsNull = True '是空值EnptIsNotNull = False '不是空值End EnumPublic Enum AllRst '所有记录EqualAll = 0 '=AllMoreAll = 1 '>AllLessEqAll = 2 '<=AllAnyRst = 3 ' AnyEnd EnumPublic Enum MistyTypeComp = 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 = 5mvarSQLSeekStr = vDataEnd PropertyPublic Property Get SQLSeekStr() As String'检索属性值时使用,位于赋值语句的右边。'Syntax: Debug.Print X.SQLSeekStrSQLSeekStr = mvarSQLSeekStrEnd Property'==================================================' 用于存储数据库名称的属性声明'==================================================Public Property Let DBName(ByVal vData As String)'向属性指派值时使用,位于赋值语句的左边。'Syntax: X.DBName = 5mvarDBName = vDataEnd PropertyPublic Property Get DBName() As String'检索属性值时使用,位于赋值语句的右边。'Syntax: Debug.Print X.DBNameDBName = mvarDBNameEnd Property'==================================================' 用于打开单数据库连接,并实现多表查询'==================================================Public Function OpenDBMTSeek(Searchtype As SeekType, DBTableName() As String, myStr As String) As ADODB.RecordsetDim 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 StringDim TmpSearchStr As StringTmpStr = ""On Error Resume NextDBTableCount = UBound(DBTableName())For lngLoop = 0 To (DBTableCount - 1)If lngLoop < (DBTableCount - 1) ThenTmpStr = TmpStr & DBTableName(lngLoop) '& ","ElseTmpStr = TmpStr & DBTableName(lngLoop)End IfNextSQLStr = "Select DISTINCT * from " & TmpStr & " Where " & myStrIf (Right(DBName, 4) = ".mdb" Or Right(DBName, 4) = ".MDB") ThenDBName = Trim(DBName)ElseIf Left(Right(DBName, 4), 1) <> "." Then '不含扩展名的文件名DBName = Trim(DBName) & ".mdb"Debug.Print DBNameElse '含扩展名的非*.mdb文件Exit FunctionEnd IfEnd IfConStr = "Provider=Microsoft.Jet.OLEDB.3.51;" & _"Data Source=" & DBNameSet myCon = New ADODB.ConnectionSet myCmd = New ADODB.CommandmyCon.Open ConStrmyCmd.ActiveConnection = myConSet myRst = myCon.Execute(SQLStr)Set OpenDBMTSeek = myRstEnd Function'==================================================' 用于打开多数据库连接,并实现多表查询'==================================================Public Function OpenMDBMTSeek(DBName() As String, Relate() As Integer, DBTableName() As String, Searchtype As SeekType, SQLSeekStr As String) As ADODB.RecordsetEnd Function'==================================================' 用于得到数据库中所有数据表 的函数声明'==================================================Public Sub GetDBTable()Dim Con As ADODB.ConnectionDim rstSchema As ADODB.RecordsetDim strCnn As StringSet Con = New ADODB.ConnectionstrCnn = "Provider=Microsoft.Jet.OLEDB.3.51;" & _"Data Source=" & DBName'"driver={SQL Server};server=srv;" & "uid=sa;pwd=;database=pubs"Con.Open strCnnSet rstSchema = Con.OpenSchema(adSchemaTables)Do Until rstSchema.EOFDebug.Print "Table name: " & _rstSchema!TABLE_NAME & vbCr & _"Table type: " & rstSchema!TABLE_TYPE & vbCrrstSchema.MoveNextLooprstSchema.CloseCon.CloseEnd Sub'=================================================================' 用于拼合查询SQL语句(含多字段,多数据表的模糊查询语句)'=================================================================Public Function ParamDeal(Searchtype As SeekType, StrTxt() As String, ParamArray TabField() As Variant) As StringDim StrField As String '定义存储字段参数查询的动态数组Dim ParamCount As Integer '用于存储ParamArray参数数量的变量定义Dim IntI As IntegerDim intSumST As IntegerintSumST = 0For IntI = 1 To 256If IsNull(StrTxt(IntI)) Then'判断StrTxt字符串是否结束,以确定元素个数,函数要求传递的参数之间不能有空值Exit ForElseintSumST = intSumST + 1If intSumST <> UBound(TabField) ThenParamDeal = NullElseFor ParamCount = 1 To UBound(TabField)'StrTxt(ParamCount) = TabField(ParamCount)If Searchtype = Exactitude ThenIf ParamCount = 1 ThenStrField = TabField(ParamCount) & "='" & StrTxt(ParamCount)ElseIf ParamCount <> UBound(TabField) ThenStrField = StrField & "' and " & TabField(ParamCount) & "='" & StrTxt(ParamCount)ElseStrField = StrField & "' and " & TabField(ParamCount) & "='" & StrTxt(ParamCount) & "'"End IfElseEnd IfNext ParamCountParamDeal = StrFieldEnd IfEnd IfNext IntIEnd Function'===============================================================' 返回数据库记录集Rst 中记录的总条数'===============================================================Public Function RstCount(Rst As ADODB.Recordset) As LongDim Num As LongNum = 0Rst.MoveFirstDo While Not Rst.EOFNum = Num + 1Rst.MoveNextLoopRstCount = NumEnd Function'==================================================' 用于构造数据库 SQL查询字符串 的函数声明'==================================================Public Function DBSQLStr(DBTableName() As String, Searchtype As SeekType, DBField() As String, DBFieldVal() As Variant) As StringDim DBTCount As Long '用于存储数据库DBName的数据表的 DBTableName数量Dim DBFCount As Long '用于存储数据库DBName 查询字段 DBField的数量Dim DBFValCount As Long '用于存储数据库 查询字段的值的数组定义Dim lngDBT As LongDim lngDBF As LongDim lngDBFV As LongDBTCount = UBound(DBTableName())DBFCount = UBound(DBField())DBFValCount = UBound(DBFieldVal())If DBFCount <> DBFValCount ThenDBSQLStr = vbNullElseEnd IfEnd Function

阅读(12128) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册