【VB】操作ODBC-DAO方式操作只能查询,不能更新插入操作解决。
最近接手一个改善项目,需要从Access转化到SQL Server 2014,使用原有的ODBC连接方式只能查询,不能更新插入。网上一直找不到解决方案,然后自己测试一下使用ADO方式竟然可以连接了。具体问题还未找到,现在贴出例子代码,希望给自己一个帮助找出真正问题所在。
- Private Sub Command1_Click()
- On Error GoTo Err
- Dim db As Database
- Dim Rs As Recordset
- Dim Qry As QueryDef
- Set db = DBEngine().OpenDatabase("", False, False, _
- "ODBC;driver={SQL Server};server=(local);uid=sa;pwd=你的密码;database=数据库")
- Set Qry = db.CreateQueryDef("")
- With Qry
- .SQL = "SELECT * from P_STATUS;"
- End With
- Set Rs = Qry.OpenRecordset()
- With Rs
- Do While Not .EOF
- MsgBox !SEQNO, vbOKOnly + vbCritical, "提示"
- .MoveNext
- Loop
- End With
- 'db.Updatable
- Dim intA As Integer
- intA =
- db.Execute "UPDATE P_STATUS SET STATUS = '2'", dbFailOnError '这里出错,不能更新
- Debug.Print "To Paris:", db.RecordsAffected
- db.Close
- Exit Sub
- Err:
- Print Err.Number
- Dim ss As String
- ss = Err.Description
- db.Close
- Exit Sub
- End Sub
- '数据源信息常量
- Const conn As String = "driver={SQL Server};server=(local);uid=sa;pwd=你的密码;Database=数据库"
- Const CONNECT_LOOP_MAX = '一次执行connect操作,可以访问数据库的次数
- Private IsConnect As Boolean '标记数据库是否连接
- Private Connect_Num As Integer '标记执行Connect()函数后访问数据的次数
- Private cnn As ADODB.Connection '连接数据库的Connect对象
- Private re As ADODB.Recordset '保存结果集的Recordset对象
- '连接数据库
- Private Sub Connect()
- '如果连接标记为真,则返回。
- If IsConnect = True Then
- Exit Sub
- End If
- Set cnn = New ADODB.Connection '关键new用于创建新对象cnn
- cnn.ConnectionString = conn
- cnn.Open
- '判断连接的状态
- If cnn.State <> adStateOpen Then
- MsgBox "数据库连接失败"
- End
- End If
- '设置连接标识,表示已经连接到数据库
- IsConnect = True
- End Sub
- '断开与数据库的连接
- Private Sub DisConnect()
- Dim rc As Long
- If IsConnect = False Then
- Exit Sub
- End If
- '关闭连接
- cnn.Close
- '释放cnn
- Set cnn = Nothing
- IsConnect = False
- End Sub
- '使用Connect_Num控制数据连接
- Public Sub DB_Connect()
- Connect_Num = Connect_Num +
- Connect
- End Sub
- '使用Connect_Num控制数据断开
- Public Sub DB_Disconnect()
- If Connect_Num >= CONNECT_LOOP_MAX Then
- Connect_Num =
- DisConnect
- End If
- End Sub
- '强制关闭api方式访问俄的数据库,计数器复位
- Public Sub DBapi_Disconnect()
- Connect_Num =
- DisConnect
- End Sub
- '执行数据库操作语言
- 'byval 就是按参数的值传递,再传递过程中,参数不会发生变化(也就是将参数值而不是将地址传递给过程的方式,这就使过程访问发哦变量的副本,过程不可改变变量的值);
- '与之对应的是byref,指按参数的地址传值,byref可以省略
- Public Sub SQLExt(ByVal TmpSQLstmt As String)
- On Error GoTo Err:
- Dim cmd As New ADODB.Command '创建Command对象cmd
- DB_Connect '连接数据库
- Set cmd.ActiveConnection = cnn '设置cmd的ActiveConnect属性,指定与其关联的数据库连接
- cmd.CommandText = TmpSQLstmt '设置要执行的命令文本
- 'MsgBox TmpSQLstmt
- cmd.Execute '执行命令
- Set cmd = Nothing
- DB_Disconnect '断开与数据库的连接
- Exit Sub
- Err:
- Dim ss As String
- ss = Err.Description
- Print ss
- DB_Disconnect '断开与数据库的连接
- Exit Sub
- End Sub
- '执行数据库查询语句
- Public Function QueryExt(ByVal TmpSQLstmt As String) As ADODB.Recordset
- Dim rst As New ADODB.Recordset '创建Rescordset对象rst
- DB_Connect '连接数据库
- Set rst.ActiveConnection = cnn '设置rst的ActiveConnection属性,指定与其相关的数据库的连接
- rst.CursorType = adOpenDynamic '设置游标类型
- rst.LockType = adLockOptimistic '设置锁定类型
- rst.Open TmpSQLstmt '打开记录集
- Set QueryExt = rst '返回记录集
- End Function
- Private Sub Command2_Click()
- Set re = QueryExt("SELECT * from P_STATUS;")
- With re
- Do While Not .EOF
- MsgBox !SEQNO, vbOKOnly + vbCritical, "提示"
- .MoveNext
- Loop
- End With
- Call SQLExt("UPDATE P_STATUS SET STATUS = '8'")
- End Sub
【VB】操作ODBC-DAO方式操作只能查询,不能更新插入操作解决。的更多相关文章
- mysqli 更新&插入操作及事务
$mysqli = new mysqli('localhost', 'root', '1234', 'shop'); $query1 = " update sw_goods set good ...
- LINQ to SQL更新数据库操作(转载)
使用LINQ to SQL建模Northwind数据库 在这之前一起学过LINQ to SQL设计器的使用,下面就使用如下的数据模型: 当使用LINQ to SQL设计器设计以上定义的五个类(Prod ...
- 使用Volley StringRequest Get的方式进行发票查询操作
//进行发票查询 btnFpSelect.setOnClickListener(btnFpSelectClickListener); private OnClickListener btnFpSele ...
- 利用Native Client OLEDB 11 高效率地对SQL SERVER 进行查询和插入操作
前言: 鄙司原始用的都是ADO来访问数据库,而我现在着手的项目是从我的GPS历史数据库中,取出历时数据的一个接口,一个DLL.用ADO写完之后,测试下来,平均4000条的数据,需要 180 毫秒左右. ...
- SearchRequest用于与搜索文档、聚合、定制查询有关的任何操作
SearchRequest用于与搜索文档.聚合.定制查询有关的任何操作,还提供了在查询结果的基于上,对于匹配的关键词进行突出显示的方法. 1,首先创建搜索请求对象:SearchRequest sear ...
- MySQL 多表查询与事务的操作
表连接查询 什么是多表查询 # 数据准备 # 多表查询的作用 * 比如:我们想查询孙悟空的名字和他所在的部门的名字,则需要使用多表查询 # 如果一条 SQL 语句查询多张表,因为查询结果在多张不同的表 ...
- ORA-14551: 无法在查询中执行 DML 操作
编写了一个oracle函数,函数体内实现一系列数据库的逻辑处理,涉及到数据的增删等操作,返回NCLOB类型. 然后通过查询方式调用函数: SELECT PKG.MY_FUN('A') FROM DUA ...
- centos LAMP第四部分mysql操作 忘记root密码 skip-innodb 配置慢查询日志 mysql常用操作 mysql常用操作 mysql备份与恢复 第二十二节课
centos LAMP第四部分mysql操作 忘记root密码 skip-innodb 配置慢查询日志 mysql常用操作 mysql常用操作 mysql备份与恢复 第二十二节课 mysq ...
- Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终端打印SQL语句,脚本调试)
Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终 ...
随机推荐
- Java Web中资源的访问路径
在web应用中,以“/”开头的是绝对路径,不以“/”开头的是相对路径. 在服务器端,通常都使用绝对路径.例如web.xml.struts.xml.servlet等的访问路径都是以“/”开始. 服务 ...
- oracle表空间查询维护命令大全之二(undo表空间)
--undo表空间汇总 --查看全部的表空间名字 select name from v$tablespace; --创建新的UNDO表空间,并设置自己主动扩展參数; create undo table ...
- iOS 百度地图 小的特点demo
先上图的样子 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDEyMzIwOA==/font/5a6L5L2T/fontsize/400/fill ...
- 嵌入式Linux系统Bootloader启动调试技术(回想)
嵌入式系统搭建过程中,对于系统平台搭建project师最初的一步一般是移植Bootloader ,当然移植有几个级别,通常最常见的是參考的EVM 的硬件有了改动(如更改了FLASH ,更改了SDRAM ...
- windows 下解决 Time_Wait 和 CLOSE_WAIT 方法
修改Time_Wait参数的方法 (在服务端修改)Windows下在HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Paramet ...
- 表达式:使用API创建表达式树(4)DynamicExpression
DynamicExpression:表示动态操作.这个网上可见的资料少得可怜,但想到MVC和第三方的动态语言能在NET运行.好奇的倒腾了下 先声明两个类(有相同的方法和字段,但不是继承于同一接口的类) ...
- Asp.net Mvc4 基于Authorize实现的模块访问权限
在MVC中,我们可以通过在action或者controller上设置Authorize[Role="xxx"] 的方式来设置用户对action的访问权限.显然,这样并不能满足我们的 ...
- VS2010调试时候未响应
这几天使用vs2010,调试时候经常未响应,等了半天才缓过来,严重影响心情,决定解决这个问题. 搜寻一番,试着关闭VS,重新设置了vs2010的环境(在vs2010命令提示符下,执行devenv.ex ...
- JS中escape 方法和C#中的对应
在项目中遇到js中escape过的json字符串,需要在C#中对应模拟编码,记得原来遇到过这个问题,但是当时没记录下来方案, 于是又搜索了一番,发现别人说的都是HttpUtility.UrlEncod ...
- mysql workbench 建表时 PK,NN,UQ,BIN,UN,ZF,AI解释
mysql workbench 建表时 - PK: primary key (column is part of a pk) 主键 - NN: not null (column is nullable ...