最近接手一个改善项目,需要从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方式操作只能查询,不能更新插入操作解决。的更多相关文章

  1. mysqli 更新&插入操作及事务

    $mysqli = new mysqli('localhost', 'root', '1234', 'shop'); $query1 = " update sw_goods set good ...

  2. LINQ to SQL更新数据库操作(转载)

    使用LINQ to SQL建模Northwind数据库 在这之前一起学过LINQ to SQL设计器的使用,下面就使用如下的数据模型: 当使用LINQ to SQL设计器设计以上定义的五个类(Prod ...

  3. 使用Volley StringRequest Get的方式进行发票查询操作

    //进行发票查询 btnFpSelect.setOnClickListener(btnFpSelectClickListener); private OnClickListener btnFpSele ...

  4. 利用Native Client OLEDB 11 高效率地对SQL SERVER 进行查询和插入操作

    前言: 鄙司原始用的都是ADO来访问数据库,而我现在着手的项目是从我的GPS历史数据库中,取出历时数据的一个接口,一个DLL.用ADO写完之后,测试下来,平均4000条的数据,需要 180 毫秒左右. ...

  5. SearchRequest用于与搜索文档、聚合、定制查询有关的任何操作

    SearchRequest用于与搜索文档.聚合.定制查询有关的任何操作,还提供了在查询结果的基于上,对于匹配的关键词进行突出显示的方法. 1,首先创建搜索请求对象:SearchRequest sear ...

  6. MySQL 多表查询与事务的操作

    表连接查询 什么是多表查询 # 数据准备 # 多表查询的作用 * 比如:我们想查询孙悟空的名字和他所在的部门的名字,则需要使用多表查询 # 如果一条 SQL 语句查询多张表,因为查询结果在多张不同的表 ...

  7. ORA-14551: 无法在查询中执行 DML 操作

    编写了一个oracle函数,函数体内实现一系列数据库的逻辑处理,涉及到数据的增删等操作,返回NCLOB类型. 然后通过查询方式调用函数: SELECT PKG.MY_FUN('A') FROM DUA ...

  8. centos LAMP第四部分mysql操作 忘记root密码 skip-innodb 配置慢查询日志 mysql常用操作 mysql常用操作 mysql备份与恢复 第二十二节课

    centos  LAMP第四部分mysql操作  忘记root密码  skip-innodb 配置慢查询日志 mysql常用操作  mysql常用操作 mysql备份与恢复   第二十二节课 mysq ...

  9. Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终端打印SQL语句,脚本调试)

    Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终 ...

随机推荐

  1. myNote

    源码地址 :http://450640526.ys168.com/ 编辑器是WEBBWOSER制作的 你的Internet Explorer的版本至少要是8.0的否则用不了 还有很多BUG 很多功能没 ...

  2. DM8168 GPIO驱动与測试程序

    本次測试针对GPIO1进行,挑选了GP1[31],引脚的复用默认的就是GPIO 还是老规矩,贴上driver.c,Makefile,test.c: dm8168_gpio.c: #include &l ...

  3. 查询,创建,扩充表空间&&impdp--------表空间大全

    周六晚上还在办公室导入数据. 按schemas导入成功的关键是:导入的环境和源数据环境里面的表空间大小,表空间名字,需要一模一样 (当然,表空间大小创建到和源数据环境里面ues_size大小就可以了) ...

  4. linux诡异的半连接(SYN_RECV)队列长度

    linux诡异的半连接(SYN_RECV)队列长度(一) >>转载请注明来源:飘零的代码 piao2010 ’s blog,谢谢!^_^>>本文链接地址:linux诡异的半连接 ...

  5. 初步掌握MapReduce的架构及原理

    目录 1.MapReduce定义 2.MapReduce来源 3.MapReduce特点 4.MapReduce实例 5.MapReduce编程模型 6.MapReduce 内部逻辑 7.MapRed ...

  6. Java设计模式03:常用设计模式之单例模式(创建型模式)

    1.  Java之单例模式(Singleton Pattern ) 单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实 ...

  7. 一次优化web项目的经历记录(一)

    一次优化web项目的经历记录 这段时间以来的总结与反思 前言:最近很长一段时间没有更新博客了,忙于一堆子项目的开发,严重拖慢了学习与思考的进程.开水倒满了需要提早放下杯子,晚了就会烫手,这段时间以来, ...

  8. 控件AutoCompleteTextView实现动态匹配输入内容的一种输入框

    <AutoCompleteTextView android:layout_width="match_parent" android:layout_height="w ...

  9. HTTP could not register URL http://+:8000/.... Your process does not have access rights to this namespace

    windows 7, Visual Studio 2013 在托管 Windows 服务中承载 WCF 服务时报错: HTTP could not register URL http://+:8000 ...

  10. CoreBluetooth

    Core Bluetooth的基本常识 每个蓝牙4.0设备都是通过服务(Service)和特征(Characteristic)来展示自己的 一个设备必然包含一个或多个服务,每个服务下面又包含若干个特征 ...