我有个问题想不通...
我有一条SQL语句
insert into [currency](currency_code,currency_name,currency_rate,systemDefault,modified_date) select currency_code,currency_name,currency_rate,systemDefault,modified_date from OPENDATASOURCE('SQLOLEDB','Data Source=192.168.1.100;User ID=sa;Password=abc').Gourmet.dbo.[currency]在查询分析器中运行完全没有问题的
但我回到Delphi中用ADOConnection.execute运行就出现问题了...提示是MSDTC没有开之类的
现在我已经把SQL SERVER 2000 都打了SP3的补丁和MSDTC都开了...防火墙都设好了但在delphi中运行就提示新的错误提示
"New transaction cannot enlist in the specified transaction coordinator"为什么会这样的错误,一般你们是用什么控件在delphi在运行 这条插入语句的?
还有什么方法可以解决我这个问题呢?救命啊!!!!!!!!!!!!

解决方案 »

  1.   

    不明白 
    反正远程调用是很麻烦
    不如你把他做成个存储过程用DELPHI调用
      

  2.   

    winnt\system32\msdtc.exe
    下面是MS里提供的:
    此问题发生的原因在于,没有对 Microsoft 分布式事务处理协调器 (MS DTC) 进行网络访问配置。默认情况下,在运行 Windows Server 2003 的计算机上,新安装的 SQL Server 2000 中的 MS DTC 网络访问设置是禁用的。解决方案
    要解决此问题,请按照下列步骤操作: 1. 单击“开始”,指向“所有程序”,指向“管理工具”,然后单击“组件服务”。 
    2. 在组件服务向导中,展开“组件服务”,然后双击“计算机”。 
    3. 右键单击“我的电脑”,然后单击“属性”。 
    4. 单击“MSDTC”选项卡,然后单击“安全性配置”。 
    5. 在“安全配置”对话框中,单击以选中“网络 DTC 访问”复选框。 
    6. 在“网络 DTC 访问”下,单击“网络事务”。 
    7. 确保“DTC 登录帐户”设置为“NT Authority\NetworkService”。 
    8. 单击“确定”。 
    9. 在消息框中,单击“是”。 
    10. 在“DTC 控制台消息”对话框中,单击“确定”。 
    11. 在“系统属性”对话框中,单击“确定”。 
    12. 重新启动计算机,让这些更改生效。
     
      

  3.   

    6. 在“网络 DTC 访问”下,单击“网络事务”。
    这一句我看不懂
    因为在“网络DTC访问”下没有网络事务
    有很多复选框 不知道哪个要点上要求验证那个需要吗?我刚刚试过好像还有问题不知道是设置不好还是问题仍然存在
      

  4.   

    装了SP4就可以了???
    刚刚我已经重新设了“网络 DTC ”
    好像是可以了但是运行那条语句时等好久
    最后就说"Time Expire"之类的是什么问题漏了?
      

  5.   

    程序连接SQL服务器的用户权限与你登录查询分析器的用户一样吗,是否有连接远程服务器的权限,请用sa帐户试一下;
    不行就换一个方法,在程序中先用SQL取得一个数据库的数据,通过循环插入另一个数据库.
      

  6.   

    为什么我设置好DTC  好像没有了之前的问题
    运行时 等很久最后出现"Timeout Expired"这样的问题呢?
    救命啊!
      

  7.   

    把timeout设的长一点,比如一个小时
      

  8.   

    1、执行SQL命令的Timeout设置长一点
    2、可以先找个记录少的表试下,比如10条记录的表
      

  9.   

    数据量过大,建议不要试图在一条语句当中导入完,而是切分而若干份,如果使用的是手动事务,每一个执行分片都要进行事务启动和提交。否则的话,会因为单个事务过大,占用资源过多,而变得极其缓慢。甚至可能导致失败(如果空间不足的话),不过很可惜的是,在MSSQL当中不支持关闭事务日志,所以必须考虑目标数据库的可用磁盘空间,以及事务日志的上限。
      

  10.   

    我想也要做到starluck这样了吧我试过只是一个只有4条记录的表。都要等很久再出现timeout expired
      

  11.   

    对于SQL Server,可以在检索数据库当中添加一个with (nolock)
      

  12.   

    先安装Sp4补丁,然后运行安装目录下的批处理文件(setup.bat)试试。
      

  13.   

    SP4  是不是要先安装 analysis server 2000?
    不安装行吗?
      

  14.   

    今天也碰到这问题
    查了查CSDN的老帖子 找到点东西
    http://topic.csdn.net/t/20040423/21/3001796.html
    引邹老大原话:
    ----------------------
    --不在同一台电脑上,那可以用下面两种方法:   
        
      --如果经常访问或数据量大,建议用链接服务器   
        
      --创建链接服务器   
      exec   sp_addlinkedserver     'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'   
      exec   sp_addlinkedsrvlogin   'srv_lnk','false',null,'用户名','密码'   
      go   
        
      --查询示例   
      select   *   from   srv_lnk.数据库名.dbo.表名   
        
      --导入示例   
      select   *   into   表   from   srv_lnk.数据库名.dbo.表名   
        
      go   
      --处理完成后删除链接服务器   
      exec   sp_dropserver   'srv_lnk','droplogins'   
      --如果只是临时访问,可以直接用openrowset   
      --查询示例   
      select   *   from   openrowset('sqloled'   
      ,'sql服务器名';'用户名';'密码'   
      ,数据库名.dbo.表名)   
        
        
      --导入示例   
      select   *   into   表   from   openrowset('sqloled'   
      ,'sql服务器名';'用户名';'密码'   
      ,数据库名.dbo.表名)   我在查询分析器内测试建立炼接服务器的第一种方法比第二重要快很多
    530万数据 第一种7分55秒 第二种12分多
    还是建立楼主封成存储过程 怎么说也好维护些 
      

  15.   

    程序连接SQL服务器的用户权限与你登录查询分析器的用户一样吗,是否有连接远程服务器的权限,请用sa帐户试一下; 
    不行就换一个方法,在程序中先用SQL取得一个数据库的数据,通过循
      

  16.   

    用select * into [表名] from database.dbo.表名 where 等等...
    这样就行完成
    这个在查询分析器中执行就行了
      

  17.   

    你吧这个东西写在SQL的存储过程中,然后用Delphi启动SQL里的存储过程