最近接手一个改善项目,需要从Access转化到SQL Server 2014,使用原有的ODBC连接方式只能查询,不能更新插入。网上一直找不到解决方案,然后自己测试一下使用ADO方式竟然可以连接了。具体问题还未找到,现在贴出例子代码,希望给自己一个帮助找出真正问题所在。

  1. Private Sub Command1_Click()
  2. On Error GoTo Err
  3. Dim db As Database
  4. Dim Rs As Recordset
  5. Dim Qry As QueryDef
  6. Set db = DBEngine().OpenDatabase("", False, False, _
  7. "ODBC;driver={SQL Server};server=(local);uid=sa;pwd=你的密码;database=数据库")
  8.  
  9. Set Qry = db.CreateQueryDef("")
  10. With Qry
  11. .SQL = "SELECT * from P_STATUS;"
  12. End With
  13.  
  14. Set Rs = Qry.OpenRecordset()
  15. With Rs
  16. Do While Not .EOF
  17. MsgBox !SEQNO, vbOKOnly + vbCritical, "提示"
  18. .MoveNext
  19. Loop
  20. End With
  21.  
  22. 'db.Updatable
  23.  
  24. Dim intA As Integer
  25. intA =
  26. db.Execute "UPDATE P_STATUS SET STATUS = '2'", dbFailOnError '这里出错,不能更新
  27. Debug.Print "To Paris:", db.RecordsAffected
  28. db.Close
  29. Exit Sub
  30. Err:
  31. Print Err.Number
  32. Dim ss As String
  33. ss = Err.Description
  34.  
  35. db.Close
  36. Exit Sub
  37. End Sub
  1. '数据源信息常量
  2. Const conn As String = "driver={SQL Server};server=(local);uid=sa;pwd=你的密码;Database=数据库"
  3. Const CONNECT_LOOP_MAX = '一次执行connect操作,可以访问数据库的次数
  4.  
  5. Private IsConnect As Boolean '标记数据库是否连接
  6.  
  7. Private Connect_Num As Integer '标记执行Connect()函数后访问数据的次数
  8.  
  9. Private cnn As ADODB.Connection '连接数据库的Connect对象
  10.  
  11. Private re As ADODB.Recordset '保存结果集的Recordset对象
  12.  
  13. '连接数据库
  14. Private Sub Connect()
  15.  
  16. '如果连接标记为真,则返回。
  17. If IsConnect = True Then
  18. Exit Sub
  19. End If
  20.  
  21. Set cnn = New ADODB.Connection '关键new用于创建新对象cnn
  22.  
  23. cnn.ConnectionString = conn
  24.  
  25. cnn.Open
  26. '判断连接的状态
  27. If cnn.State <> adStateOpen Then
  28. MsgBox "数据库连接失败"
  29. End
  30. End If
  31.  
  32. '设置连接标识,表示已经连接到数据库
  33. IsConnect = True
  34. End Sub
  35.  
  36. '断开与数据库的连接
  37. Private Sub DisConnect()
  38. Dim rc As Long
  39.  
  40. If IsConnect = False Then
  41. Exit Sub
  42. End If
  43. '关闭连接
  44. cnn.Close
  45. '释放cnn
  46. Set cnn = Nothing
  47. IsConnect = False
  48. End Sub
  49.  
  50. '使用Connect_Num控制数据连接
  51. Public Sub DB_Connect()
  52. Connect_Num = Connect_Num +
  53. Connect
  54. End Sub
  55.  
  56. '使用Connect_Num控制数据断开
  57. Public Sub DB_Disconnect()
  58. If Connect_Num >= CONNECT_LOOP_MAX Then
  59. Connect_Num =
  60. DisConnect
  61. End If
  62. End Sub
  63.  
  64. '强制关闭api方式访问俄的数据库,计数器复位
  65. Public Sub DBapi_Disconnect()
  66. Connect_Num =
  67. DisConnect
  68. End Sub
  69.  
  70. '执行数据库操作语言
  71. 'byval 就是按参数的值传递,再传递过程中,参数不会发生变化(也就是将参数值而不是将地址传递给过程的方式,这就使过程访问发哦变量的副本,过程不可改变变量的值);
  72. '与之对应的是byref,指按参数的地址传值,byref可以省略
  73. Public Sub SQLExt(ByVal TmpSQLstmt As String)
  74.  
  75. On Error GoTo Err:
  76. Dim cmd As New ADODB.Command '创建Command对象cmd
  77.  
  78. DB_Connect '连接数据库
  79.  
  80. Set cmd.ActiveConnection = cnn '设置cmd的ActiveConnect属性,指定与其关联的数据库连接
  81.  
  82. cmd.CommandText = TmpSQLstmt '设置要执行的命令文本
  83.  
  84. 'MsgBox TmpSQLstmt
  85.  
  86. cmd.Execute '执行命令
  87.  
  88. Set cmd = Nothing
  89.  
  90. DB_Disconnect '断开与数据库的连接
  91. Exit Sub
  92.  
  93. Err:
  94. Dim ss As String
  95. ss = Err.Description
  96. Print ss
  97. DB_Disconnect '断开与数据库的连接
  98. Exit Sub
  99.  
  100. End Sub
  101.  
  102. '执行数据库查询语句
  103. Public Function QueryExt(ByVal TmpSQLstmt As String) As ADODB.Recordset
  104.  
  105. Dim rst As New ADODB.Recordset '创建Rescordset对象rst
  106.  
  107. DB_Connect '连接数据库
  108.  
  109. Set rst.ActiveConnection = cnn '设置rstActiveConnection属性,指定与其相关的数据库的连接
  110.  
  111. rst.CursorType = adOpenDynamic '设置游标类型
  112.  
  113. rst.LockType = adLockOptimistic '设置锁定类型
  114.  
  115. rst.Open TmpSQLstmt '打开记录集
  116.  
  117. Set QueryExt = rst '返回记录集
  118.  
  119. End Function
  120.  
  121. Private Sub Command2_Click()
  122. Set re = QueryExt("SELECT * from P_STATUS;")
  123. With re
  124. Do While Not .EOF
  125. MsgBox !SEQNO, vbOKOnly + vbCritical, "提示"
  126. .MoveNext
  127. Loop
  128. End With
  129. Call SQLExt("UPDATE P_STATUS SET STATUS = '8'")
  130. 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. Java Web中资源的访问路径

    在web应用中,以“/”开头的是绝对路径,不以“/”开头的是相对路径.   在服务器端,通常都使用绝对路径.例如web.xml.struts.xml.servlet等的访问路径都是以“/”开始. 服务 ...

  2. oracle表空间查询维护命令大全之二(undo表空间)

    --undo表空间汇总 --查看全部的表空间名字 select name from v$tablespace; --创建新的UNDO表空间,并设置自己主动扩展參数; create undo table ...

  3. iOS 百度地图 小的特点demo

    先上图的样子 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDEyMzIwOA==/font/5a6L5L2T/fontsize/400/fill ...

  4. 嵌入式Linux系统Bootloader启动调试技术(回想)

    嵌入式系统搭建过程中,对于系统平台搭建project师最初的一步一般是移植Bootloader ,当然移植有几个级别,通常最常见的是參考的EVM 的硬件有了改动(如更改了FLASH ,更改了SDRAM ...

  5. windows 下解决 Time_Wait 和 CLOSE_WAIT 方法

    修改Time_Wait参数的方法 (在服务端修改)Windows下在HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Paramet ...

  6. 表达式:使用API创建表达式树(4)DynamicExpression

    DynamicExpression:表示动态操作.这个网上可见的资料少得可怜,但想到MVC和第三方的动态语言能在NET运行.好奇的倒腾了下 先声明两个类(有相同的方法和字段,但不是继承于同一接口的类) ...

  7. Asp.net Mvc4 基于Authorize实现的模块访问权限

    在MVC中,我们可以通过在action或者controller上设置Authorize[Role="xxx"] 的方式来设置用户对action的访问权限.显然,这样并不能满足我们的 ...

  8. VS2010调试时候未响应

    这几天使用vs2010,调试时候经常未响应,等了半天才缓过来,严重影响心情,决定解决这个问题. 搜寻一番,试着关闭VS,重新设置了vs2010的环境(在vs2010命令提示符下,执行devenv.ex ...

  9. JS中escape 方法和C#中的对应

    在项目中遇到js中escape过的json字符串,需要在C#中对应模拟编码,记得原来遇到过这个问题,但是当时没记录下来方案, 于是又搜索了一番,发现别人说的都是HttpUtility.UrlEncod ...

  10. 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 ...