• (转载)使用ADOConnet.BeginTrans后,出现错误提示:无法在此会话中启动更多的事务?


    Q:

    三层结构,在服务器端使用adoconnection连接到sqlserver2000,然后想在
    datasetprovider的beforupdaterecord中使用语句:
    try
    adoconnection.begintrans; //这一句出错,错误信息如下
    ....
    adoconnection.committrans;
    except
    ....
    end

    错误信息如下:
    无法在此会话中启动更多的事务

    我在启用adoconnection.begintrans前判断adoconnection.InTransaction是false,
    为什么会出现这个错误?

    A:

    只有一种情况会发生搂主的这种现象,即在一个事务未完成时,又启用了另一个事务。即在代码连接时有出现:
    adoconnection.begintrans;
    ....
    adoconnection.begintrans;
    ....
    这种情况下,会发生报错。所以要保证begintrans和committrans或rollbacktrans成对出现,尤其是在try语句中。

    A:DSP 在更新数据时会自动启动事务?!

    A:

    首先你的数据库不支持嵌套事务!
    其次,在单事务情况下:
    try
    ADOConnection.BeginTrans;
    ....
    ADOConnection.CommitTrans;
    except
    ADOConnection.RollbackTrans;
    end;
    必须成套出现。
    最后,可以在开始事务前调用ADOConnection1.InTransaction来判断

    A:

    楼上的“你的数据库不支持嵌套事务“,我不同意这样的说法,SQL Server和Oracle中都是支持嵌套事务的,但在Delphi应用中同样会出现这样的报错,其根本原因并不是数据库引起的,而是在于Delphi本身。只能说Delphi不支持事务嵌套。
    在Delphi中使用事务机制不如在应用服务器端使用好,搂主可以将SQL部分改为存储过程以事务实现会来的简洁而高效。

    A:

    3楼比较靠谱。
    数据库本身支持嵌套事务可数据访问引擎没实现此功能,等于还是没有。
    把业务逻辑在APPSERVER的代码和DATASERVER的SP,VIEW中散布,升级及维护会很麻烦。
    对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理

    A:
    程序不用编写嵌套事务,编程方式的问题

    A:
    那是因为你的上一次事务没有回滚!!!

    A:
    datasetprovider本身自带事务功能了........

    A:
    因为在分布式的远程数据摸板的创建时,是系统默认的方式:为每个客户开启一个独立的线程都共享一个数据连接,所以此时要是有两个或两个以上的客户线程同时启动事务,应用层就会出现“无法在此会话中启动更多的事务”的错误,而客户端会出现:“不能手工或自动在分布式下创建新的连接”

    A:
    如果是datasetprovider本身自带事务功能,那么怎样将这个事备用起来,或者将它屏蔽掉呢。
    其实我在这几天的测试过程中,发现datasetprovider确实自带事务功能了

    A:

    应该转换思路了。
    我找到解决的办法了。
    ADOConnection.BeginTrans;在beforeapplyupdate中使用
    ADOConnection.CommitTrans;在afterapplyupdate
    ADOConnection.RollbackTrans;在applyupdateerr发生错误中使用

  • 相关阅读:
    什么是经验
    Linux驱动开启调试信息
    insecticide|contradictions| at large|delay doing|
    timber|stain|compensate|
    whip|resist|patch|intimate|
    chop|divorce|harsh|mutual|compel|
    crack|erosion|strip|
    stack|session|fuss|anniversary
    abrupt|promising
    nevertheless|magnificent |prosperous|
  • 原文地址:https://www.cnblogs.com/angelbd/p/3373125.html
Copyright © 2020-2023  润新知