本人有一事不明,想问一下大侠,麻烦各位大侠多多帮忙
问题:有一个SQL数据库(已经创建完毕),另外已经创建好一个odbc并已经测试连接数据库成功(假如odbc名称为test),现在想用DELPHI创建一个文件通过此ODBC连接数据库,但要求是打开此文件时首先要求输入odbc名称,在此界面上输入test并按提交后就开始连接数据库,如果连接成功就返回一个成功的Label标签,反之就返回一个失败的Label标签

解决方案 »

  1.   

    但要求是打开此文件时首先要求输入odbc名称,在此界面上输入test并按提交后就开始连接数据库 
    这句话没大看懂什么意思 能再详细点么?
      

  2.   

    意思就是
    用DELPHI做的这个程序运行时,首先会弹出一个文本框,当在此文件框中输入相应的odbc名称(如test)后并按确定按钮,此时就开始连接数据库,并返回对应的结果
    而不是说此程序一运行就会马上连接数据库
      

  3.   

    function TestConnect(const ODBCDataSource, UserName, Password: AnsiString): Boolean;
    var
      con: TADOConnection;
    begin
      Result := false;
      con := TADOConnection.Create(Nil);
      try
        con.ConnectionString := Format('Provider=MSDASQL.1;Password=%s;Persist Security Info=True;User ID=%s;Data Source=%s',[Password, UserName, ODBCDataSource]);
        try
          con.Connected := true;
          Result := true;
        except
        end;
      finally
        con.Free;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      frm: TForm;
      lblODBC, lblUserName, lblPassword: TLabel;
      txtODBC, txtUserName, txtPassword: TEdit;
      btnCancel, btnOk: TButton;
    begin
      while True do begin    frm := TForm.Create(Nil);
        try
          frm.BorderIcons := [biSystemMenu, biMinimize];
          frm.BorderStyle := bsDialog;
          frm.Position := poScreenCenter;
          frm.Width := 236;
          frm.Height := 174;
          frm.Font.Name := '宋体';
          frm.Font.Size := 10;      lblODBC := TLabel.Create(frm);;
          lblODBC.Name := 'lblODBC';
          lblODBC.Caption := 'ODBC名称:';
          lblODBC.Parent := frm;
          lblODBC.Left := 16;
          lblODBC.Top := 11;
          lblODBC.Visible := true;      lblUserName := TLabel.Create(frm);
          lblUserName.Name := 'lblUserName';
          lblUserName.Caption := '  用户名:';
          lblUserName.Parent := frm;
          lblUserName.Left := 16;
          lblUserName.Top := 34;
          lblUserName.Visible := true;      lblPassword := TLabel.Create(frm);
          lblPassword.Name := 'lblPassword';
          lblPassword.Caption := '    密码:';
          lblPassword.Parent := frm;
          lblPassword.Left := 16;
          lblPassword.Top := 58;
          lblPassword.Visible := true;      txtODBC := TEdit.Create(frm);
          txtODBC.Name := 'txtODBC';
          txtODBC.Parent := frm;
          txtODBC.Left := 92;
          txtODBC.Top := 8;
          txtODBC.Visible := true;      txtUserName := TEdit.Create(frm);
          txtUserName.Name := 'txtUserName';
          txtUserName.Parent := frm;
          txtUserName.Left := 92;
          txtUserName.Top := 32;
          txtUserName.Visible := true;      txtPassword := TEdit.Create(frm);
          txtPassword.Name := 'txtPassword';
          txtPassword.Parent := frm;
          txtPassword.Left := 92;
          txtPassword.Top := 56;
          txtPassword.PasswordChar := '*';
          txtPassword.Visible := true;      btnOk := TButton.Create(frm);
          btnOk.Name := 'btnOk';
          btnOk.Parent := frm;
          btnOk.Left := 30;
          btnOk.Top := 96;
          btnOk.Caption := '确定(&O)';
          btnOk.ModalResult := mrOk;
          btnOk.Default := true;
          btnOk.Visible := true;      btnCancel := TButton.Create(frm);
          btnCancel.Name := 'btnCancel';
          btnCancel.Parent := frm;
          btnCancel.Left := 125;
          btnCancel.Top := 96;
          btnCancel.Caption := '取消(&C)';
          btnCancel.ModalResult := mrCancel;
          btnCancel.Cancel := true;
          btnCancel.Visible := true;      if frm.ShowModal <> mrOk then break;      if TestConnect(txtODBC.Text,txtUserName.Text,txtPassword.Text) then begin
            MessageBox(GetActiveWindow,'连接成功!','测试连接', MB_OK or MB_ICONINFORMATION)
          end else  begin
            if MessageBox(GetActiveWindow,'连接失败!','测试连接', MB_RETRYCANCEL or MB_ICONERROR) <> mrRetry then break;
          end;
        finally
          frm.Free;
        end;
      end;
    end;
      

  4.   

    var
      gODBCDataSource, gUserName, gPassword: AnsiString;function TestConnect(const ODBCDataSource, UserName, Password: AnsiString): Boolean;
    var
      con: TADOConnection;
    begin
      Result := false;
      con := TADOConnection.Create(Nil);
      try
        con.ConnectionString := Format('Provider=MSDASQL.1;Password=%s;Persist Security Info=True;User ID=%s;Data Source=%s',[Password, UserName, ODBCDataSource]);
        try
          con.Connected := true;
          Result := true;
        except
        end;
      finally
        con.Free;
      end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      frm: TForm;
      lblODBC, lblUserName, lblPassword: TLabel;
      txtODBC, txtUserName, txtPassword: TEdit;
      btnCancel, btnOk: TButton;
      IsExit: Boolean;
    begin
      IsExit := true;
      while True do begin    frm := TForm.Create(Nil);
        try
          frm.BorderIcons := [biSystemMenu, biMinimize];
          frm.BorderStyle := bsDialog;
          frm.Position := poScreenCenter;
          frm.Width := 236;
          frm.Height := 174;
          frm.Font.Name := '宋体';
          frm.Font.Size := 10;      lblODBC := TLabel.Create(frm);;
          lblODBC.Name := 'lblODBC';
          lblODBC.Caption := 'ODBC名称:';
          lblODBC.Parent := frm;
          lblODBC.Left := 16;
          lblODBC.Top := 11;
          lblODBC.Visible := true;      lblUserName := TLabel.Create(frm);
          lblUserName.Name := 'lblUserName';
          lblUserName.Caption := '  用户名:';
          lblUserName.Parent := frm;
          lblUserName.Left := 16;
          lblUserName.Top := 34;
          lblUserName.Visible := true;      lblPassword := TLabel.Create(frm);
          lblPassword.Name := 'lblPassword';
          lblPassword.Caption := '    密码:';
          lblPassword.Parent := frm;
          lblPassword.Left := 16;
          lblPassword.Top := 58;
          lblPassword.Visible := true;      txtODBC := TEdit.Create(frm);
          txtODBC.Name := 'txtODBC';
          txtODBC.Parent := frm;
          txtODBC.Left := 92;
          txtODBC.Top := 8;
          txtODBC.Visible := true;      txtUserName := TEdit.Create(frm);
          txtUserName.Name := 'txtUserName';
          txtUserName.Parent := frm;
          txtUserName.Left := 92;
          txtUserName.Top := 32;
          txtUserName.Visible := true;      txtPassword := TEdit.Create(frm);
          txtPassword.Name := 'txtPassword';
          txtPassword.Parent := frm;
          txtPassword.Left := 92;
          txtPassword.Top := 56;
          txtPassword.PasswordChar := '*';
          txtPassword.Visible := true;      btnOk := TButton.Create(frm);
          btnOk.Name := 'btnOk';
          btnOk.Parent := frm;
          btnOk.Left := 30;
          btnOk.Top := 96;
          btnOk.Caption := '确定(&O)';
          btnOk.ModalResult := mrOk;
          btnOk.Default := true;
          btnOk.Visible := true;      btnCancel := TButton.Create(frm);
          btnCancel.Name := 'btnCancel';
          btnCancel.Parent := frm;
          btnCancel.Left := 125;
          btnCancel.Top := 96;
          btnCancel.Caption := '取消(&C)';
          btnCancel.ModalResult := mrCancel;
          btnCancel.Cancel := true;
          btnCancel.Visible := true;      if frm.ShowModal <> mrOk then break;      if TestConnect(txtODBC.Text,txtUserName.Text,txtPassword.Text) then begin
            gODBCDataSource := txtODBC.Text;
            gUserName := txtUserName.Text;
            gPassword := txtPassword.Text;        MessageBox(GetActiveWindow,'连接成功!','测试连接', MB_OK or MB_ICONINFORMATION);        IsExit := false;
            break;
          end else  begin
            if MessageBox(GetActiveWindow,'连接失败!','测试连接', MB_RETRYCANCEL or MB_ICONERROR) <> mrRetry then break;
          end;
        finally
          frm.Free;
        end;
      end;
      if IsExit then PostThreadMessage(GetCurrentThreadId, WM_QUIT, 0, 0);
      
    end;
      

  5.   

    ConnectString里改动就行了,里机包括机器名,库,用户,密码! 都可以从EDIT里载入
      

  6.   

    僵老大连按钮创建都代码化了,已经很详细了这样吧
    1、打开Delphi,以D7为例
    2、File,New,Application,新建一个项目,并切换到Unit1代码视图;
    3、从组件面板上选择一个Button按钮控件放到Form1上面。并双击Button1,产生默认的事件处理函数;
    3、Ctrl+A全选代码,Delete删除,将默认产生的代码统统删掉;
    4、将以下这段代码Ctrl+C拷贝进去;
    5、将4楼代码完整拷贝在这段代码下面;
    6、再在代码最后补上一句结束标记 end.
    7、F9执行,OK~
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ADODB, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}