程序写好了,我写了动态配置odbc的程序,想考到其他机器上用。
但原来在程序调试过程中连接到odbc的adoconnection不用调整吗?
也要动态了吧?
但原来在程序调试过程中连接到odbc的adoconnection不用调整吗?
也要动态了吧?
解决方案 »
- RAD studio 2010 修复包,定制自己的2010精简版
- XPMENU安装到delphi2005后的问题
- Delphi开发Activex控件,ActiveX窗体在网页上调用的时候,模式窗体怎样不在任务栏显示,在线等
- fastreport3如何改变X轴上的LABEL
- 谁给我发一个Turbo Delphi Explorer注册文件?
- 100分问:用程序创建SQL SERVER 数据库的问题!
- 简单问题
- 有谁对ADO的这个方法非常熟悉:ADOConnection1.OpenSchema(),可另加1000分!
- 打印问题!急!!!高手请进。
- 关于文件压缩的一个问题?
- 有谁有treeview自绘(drawitem)的例子,能不能让每个节点的颜色及字体自己设定
- 关于进程,线程的问题,欢迎各路大虾进来发表自己的意见,等待中~~~~~~~~
//目的:读取驱动程序位置
//参数: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;
调试过程中用的是指定的用户DSN啊,那现在要怎么办?把原来adoconnection
指定的connectstring删掉?
ConnectString=Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=sms_Tv;Data Source=zhangyy;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=zhangyy;Use Encryption for Data=False;Tag with column collation when possible=False然后,
ConnectionStringOfDb : String; with TIniFile.Create(GetExePath + 'DB.Dat') do
begin
ConnectionStringOfDb := ReadString('Database', 'ConnectString', '');
end;
得到链接字符串 或用INI文件也可以