如何在MS Access中查找ADO查询的结果

去那里

MS Access 2019 SQL Server 2017年

VBA代码中是否有任何直接,简单的方法来确定此查询是导致提交还是回滚。

这不是不可解决的,但我正在寻找一种不太复杂的方法。

在MS Access模块​​中:

  Dim SQLDB As Object
  Dim ADOcom As Object
  Dim sql As String

  sql = _
    "BEGIN TRY " & _
    "  BEGIN TRAN " & _
    "    UPDATE MyTable SET MyColumn=100 WHERE AnotherColumn=5 " & _
    "  COMMIT TRAN " & _
    "END TRY " & _
    "" & _
    "BEGIN CATCH " & _
    "  ROLLBACK TRAN " & _
    "END CATCH"
  
  Set SQLDB = CreateObject("ADODB.Connection")
  Set ADOcom = CreateObject("ADODB.Command")
  SQLDB.Open "Driver={SQL Server Native Client 11.0};Server=SQL;Database=MyDatabase;Trusted_Connection=yes;"
  SQLDB.CursorLocation = adUseClient
  Set ADOcom.activeconnection = SQLDB
  With ADOcom
    .CommandText = sql
    .Execute sql

' Code to find out if the .execute resulted in Commit

  End With
  Set ADOcom = Nothing
  SQLDB.Close
End Sub

完成:在此示例中,两个查询从任意MS Access Module发送到任意SQL Server。第一个查询返回期望值,但第二个查询不返回。这两个查询在SSMS中都可以正常工作。第二个查询出了什么问题?

Sub Example()
  Dim SQLDB As Object
  Dim query_1 As String, query_2 As String
  Dim rs As Object
  
  Set SQLDB = CreateObject("ADODB.Connection")
  SQLDB.Open "Driver={SQL Server Native Client 11.0};Server=MySQLserver;Database=MyDatabase;Trusted_Connection=yes;"
  Set rs = CreateObject("ADODB.Recordset")
  Set rs.activeconnection = SQLDB
  
  query_1 = _
    "SELECT 1"
  
  rs.Open query_1
  Debug.Print rs(0) ' Expected 1, got 1.
  rs.Close
  
  query_2 = _
    "DECLARE @Success INT " & _
    "BEGIN TRY " & _
    "  BEGIN TRAN " & _
    "    SELECT 1/0 " & _
    "    SET @Success=1 " & _
    "  COMMIT TRAN " & _
    "END TRY" & _
    " " & _
    "BEGIN CATCH " & _
    "  ROLLBACK TRAN " & _
    "  SET @Success=0 " & _
    "END CATCH " & _
    "SELECT @Success AS [Success]"

  rs.Open query_2
  Debug.Print rs(0) ' Expected 0 but rs is Nothing and got Error 3265
  rs.Close
  
  SQLDB.Close
End Sub
Gotqn

您可以返回一个status值或@variable。例如,

  sql = _
    "BEGIN TRY " & _
    "  BEGIN TRAN " & _
    "    UPDATE MyTable SET MyColumn=100 WHERE AnotherColumn=5 " & _
    "    SELECT 0 AS [ErrorStatus] " & _
    "  COMMIT TRAN " & _
    "END TRY " & _
    "" & _
    "BEGIN CATCH " & _
    "  ROLLBACK TRAN " & _
    "  SELECT 1 AS [ErrorStatus] " & _
    "END CATCH"

您可以在以下代码中使用此结果。在中,CATCH您可以使用THROW来获取原始错误并仍然使事务回滚:

BEGIN CATCH
      ROLLBACK TRAN;
      THROW;
END CATCH

这意味着您需要在vb.code本身中进行try / catch。如果您需要错误详细信息的另一种方法是使用以下功能(在SSMS中执行此功能):

BEGIN TRY  
    -- Generate a divide-by-zero error.  
    SELECT 1/0;  
END TRY  
BEGIN CATCH  
    SELECT  
        ERROR_NUMBER() AS ErrorNumber  
        ,ERROR_SEVERITY() AS ErrorSeverity  
        ,ERROR_STATE() AS ErrorState  
        ,ERROR_PROCEDURE() AS ErrorProcedure  
        ,ERROR_LINE() AS ErrorLine  
        ,ERROR_MESSAGE() AS ErrorMessage;  
END CATCH;  
GO

他们正在返回错误的详细信息。您可以将它们返回或将它们分配给变量,并在以后进行处理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在MS Access中查找字段/列源?

来自分类Dev

如何在 ms access 查询中显示空白字段?

来自分类Dev

如何在 MS Access 中过滤数组

来自分类Dev

Delphi,MS Access,ADO:“对具有参数的查询的查询”无法给出正确的结果

来自分类Dev

Delphi,MS Access,ADO:“对具有参数的查询的查询”无法给出正确的结果

来自分类Dev

如何在Access查询结果中包括空行

来自分类Dev

如何在MS Access中使用DISTINCT?

来自分类Dev

即使MS Access中的联接结果为空,如何返回查询结果?

来自分类Dev

如何在MS Dynamics CRM中查找/查询Reporting Services SQL数据库

来自分类Dev

如何在 MS Visual Studio 和列表框中显示相同的查询结果?

来自分类Dev

如何在MS Azure中调试PHP

来自分类Dev

如何在MS Office中添加VBA?

来自分类Dev

如何在MS Word中嵌入计算

来自分类Dev

如何在ms excel中组合多个IF

来自分类Dev

MS Access:如何在1个查询中向表中添加多行

来自分类Dev

运行查询时,如何在MS Access中获得动画gif?

来自分类Dev

如何在MS-Access 2013查询中对串联字段进行排序

来自分类Dev

如何在MS Access中为可创建查询添加索引?

来自分类Dev

如何在 MS Access 中执行选择或更新查询以获取联赛的位置或排名?

来自分类Dev

如何在 R 中使用 RODBC 在 MS Access 中执行查询?

来自分类Dev

如何在 ms-access 中执行外部 .sql 文件传递查询

来自分类Dev

如何在Java中从InputStream打开MS Access文件?

来自分类Dev

如何在MS Access中动态引用控件名称

来自分类Dev

如何在MS Access中检测数字并拆分?

来自分类Dev

如何在MS Access SQL中编写我的SQL代码?

来自分类Dev

如何在ms Access中搜索并替换为Null值

来自分类Dev

如何在MS Access 2010中从TextBox保存值

来自分类Dev

如何在 MS Access DB 中实现 VLOOKUP 功能?

来自分类Dev

如何在 MS Access Query 中翻译此语句?

Related 相关文章

  1. 1

    如何在MS Access中查找字段/列源?

  2. 2

    如何在 ms access 查询中显示空白字段?

  3. 3

    如何在 MS Access 中过滤数组

  4. 4

    Delphi,MS Access,ADO:“对具有参数的查询的查询”无法给出正确的结果

  5. 5

    Delphi,MS Access,ADO:“对具有参数的查询的查询”无法给出正确的结果

  6. 6

    如何在Access查询结果中包括空行

  7. 7

    如何在MS Access中使用DISTINCT?

  8. 8

    即使MS Access中的联接结果为空,如何返回查询结果?

  9. 9

    如何在MS Dynamics CRM中查找/查询Reporting Services SQL数据库

  10. 10

    如何在 MS Visual Studio 和列表框中显示相同的查询结果?

  11. 11

    如何在MS Azure中调试PHP

  12. 12

    如何在MS Office中添加VBA?

  13. 13

    如何在MS Word中嵌入计算

  14. 14

    如何在ms excel中组合多个IF

  15. 15

    MS Access:如何在1个查询中向表中添加多行

  16. 16

    运行查询时,如何在MS Access中获得动画gif?

  17. 17

    如何在MS-Access 2013查询中对串联字段进行排序

  18. 18

    如何在MS Access中为可创建查询添加索引?

  19. 19

    如何在 MS Access 中执行选择或更新查询以获取联赛的位置或排名?

  20. 20

    如何在 R 中使用 RODBC 在 MS Access 中执行查询?

  21. 21

    如何在 ms-access 中执行外部 .sql 文件传递查询

  22. 22

    如何在Java中从InputStream打开MS Access文件?

  23. 23

    如何在MS Access中动态引用控件名称

  24. 24

    如何在MS Access中检测数字并拆分?

  25. 25

    如何在MS Access SQL中编写我的SQL代码?

  26. 26

    如何在ms Access中搜索并替换为Null值

  27. 27

    如何在MS Access 2010中从TextBox保存值

  28. 28

    如何在 MS Access DB 中实现 VLOOKUP 功能?

  29. 29

    如何在 MS Access Query 中翻译此语句?

热门标签

归档