我现在遇到这样一个问题:
使用配置文件配置数据库,数据库表的拥有者是系统默认的dbo,配置模块书写如下:
procedure TTSellByPhone.InitDataBase;
var ConStr, Lpathname:string;
    pini:Tinifile;
begin
  with ADOConSellByphone do  //ADO组件
  begin
    connected:=False;
    pini:=Tinifile.Create(ExtractFilePath(ParamStr(0))+'database.ini');//取得INI文件
    ConStr := 'Provider='+Pini.ReadString('Connect','Provider','SQLOLEDB.1');
    ConStr := ConStr+';Initial Catalog=SellByPhone';//数据库名
    ConStr := ConStr+';Data Source='+Pini.ReadString('Connect','Data Source','lile');    ConStr := ConStr+';Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=';
    ConStr := ConStr+ Pini.ReadString('Connect','Workstation ID','lile') +';Use Encryption for Data=False;Tag with column collation when possible=False';     
    Pini.Free;
    Connectionstring := ConStr;
    Try
      Connected:=True;
    except
    end;
  end;
end;在运行时出现用户"administor"登陆失败。
但是如果在数据库中新建一个登陆名,并把表的拥有者改成该登陆名,比如“system”,则可以登陆(在此密码设置成空),代码如下:
procedure TTSellByPhone.InitDataBase;
var ConStr, Lpathname:string;
    pini:Tinifile;
begin
  with ADOConSellByphone do
  begin
    connected:=False;
    pini:=Tinifile.Create(ExtractFilePath(ParamStr(0))+'database.ini');//取得INI文件
    ConStr := 'Provider='+Pini.ReadString('Connect','Provider','SQLOLEDB.1');
    ConStr := ConStr+';Persist Security Info=false;User ID='
            +Pini.ReadString('Connect','User ID','System');
    ConStr := ConStr+';Initial Catalog=SellByPhone';
    ConStr := ConStr+';Data Source='+Pini.ReadString('Connect','Data Source','lile');    ConStr := ConStr+';Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=';
    ConStr := ConStr+ Pini.ReadString('Connect','Workstation ID','lile') +';Use Encryption for Data=False;Tag with column collation when possible=False';     
    Pini.Free;
    Connectionstring := ConStr;
    Try
      Connected:=True;
    except
    end;
  end;
请高手分析指教

解决方案 »

  1.   

    以下是我自己的代码,仅比你少一个Provider参数:
    ...
      if FileExists(ExtractFilePath(ParamStr(0)) + 'WyglData.ini') then
      begin
        FileConf := TIniFile.Create(ExtractFilePath(ParamStr(0))
           + 'DataBase.ini');
        try
          ServerName := FileConf.ReadString('DBConfig','Server','Server');
          DataBaseName := FileConf.ReadString('DBConfig','DataBase','MyDB');
          UserID := FileConf.ReadString('DBConfig','UserName','sa');
          Passwd := FileConf.ReadString('DBConfig','PassWord','');
          AuthIn := FileConf.ReadBool('DBConfig','IntgAudit',True);
          if AuthIn then
             ADOConnection1.ConnectionString :=
                 'Provider=SQLOLEDB.1;Persist Security Info=False;'
                 + 'Integrated Security=SSPI;Initial Catalog='
                 + DataBaseName + ';Data Source=' + ServerName
          else
             ADOConnection1.ConnectionString :=
                 'Provider=SQLOLEDB.1;Persist Security Info=False;'
                 + 'Initial Catalog=' + DataBaseName + ';Data Source='
                 + ServerName  + ';User ID=' + UserID + ';Password=' + Passwd;
          ADOConnection1.Open;
        finally
          FileConf.Free;
        end;
      end;
      

  2.   

    你最好检查一下你的SQL安全认证方式。
    SQL安全认证方式有:Windows认证(不适合于win9x/me),SQL以及混合模式。
    我选择了混合模式。
    另外,如果采用了Windows集成认证方式,如果在Win9x下,还应注意当前用户是否正常登录系统。
      

  3.   

    会不会sqlserver没有允许window nt集成验证
    试试sa行不行