在做数据库程序时不妨会用到ODBC来做数据连接,但每客户配置ODBC显得相当麻烦,大家也知道可以通过修改注册表来建立ODBC数据源,但我在做设置好服务端参数:
1.数据源的名称
2.服务器地址
3.默认的数据库
4.连接的用户及密码在Delphi中该用什么方式来测试此ODBC数据源是否真的连接成功呢?以此来做一个像Windows中的ODBC数据源的测试哪种,成功则弹出"测试成功"
最好能给付点源码,问题解决就结贴且给出主要回答人。
1.数据源的名称
2.服务器地址
3.默认的数据库
4.连接的用户及密码在Delphi中该用什么方式来测试此ODBC数据源是否真的连接成功呢?以此来做一个像Windows中的ODBC数据源的测试哪种,成功则弹出"测试成功"
最好能给付点源码,问题解决就结贴且给出主要回答人。
另:delphi 只要用
try
xxxx.open;
except 来测试是否真的连接成功就行了。
然后判断connected属性
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ADODB, Db, Registry, Midas, DBTables, Grids, DBGrids;type
TForm1 = class(TForm)
Button1: TButton;
OpenDialog1: TOpenDialog;
Database1: TDatabase;
Query1: TQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
procedure Button1Click(Sender: TObject);
procedure ADOConnection1Login(Sender: TObject; Username,
Password: String);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
Function ReadODBCDriver(AName: String):String;
Function CreateMsAccess(AName: String; APath: String; ADriver:String):Boolean;
implementation{$R *.DFM}//***************************************************
//目的:读取驱动程序位置
//参数:AName--要读取的数据库驱动类型的标志(自己可以任意定制)
//***************************************************
Function ReadODBCDriver(AName: String):String;
var
registerTemp: TRegistry;
s:string;
begin registerTemp:=TRegistry.Create;
if AName='Access' then
begin
with registerTemp do
begin
RootKey:=HKEY_LOCAL_MACHINE;
if OpenKey('Software\ODBC\ODBCINST.INI\Microsoft Access Driver (*.mdb)',True) then
begin
s:=ReadString('Driver');
ReadODBCDriver:=ReadString('Driver');
CloseKey;
Free;
Exit;
end;
end;
end;
registerTemp.Free;
ReadODBCDriver:=''; end;//****************************************************
//目的:建立数据库驱动程序并配置
//参数:AName--要建立的ODBC数据库别名
// APath--要连接的数据库路径名称
// ADriver--ODBC驱动名称,由系统获取
//****************************************************
Function CreateMsAccess(AName: String; APath: String; ADriver: String):Boolean;
var
registerTemp:TRegistry;
bData:array[0..0] of byte;
begin if ADriver='' then
begin
//ShowMessage('读取ODBC驱动程序失败,请重新安装ODBC!');
CreateMsAccess:=False;
Exit;
end;
registerTemp:=TRegistry.Create;
CreateMsAccess:=True;
with registerTemp do
begin
RootKey:=HKEY_LOCAL_MACHINE;
if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then
begin
//注册一个DSN名称--AName
WriteString(AName,'Microsoft Access Driver (*.mdb)');
end
else
begin
CreateMsAccess:=False;
Exit;
end;
CloseKey;
//写入DSN配置信息
if OpenKey('Software\ODBC\ODBC.INI\'+AName,True) then
begin
//数据库目录,连接你的数据库
WriteString('DBQ',APath);
//数据源描述 --任意修改??????????
WriteString('Description','Nsky Access DataBase'); //驱动程序DLL文件
WriteString('Driver',ADriver); //驱动程序标志
WriteInteger('DriverId',25); //Filter依据
WriteString('FIL','Ms Access;'); //支持的事务操作数目
WriteInteger('SafeTransaction',0); //用户名称
WriteString('UID',''); //用户密码--可以修改定制??????????
WriteString('PWD','nsky');
bData[0]:=0;
//非独占方式
WriteBinaryData('Exclusive',bData,1); //非只读方式
WriteBinaryData('ReadOnly',bData,1);
end
else
begin
CreateMsAccess:=False;
Exit;
end;
CloseKey;
//写入DSN数据库引擎配置信息
if OpenKey('Software\ODBC\ODBC.INI\'+AName+'\Engines\Jet',True) then
begin
WriteString('ImplicitCommitSync','Yes');
//缓冲区大小
WriteInteger('MaxBufferSize',512); //页超时
WriteInteger('PageTimeout',10); //支持的线程数目
WriteInteger('Threads',3);
WriteString('UserCommitSync','Yes');
end
else
begin
CreateMsAccess:=False;
Exit;
end;
CloseKey;
Free;
end; end;
procedure TForm1.Button1Click(Sender: TObject);
var
FileName:String;
s:string;
begin
s:='select * from tab_answ where A10 like ''11%'' and (E2 = '''' or E2 is null)'+' order by A13 ASC,A1 DESC';
if OpenDialog1.Execute then
begin FileName:=OpenDialog1.FileName;
//创建ODBC
if CreateMsAccess('TemAccess',FileName,ReadODBCDriver('Access')) = False then
begin
ShowMessage('数据库连接错误,请与公司联系!');
Application.Terminate;
end;
//连接ODBC
Database1.Connected:=False;
Database1.AliasName := 'TemAccess';
Database1.DatabaseName := 'TemAccess';
Database1.Connected := True;
Query1.DatabaseName := DataBase1.DatabaseName ;
Query1.RequestLive := True;
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add(s);
Open;
end; if Query1.CanModify = true then
showmessage('ok')
else
showmessage('no');
end;end;