VB备忘录(21)ADO实例

VB备忘录(21)ADO实例,第1张

概述一、增加数据记录:        rs.AddNew   '增加一个新行(记录)        rs.fields(0)=...      '各个字段赋值       ......        rs.Update            '更新到数据库      1、增加字符型或数值型。            字符型前加Str,数据型加Val,这样转型是为了和数据库匹配。             

一、增加数据记录:

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实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1280089.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存