filename:=ExtractFilePath(paramstr(0))+'serverip.ini';
  Fini:=Tinifile.Create(filename);
  with Fini do
  try
   try
    sqlstring:=Fini.ReadString('server','ip','');
   except
    sqlstring:='127.0.0.1';
   end;
  finally
   Fini.Destroy;
  end;
 if sqlstring='' then
  begin
   application.MessageBox('数据库配置不正确','提示',mb_ok);
   application.Terminate;
  end;
  adocon.Close;
  adocon.LoginPrompt:=false;
  constring:='Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;'
              +'Initial Catalog=building;Data Source='''+sqlstring+'''';
  adocon.ConnectionString:=constring; try
  showmessage(adocon.ConnectionString);
  adocon.Connected:=true;
  application.MessageBox('数据库连接正确,请登陆!','提示',mb_ok);
     frm_login.showmodal;
 except
  application.MessageBox('数据库连接失败,请重新连接!','提示',mb_ok);
   if not assigned(frm_setip) then
   frm_setip.showmodal;
 end;从INI中读取服务器IP,然后连接,代码应该没错误吧。
但是在局域网怎么就连不上呢,是不是因为360或者什么其他防病毒软件的原因?

解决方案 »

  1.   

     if not assigned(frm_setip) then  //去掉,忘删除了。
      

  2.   

    你直接建一個 .UDL 的文件用上面的參數測試下看能不能連接上??
    還有我看你的異常IP用 127.0.0.1 , 調試下。這個地方有沒有進入到異常裏面。 在局域網裏一般就是1433端口被防火牆攔了這些問題。
      

  3.   

    如果是SQL SERVER 2000的话,最好是安装SQL SERVER SP3a 以上的补丁,不然是连接不上的。
      

  4.   

    你可以用ODBC检测一下是否可以连接,连接不上的原因很多,防火墙,路由器设置等都有可能,sql server的默认端口是1433
      

  5.   

    你先 Telnet ip : 1433  看成不成功
      

  6.   

    示例
    const strINIname = 'db.ini';//INI文件的文件名,根据具体情况修改
      iniParam : TINIFile;
      strLocal : String;procedure readParam(out server:String;out database:string;out user:string;out password:string);
      begin
        //从配置文件中读取数据库连接参数
        server := iniParam.ReadString('dbParam','Data Source','');
        database := iniParam.ReadString('dbParam','Initial Catalog','');
        user := iniParam.ReadString('dbParam','User ID','');
        password := iniParam.ReadString('dbParam','Password','');
      end;  procedure writeParam(server:string;database:string;user:string;password:string);
      begin
        //将数据库连接参数写入配置文件
        iniParam.WriteString('dbParam','Data Source',server);
        iniParam.WriteString('dbParam','Initial Catalog',database);
        iniParam.WriteString('dbParam','User ID',user);
        iniParam.WriteString('dbParam','Password',password);
      end;  function getConnStr:String;
      var
        server,database,user,password : String;
      begin
        //生成数据库连接串
        readParam(server,database,user,password);
        result := 'Provider=SQLOLEDB.1;Password=' + password + ';Persist Security Info=True;User ID=' + user + ';Initial Catalog=' + database + ';Data Source=' + server;
      end;initialization
      getDir(0,strLocal);
      iniParam := TINIFile.Create(strLocal + '\' + strINIname);
    finalization
      iniParam.Free;
    end.
      

  7.   


    局域網一般不會。但在廣域網經常會這樣,所以一般需要打上。 現SQL2000已經有SP4,翠防萬一,你可以下載個SP4打上。建議你先用 TELNET 先測下端口
      

  8.   

    你的网络环境如果是域环境 并且SQL server数据库服务器是域成员服务器就没什么问题如果是工作组网络,则需要在SQL的这个服务器上建立和客户机上一样的账户,并且客户机可以访问到SQLserver 服务器。其他的就和本机一样的了.
      

  9.   


     不是的,我的意思你必須檢查下MSSQL的使用端口,通常沒有自己修改的話,都是使用的: 1433端口,你這種情況下必須先檢查下端口是不是被封了 你可以嘗試:  Telnet  IP : 1433    // 把IP換成你的服務器名或IP來測試,如果能進行 telnet  的 console  下就說明,端口是好的,反之就是端口被封了。
      當然你也可以先采用。 建一個後綴名為  .udl  的文件,然後直接連接下測試看行不行。
      

  10.   

    那你直接建一個UDL文件試下。
      

  11.   

    我一般是这样连接数据库的
    var
      myinifile:TInifile;
      filename:string;
      server,uid,sqlPassword,databasename,s:string;
    begin
    inherited;
    Filename:=ExtractFilePath(Paramstr(0))+'mini.ini';
    myinifile:=Tinifile.Create(filename);
    databasename:=myinifile.readstring('配置参数','databasename','');
    server:=myinifile.readstring('配置参数','servername','');
    uid:=myinifile.readstring('配置参数','uid','');
    sqlPassword:=myinifile.readstring('配置参数','sqlPassword','');
      conn.Close;
      s:='';
      s:=s+'Provider=SQLOLEDB.1;';
      s:=s+'Password='+ sqlPassword +';';
      s:=S+'Persist Security Info=True;';
      s:=S+'User ID='+ UID +';';
      s:=S+'Initial Catalog='+ dataBaseName +';';
      s:=S+'Data Source='+ server + ';';   conn.ConnectionString:=s;
       conn.LoginPrompt:=false;
       conn.Connected:=true;
      

  12.   

    不知道你是不是windows2000系统连接xp系统?
    应该在XP系统的管理,本地安全策略中的用户权限分配中
    有个拒绝从网络访问这台计算机,删除里面的所有用户试试!
      

  13.   


    ping通并不代表你得sqlserver就能连上,这个问题不好说清楚,视具体的环境而定