我做了一个nt服务,用TADOConnection连接数据库,如果在控件的ConnectionString属性添上连接字符串,连接成功。如果在程序中填写则连接失败!为什么?谢谢!在线等......
是不是nt服务程序不允许动态的配置ConnectionString属性。
在程序中是这样写的:.......    adoConn.Close;
    adoConn.LoginPrompt := False;
    adoConn.ConnectionString := 'Provider=SQLOLEDB.1;Password=;Persist Security Info=False;User ID=sa;Initial Catalog=HPMediator;Data Source=LIMENGYAN';    try
        adoConn.Connected := True;
        Result := 0;
        WriteLog('read db ok', 'error_db');
    except
        if adoConn.Connected = False then
            Result := -1
        else
            Result := -3;
        WriteLog('read db error  ' + adoConn.ConnectionString, 'error_db');
    end;.........

解决方案 »

  1.   

    动态捕捉TADOConnection的ConnectionString,看看有什么不同
      

  2.   

    兄兄啊,你怎么把connected置为True就好啦?看一下adoconnection的源代码:
    procedure TCustomConnection.SetConnected(Value: Boolean);
    begin
      if (csReading in ComponentState) and Value then
        FStreamedConnected := True else
      begin
        if Value = GetConnected then Exit;
        if Value then
        begin
          if Assigned(BeforeConnect) then BeforeConnect(Self);
          DoConnect;
          SendConnectEvent(True);
          if Assigned(AfterConnect) then AfterConnect(Self);
        end else
        begin
          if Assigned(BeforeDisconnect) then BeforeDisconnect(Self);
          SendConnectEvent(False);
          DoDisconnect;
          if Assigned(AfterDisconnect) then AfterDisconnect(Self);
        end;
      end;
    end;呵呵,最好的方法还是用open函数来打开。
      

  3.   

    这个问题经常会有人碰到,我的解决办法是升级MS最新MDAC
      

  4.   

    试试将'Persist Security Info=False'改为‘Persist Security Info=True’
      

  5.   

    我也认为是应该使用adoConn.Open方法
      

  6.   

    大哥,给你个方法
    在控件的ConnectionString属性设置连接成功后,用Showmessage()查看一下
    然后动态设置的时候再Showmessage一下动态设置的ConnectionString,看看两次有什么不同如果有,那就最好,你可以照着修改动态的那个了如果相同,那就只有升级MDAC了,看看能不能成功