一、增加数据记录:
rs.AddNew '增加一个新行(记录)
rs.fIElds(0)=... '各个字段赋值
......
rs.Update '更新到数据库
1、增加字符型或数值型。
字符型前加Str,数据型加Val,这样转型是为了和数据库匹配。
2、增加日期型字段记录
3、增加图文混排记录。
实际上就是用二进制办法。应用stream对象
写进记录: stream.loadfromfile
rs.fIElds(X)=stream.read
取出记录: stream.write rs.fIElds(X)
stream.savetofile
二、修改记录
步骤: 定位,定位到要修改的记录上
修改,修改定位记录上的字段值
更新,将修改值更新到数据库中。
基本上与新增一致,只是少了一个新增空行(AddNew)
1、修改字符型或数据值,与前面类同
2、修改日期型数据值
con.Open rs.Open "select * from 图书销售员 where 员工号='" & Text1(0) & "'",con,adOpenKeyset,adLockOptimistic '按员工号查询 For i = 0 To 1 '设置字段内容 rs.FIElds(i) = Trim(Text1(i).Text) Next i rs.FIElds(2) = DTPicker1.Value rs.Update '保存
3、修改图片值
con.Open rs.Open "select * from 图书销售员 where 员工号='" & Text1(0) & "'",adLockOptimistic stm.Open '打开Stream对象 stm.Type = adTypeBinary '类型为二进制流 stm.LoadFromfile .filename '将文件加载至数据流对象 rs.FIElds(0) = Trim(Text1(0).Text) '设置字段内容 rs.FIElds(1) = Trim(Text1(1).Text) rs.FIElds(3) = stm.Read '添加图片到相应的字段 rs.Update '更新
三、删除记录
用SQL语句就OK啦。
不过还有一个用RS(CMD)的Delete方法
con.Open rs.Open "select * from 图书销售员 where 员工号 ='" & Trim(Text1(0).Text) & "' ",adLockOptimistic '按员工编号查询 rs.Delete '删除
四、事务处理
事务就是一批sql一起执行。
cn.BeginTrains ‘事务开始
...........一批sql
cn.CommitTrans '事务提交(执行)
.......
cn.RollbackTrans '如果异常,事务回滚(就是恢复最初状态)
cn.Open rs.Open "select * from 作者 ",cn,adLockOptimistic '查询生成记录集 cn.BeginTrans rs.AddNew For i = 0 To 4 '设置各个字段内容 rs.FIElds(i) = Trim(Text1(i).Text) Next i rs.Update x = MsgBox("是否添加数据",vbYesNo) 'd出确认对话框 If x = vbYes Then '当按Yes按钮 cn.CommitTrans Else '当按No按钮 cn.RollbackTrans End If
五、查询记录
用得最多的就是查询。有两个,一个是用move,另一个是find
1、move
movenext,movelast,movefirst,moveprevIoUs
这个要注意游标的是否可移动。
2、Find 方法
在 Recordset 中搜索满足指定条件的行。可选择指定搜索方向、起始行和从起始行的偏移量。如果满足条件,当前行的位置将设置在找到的记录上;否则将把当前行位置设置为 Recordset 的结尾(或开始)处。
语法
Find (Criteria,SkipRows,SearchDirection,Start)
参数
Criteria String 值,包含指定用于搜索的列名、比较 *** 作符和值的语句。
SkipRows 可选。Long 值,其默认值为零,它指定当前行或 Start 书签的行偏移量以开始搜索。
在默认情况下,搜索将从当前行开始。
SearchDirection 可选。SearchDirectionEnum 值,指定搜索应从当前行开始,还是从搜索方向的
下一个有效行开始。如果该值为 adSearchForward,不成功的搜索将在 Recordset
的结尾处停止。如果该值为 adSearchBackward,不成功的搜索将在 Recordset 的开始处停止。
Start 可选。Variant 书签,用于标记搜索的开始位置。
说明
1、在 criteria 中只能指定单列名称。此方法不支持多列搜索。
2、Criteria 中的比较 *** 作符可以是“>”(大于)、“<”(小于)、“=”(等于)、“>=”(大于或等于)、“<=”(小于或等于)、“<>”(不等于)或“like”(模式匹配)。
3、Criteria 中的值可以是字符串、浮点数或者日期。字符串值用单引号或“#”标记(数字号)分隔(如“state = 'WA'”或“state = #WA#”)。日期值用“#”标记(数字号)分隔(如“start_date > #7/22/97#”)并可包括小时、分钟和秒以指示时间戳,但不能包括毫秒,否则将出现错误。
4、如果比较 *** 作符为“like”,可以在字符串值中包含星号 (*) 以查找一次或多次出现的任意字符或子字符串。例如,“state like 'M*'”与 Maine 和 Massachusetts 匹配。您还可以使用前导和后续星号以查找包含在值内的子字符串。例如,“state like '*as*'”与 Alaska、Arkansas 和 Massachusetts 匹配。
星号可以只在条件字符串的结尾使用,也可以在条件字符串的开头和结尾一起使用,如上所示。不能将星号作为前导通配符 ('*str') 或嵌入通配符 ('s*r') 使用。这将引发错误。
注意 如果在调用 Find 前未设置当前行的位置,将发生错误。设置行位置的任何方法(如 MoveFirst)都应在调用 Find 之前调用。
注意 如果调用记录集的 Find 方法,并且记录集的当前位置在最后一个记录上或文件结尾 (EOF),则不能找到任何结果。您需要调用 MoveFirst 方法以将当前位置/游标设置到记录集的开始处。
(1) 字符查询,若是其它类型加上str。(数值查询一样得转换成数值val)
(2)、日期查询(前后加#)
(3) cn.execute查询得出的结果是只读向前的游标
(4)cmd.exectue带参数的执行
Set recordset = command.Execute(RecordsAffected,Parameters,Options )
(5)Filter过滤 (属性,用一个条件表达式赋值给它)
rs.filter=条件表达式(形式如:FIEldname-Operator-Value )
FIEldname 必须为 Recordset 中的有效字段名。如果字段名包含空格,必须用方括号将字段名括起来。
Operator 必须使用的 *** 作符为:<、>、<=、>=、<>、= 或 liKE。
Value 是用于与字段值(如 'Smith'、#8/24/95#、12.345 或 $50.00)进行比较的值。字符串使用单引号而日期使用井号 (#),对于数字,可以使用小数点、
货币符号和科学记数法。如果 Operator 为 liKE,Value 则可使用通配符。只允许使用星号 (*) 和百分号 (%) 通配符,而且必须为字符串的尾字符。
Value 不可为 Null。
AND 和 OR 在级别上没有先后之分。可使用括号将子句分组。但不能象以下示例那样先将由 OR 联接的子句分组,然后将该组用 and 联接到其他子句。
(Lastname = 'Smith' OR Lastname = 'Jones') AND Firstname = 'John'
与之相反,可以构造如下形式的筛选:
(Lastname = 'Smith' AND Firstname = 'John') OR (Lastname = 'Jones' AND Firstname = 'John')
在 liKE 子句中,可在样式的开头和结尾使用通配符(如 Lastname like '*mit*'),或者只在结尾使用通配符(如,Lastname like 'Smit*') 。
============================下面很少用,但很重要=============================
六、获取数据库或表的结构信息。
怎么取得服务器上有多少了数据库?
数据库上有多少表名?
数据库上字段名,主键、等信息?
cn.openschema方法提供了一个方法,它返回的是一个recordset对象,里面包含了对应的信息。注意的是这个recordset是一个只读、静态的游标。
Set recordset = connection.OpenSchema(queryType,Criteria,SchemaID)
queryType:指明结构查询类型(或内容)
Criteria 查询类型对应的参数值,可选。它是一个数组的形式,起到过滤行记录的作用。
1、查看服务器上各数据库:
2、查看服务器上各数据表
3、查看指定数据库上的各数据表。
有两种,一是从上面得出的rs中,逐条记录过滤,二是应用过滤参数进行过滤
过滤中分别指出对应的过滤值,不过滤的用Empty代替。
4、取得指定字段,判断类型和长度
Dim cn As New ADODB.ConnectionDim rs As New ADODB.RecordsetDim s As StringPrivate Sub Command1_Click() cn.Open "ProvIDer=sqlolEDB.1;Password=123;Persist Security Info=True;User ID=sa;Initial Catalog=book;Data Source=ZHENG" Set rs = cn.OpenSchema(adSchematables) '取得所有表 List1.AddItem " " & "表的名称" do while Not rs.EOF() List1.AddItem rs!table_name rs.MoveNext Loop rs.Close cn.CloseEnd SubPrivate Sub List1_Click() cn.ConnectionString = "PProvIDer=sqlolEDB.1;Password=123;Persist Security Info=True;User ID=sa;Initial Catalog=book;Data Source=ZHENG" cn.Open Set rs = cn.OpenSchema(adSchemaColumns) '取得所有列 List2.Clear List2.AddItem "字段的名称" & " " & "字段的类型" & " " & "字段的长度" do while Not rs.EOF If rs!table_name = Trim(List1.Text) Then '过滤,,可以在OpenSchema中加入过滤数组,从而省去这里的判断 If rs!data_type = "2" Then '判断类型 s = "smallint" ElseIf rs!data_type = "3" Then s = "int " ElseIf rs!data_type = "4" Then s = "real" ElseIf rs!data_type = "5" Then s = "float" ElseIf rs!data_type = "6" Then s = "money" ElseIf rs!data_type = "11" Then s = "bit" ElseIf rs!data_type = "12" Then s = "sql_variant" ElseIf rs!data_type = "17" Then s = "tinyint" ElseIf rs!data_type = "20" Then s = "bigint" ElseIf rs!data_type = "72" Then s = "uniqueIDentifIEr" ElseIf rs!data_type = "128" Then s = "varbinary" ElseIf rs!data_type = "129" Then s = "varchar" ElseIf rs!data_type = "131" Then s = "nvarchar" ElseIf rs!data_type = "135" Then s = "datetime" End If List2.AddItem rs!ColUMN_name & Space$(5) & s & Space$(5) & rs!character_maximum_length End If rs.MoveNext Loop rs.Close cn.CloseEnd Sub总结
以上是内存溢出为你收集整理的VB备忘录(21)ADO实例全部内容,希望文章能够帮你解决VB备忘录(21)ADO实例所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)