我用ado连接sybase数据库,在调代码时没问题。但直接运行程序就无响应。
后来只执行一个查库语句,发现报的错是
Access violation at address 4DD2F155 in module 'msado15.dll'. Read of address C000000D.
请问应该如何解决啊?
以前用ado连接sql数据库没遇到过这样的问题。

解决方案 »

  1.   

    function ConnectSybase:Boolean;
    var
     sDataSource: string;
     sUser: string;
     sPwd: string;
     i: Integer;
    begin
      Result := False;
      sDataSource := Getinistring('Melinets','DataSource','');
      sUser := GetIniString('Melinets','UserID','');
      sPwd := GetInistring('Melinets','Pwd','');
      vg_sConnectString := 'Provider=MSDataShape.1;Persist Security Info=True;'+'User ID='+sUser+
                     ';Password='+sPwd+';Data Provider=MSDASQL;Data Source='+sDataSource;
      SysDM.ADOConnection1.Connected := False;
      SysDM.ADOConnection1.ConnectionString := vg_sConnectString;
      try
        SysDM.ADOConnection1.Connected := True;
        Result := True;
        for i := 0 to SysDM.ComponentCount - 1 do
          if SysDM.Components[i] is TADOQuery then
          begin
            TADOQuery(SysDM.Components[i]).Connection := SysDM.ADOConnection1;
            TADOQuery(SysDM.Components[i]).Prepared := True;
            TADOQuery(SysDM.Components[i]).CommandTimeout := 100;
          end;
      except
        Result := False;
      end;
    end;这是数据库连接的代码
      

  2.   

    我知道错在哪了
        for i := 0 to SysDM.ComponentCount - 1 do 
          if SysDM.Components[i] is TADOQuery then 
          begin 
            TADOQuery(SysDM.Components[i]).Connection := SysDM.ADOConnection1; 
            TADOQuery(SysDM.Components[i]).Prepared := True; 
            TADOQuery(SysDM.Components[i]).CommandTimeout := 100; 
          end;
    代码里这段屏蔽掉就好了。
    但我不明白为什么。我不想一个一个query加的时候总去写连接。这样的话就省事了。
    我改怎么办呢?