VB备忘录(21)ADO实例
一、增加数据记录: 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) '弹出确认对话框 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 的结尾(或开始)处。
(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 则可使用通配符。只允许使用星号 (*) 和百分号 (%) 通配符,而且必须为字符串的尾字符。 Value 不可为 Null。
============================下面很少用,但很重要=============================
六、获取数据库或表的结构信息。 怎么取得服务器上有多少了数据库? 数据库上有多少表名? 数据库上字段名,主键、等信息? cn.openschema方法提供了一个方法,它返回的是一个recordset对象,里面包含了对应的信息。注意的是这个recordset是一个只读、静态的游标。
Set recordset = connection.OpenSchema(QueryType,Criteria,SchemaID) QueryType:指明结构查询类型(或内容) Criteria 查询类型对应的参数值,可选。它是一个数组的形式,起到过滤行记录的作用。
1、查看服务器上各数据库:
2、查看服务器上各数据表
3、查看指定数据库上的各数据表。 有两种,一是从上面得出的rs中,逐条记录过滤,二是应用过滤参数进行过滤
过滤中分别指出对应的过滤值,不过滤的用Empty代替。
4、取得指定字段,判断类型和长度 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim s As String Private 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.Close End Sub Private 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.Close End Sub (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |