以前在程序中,用delphi7连接Sqlserver数据库,都是在窗体中 直接拖adoconnection 和 adoquery,并且通过向导直接设置连接属性。现在,我想通过一个 “连接数据库”这个按钮来实现,对数据库的连接:如果能正常连接(IP地址,用户名,密码都对的情况下)则提示: “连接正常...” 
如果连接不正常,比如,IP地址错,登录用户名错或密码错,发生这些异常,则提示: “错误,连接不正常”请问我该如何做?? 急的,刚遇到,请大哥们为我写个完整的,谢谢了。sqlserver服务器登录ip: 192.168.0.1, 用户:sa ,密码:sa ,要操作的数据库名:student谢谢了!

解决方案 »

  1.   

    此贴以前回复过,假如按照ini读取配置信息来确定是否连接正常
    当然下面的配置信息你也可以写死,不过那样并不好var
      myini:tinifile;
      s_s1,s_s2,s_s3:string;
    begin
          myini:=tinifile.Create('.\conn.ini');
          s_s1:=myini.ReadString('Host','Server','');//连接服务器名称或ip地址192.168.0.1
          s_s2:=myini.ReadString('Host','Username','');//数据库用户名 sa
          s_s3:=myini.ReadString('Host','Password','');//数据库用户名的密码 sa
          myini.Free;
      try
          DM1.DB1.connected:=false;
          //动态设置连接字符串
          DM1.DB1.connectionstring:='Provider=SQLOLEDB.1;Password='+s_s3+';Persist Security Info=True;User ID='+s_s2+';Initial Catalog=master;Data Source='+s_s1+';Locale Identifier=2052;Connect Timeout=15;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID='+s_s1;
          DM1.DB1.LoginPrompt:=false;
          DM1.DB1.connected:=true;
          messageboxex(handle,'连接正常....','提示',MB_OK+MB_ICONINFORMATION,0);
      except
          messageboxex(handle,'错误,连接不正常...请检查设置','提示',MB_OK+MB_ICONINFORMATION,0);
      end;
    end;
      

  2.   

    如果不从ini文件中读,如何判断? 
      

  3.   

    使用udl最简单了新建一个文件,改名为conn.udl,ADOCONNECTION.connectionstring:='File Name='+ExtractFilePath(ParamStr(0))+'conn.udl';
      

  4.   

    无论如何配置数据库,程序关键是在
    try
      adoconnection.connected := true;
      showmessage('success');
    except
      showmessage('error');
    end;
      

  5.   

    白写这么多,你没仔细看,用ini只是一个方法,关键是要求的连接的提示问题,如果连接成功,就提示正常;如果连接失败,就提示不正常,还需要什么全的?
      

  6.   

    procedure linkDatabase(ADOConnection:TADOConnection;servername,dbname,username,password:string);
    begin
      try
        ADOConnection.Connected := false;
        ADOConnection.ConnectionString :='Provider=SQLOLEDB.1;Password='+password+';Persist Security Info=True;User ID='+username+';Initial Catalog='+dbname+';Data Source='+servername+';Connect Timeout=30';
        ADOConnection.LoginPrompt :=false;
        ADOConnection.connected:=True;
      except
        messagedlg('数据库联接出错,程序退出.',mtInformation,[mbOk],0);
        application.terminate;
      end;
    end;servername:IP地址或机器名
    dbname:数据库名
    username:用户名
    password:密码
      

  7.   

    把ADOCONED文件,把这个文件加到你的USES里,然后在程序里调用它的EditConnectionString方法就可以了。
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ADOConnection1.Close;
      ADOConnection1.ConnectionString := '默认链接';
      if EditConnectionString(ADOConnection1) then
      begin
        //点击确定后的处理代码`
      end;end;这个方法不错.
      

  8.   


      ADOCONNECTION.connectionstring:='File Name='+ExtractFilePath(ParamStr(0))+'conn.udl';
      TRY
        ADOCONNECTION.CONNECTED:=TRUE;
      EXCEPT
        SHOWMESSAGE('FAILED');
      END;
      

  9.   


    //写入ini,并测试是否连接上
    procedure TDBConnectFrm.SpbntOkClick(Sender: TObject);
    var
      serverName, databaseName, userName, password: string;
    begin
      writeToIni(edtServerName.Text, edtDatabaseName.Text, edtUserName.Text, edtPassword.Text);
      readFromIni(serverName, databaseName, userName, password);
      DMFrm.ADOConnection1.ConnectionString := SADOContStr;
      DMFrm.ADOConnection1.Connected := true;
      if DMFrm.DBConnect() then
      begin
        Application.MessageBox('连接成功!', '提示', mb_iconInformation + mb_defbutton1);
        Connected := True;
        Close;
      end
      else
      begin
        Application.MessageBox('连接失败!', '提示', mb_iconInformation + mb_defbutton1);
      end;
    end;
      

  10.   

    我按以下方法写了:begin try
        adosql.Connected := false;
        adosql.ConnectionString :='Provider=SQLOLEDB.1;Password="infox1eies2sps3was4!";Persist Security Info=True;User ID="sa";Initial Catalog="DB_CustomSMS";Data Source="211.143.225.177";Connect Timeout=30';
        adosql.LoginPrompt :=false;
        adosql.connected:=True;
      except
        messagedlg('数据库联接出错,程序退出.',mtInformation,[mbOk],0);
        application.terminate; 
      end; 
    end;
    如果用户名等什么都对,连接数据库时正常; 如果把ip地址,用户名写错了, 程序不会弹出框说“连接错误”而是直接 回到delphi界面,弹出程序错误框,说什么 sql无法访问。还是不行。 我要的是就是 连接用户名,或密码或ip错时,弹出 “连接错误”的框。还是不行,请各位更正,谢
      

  11.   

    你这是调试环境下测试的,不用delphi的调试环境,直接双击可执行文件运行,就会按照你的意思出来了
      

  12.   

    也就是说,你的异常判断
    try ...except...end
    如果try后面有异常
    在delphi环境下会直接弹出异常错误
    而直接执行生成的exe文件
    就会在try异常后执行except里面的东东
    赶紧结贴!!!!
      

  13.   

    改成如下的,还是错。当用户名什么的都对时,会弹出框说,连接正常,但,如果ip地址错或用户错,还是 不会弹出框告诉我: 连接错。 而是直接 回到 delphi7,抛出错误信息。什么 connection有问题procedure TForm1.ToolButton1Click(Sender: TObject);begin  servername := '211.143.225.177';
      dbname :='DB_CustomSMS';
      username := 'sa';
      password :='infox1eies2sps3was4!' ;
      try
        adosql.Connected := false;
        adosql.ConnectionString :='Provider=SQLOLEDB.1;Password='+password+';Persist Security Info=True;User ID='+username+';Initial Catalog='+dbname+';Data Source='+servername+';Connect Timeout=30';
        adosql.LoginPrompt :=false;
        adosql.Connected:=True;
        messageboxex(handle,'连接正常....','提示',MB_OK+MB_ICONINFORMATION,0);  except
       // messagedlg('数据库联接出错,程序退出.',mtInformation,[mbOk],0);
        showmessage('error');     application.terminate;
      end; 
    end; 
      

  14.   

    在编译调试环境下,会弹出来一些系统的错误,你最后要双击生成的EXE文件,就会按照你的期望出错误提示了