本人有一事不明,想问一下大侠,麻烦各位大侠多多帮忙
问题:有一个SQL数据库(已经创建完毕),另外已经创建好一个odbc并已经测试连接数据库成功(假如odbc名称为test),现在想用DELPHI创建一个文件通过此ODBC连接数据库,但要求是打开此文件时首先要求输入odbc名称,在此界面上输入test并按提交后就开始连接数据库,如果连接成功就返回一个成功的Label标签,反之就返回一个失败的Label标签
问题:有一个SQL数据库(已经创建完毕),另外已经创建好一个odbc并已经测试连接数据库成功(假如odbc名称为test),现在想用DELPHI创建一个文件通过此ODBC连接数据库,但要求是打开此文件时首先要求输入odbc名称,在此界面上输入test并按提交后就开始连接数据库,如果连接成功就返回一个成功的Label标签,反之就返回一个失败的Label标签
这句话没大看懂什么意思 能再详细点么?
用DELPHI做的这个程序运行时,首先会弹出一个文本框,当在此文件框中输入相应的odbc名称(如test)后并按确定按钮,此时就开始连接数据库,并返回对应的结果
而不是说此程序一运行就会马上连接数据库
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;
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;
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}