测试ODBC数据源的连通性,在线等待,高分相送

rockynmc 2002-12-11 03:11:34
在做数据库程序时不妨会用到ODBC来做数据连接,但每客户配置ODBC显得相当麻烦,大家也知道可以通过修改注册表来建立ODBC数据源,但我在做设置好服务端参数:
1.数据源的名称
2.服务器地址
3.默认的数据库
4.连接的用户及密码

在Delphi中该用什么方式来测试此ODBC数据源是否真的连接成功呢?以此来做一个像Windows中的ODBC数据源的测试哪种,成功则弹出"测试成功"
最好能给付点源码,问题解决就结贴且给出主要回答人。
...全文
101 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mixterQ 2002-12-11
  • 打赏
  • 举报
回复
代码是抄的~
我看出来了!
flyingkiller 2002-12-11
  • 打赏
  • 举报
回复
用try catch
chwdong 2002-12-11
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
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;

jaguarcts 2002-12-11
  • 打赏
  • 举报
回复
用一个数据库控件
然后判断connected属性
ain2000 2002-12-11
  • 打赏
  • 举报
回复
我不通过odbc ,我直接连接oledb
另:delphi 只要用
try
。。。
xxxx.open;
except

来测试是否真的连接成功就行了。

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧