懒惰的程序员:谁给个动态创建ODBC数据源的函数,要通用一点的,拷过来就能用,呵呵~~ rt 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 function SQLConfigDataSource(hwndParent: Integer; fRequest: Integer;lpszDriverString: String; lpszAttributes: String): Integer;stdcall;external 'ODBCCP32.DLL';建立SQLSERVER的ODBC:SQLConfigDataSource(0, ODBC_ADD_SYS_DSN,'SQL Server','DSN=Record_ODBC'+ chr(0) +'Server=(local)'+ chr(0) +'Database=master'+ chr(0) +'Description=DragonPC SQLServer ODBC Source'+ chr(0)); 这个我也没有找到好的方法,以前我通过写注册表的方法,可以把各种类型的odbc信息放到一个odbc中,这样通过读配置文件信息然后在写到注册表中.HKEY_LOCAL_MACHINE\Software\odbc\odbc.ini,你看看就知道了. 我要的就是写注册表的,有没有函数?我以前写过动态创建Access数据源,可惜代码找不到了。 有,我考份例子给你吧:procedure TFrmMain.InstallDb(i: integer);var reg:TRegistry; iniFile:TIniFile; filename,tmps:string;begin fileName:=ExtractFileDir(Application.ExeName)+'\data\sysdb.ini'; reg:=Tregistry.Create; iniFile:=TIniFile.Create(fileName); reg.RootKey:=HKEY_LOCAL_MACHINE; try reg.DeleteKey('\SoftWare\ODBC\Odbc.ini\sysdb'); except end; reg.OpenKey('\SoftWare\ODBC\Odbc.ini\sysdb',true); if (i=1) then //Sql数据库 begin tmps:=iniFile.ReadString('sql服务器','Database','sysdb'); reg.WriteString('Database',tmps); tmps:=iniFile.ReadString('sql服务器','Driver','c:\sql\x86\system\sqlsrv32.dll'); reg.WriteString('Driver',tmps); tmps:=iniFile.ReadString('sql服务器','Lastuser',''); reg.WriteString('Lastuser',tmps); tmps:=iniFile.ReadString('sql服务器','pw','sysdb'); reg.WriteString('pw',tmps); tmps:=iniFile.ReadString('sql服务器','server',''); reg.WriteString('server',tmps); reg.WriteString('dbtype','sql'); end else begin tmps:=iniFile.ReadString('sybase服务器','ApplicationName',''); reg.WriteString('ApplicationName',tmps); tmps:=iniFile.ReadString('sybase服务器','ApplicationUsingThreads','1'); reg.WriteString('ApplicationUsingThreads',tmps); tmps:=iniFile.ReadString('sybase服务器','ArraySize','50'); reg.WriteString('ArraySize',tmps); tmps:=iniFile.ReadString('sybase服务器','Charset',''); reg.WriteString('Charset',tmps); tmps:=iniFile.ReadString('sybase服务器','CursorCacheSize','1'); reg.WriteString('CursorCacheSize',tmps); tmps:=iniFile.ReadString('sybase服务器','Database','sysdb'); reg.WriteString('Database',tmps); tmps:=iniFile.ReadString('sybase服务器','Databases',''); reg.WriteString('Databases',tmps); tmps:=iniFile.ReadString('sybase服务器','DefaultLongDataBuffLen','1024'); reg.WriteString('DefaultLongDataBuffLen',tmps); tmps:=iniFile.ReadString('sybase服务器','Description',''); reg.WriteString('Description',tmps); tmps:=iniFile.ReadString('sybase服务器','DirectoryServiceProvider',''); reg.WriteString('DirectoryServiceProvider',tmps); tmps:=iniFile.ReadString('sybase服务器','Driver','C:\WINNT\system32\SYSYBNT.DLL'); reg.WriteString('Driver',tmps); tmps:=iniFile.ReadString('sybase服务器','EnableQuotedIdentifiers','0'); reg.WriteString('EnableQuotedIdentifiers',tmps); tmps:=iniFile.ReadString('sybase服务器','InitializationString',''); reg.WriteString('InitializationString',tmps); tmps:=iniFile.ReadString('sybase服务器','InterfacesFile',''); reg.WriteString('InterfacesFile',tmps); tmps:=iniFile.ReadString('sybase服务器','Language',''); reg.WriteString('Language',tmps); tmps:=iniFile.ReadString('sybase服务器','lastuser','dbreport'); reg.WriteString('lastuser',tmps); tmps:=iniFile.ReadString('sybase服务器','LogonID','dbreport'); reg.WriteString('LogonID',tmps); tmps:=iniFile.ReadString('sybase服务器','OptimizePrepare','2'); reg.WriteString('OptimizePrepare',tmps); tmps:=iniFile.ReadString('sybase服务器','PacketSize','0'); reg.WriteString('PacketSize',tmps); tmps:=iniFile.ReadString('sybase服务器','PasswordEncryption','0'); reg.WriteString('PasswordEncryption',tmps); tmps:=iniFile.ReadString('sybase服务器','pw','tianjin'); reg.WriteString('pw',tmps); tmps:=iniFile.ReadString('sybase服务器','RaiseerrorPositionBehavior','0'); reg.WriteString('RaiseerrorPositionBehavior',tmps); tmps:=iniFile.ReadString('sybase服务器','SecurityServiceProvider',''); reg.WriteString('SecurityServiceProvider',tmps); tmps:=iniFile.ReadString('sybase服务器','SelectMethod','1'); reg.WriteString('SelectMethod',tmps); tmps:=iniFile.ReadString('sybase服务器','ServerName','tjs3'); reg.WriteString('ServerName',tmps); tmps:=iniFile.ReadString('sybase服务器','Servers',''); reg.WriteString('Servers',tmps); tmps:=iniFile.ReadString('sybase服务器','WorkStationID',''); reg.WriteString('WorkStationID',tmps); reg.WriteString('dbtype','sysdb'); end; reg.CloseKey; reg.OpenKey('\SoftWare\ODBC\Odbc.ini\ODBC Data Sources\',true); if (i=1) then //Sql reg.WriteString('sysdb','SQL Server') else reg.WriteString('sysdb','Sybase System 11'); reg.CloseKey; reg.Destroy; iniFile.Destroy;end;我这个函数实现了sql和sybase数据库的转换,希望对你有点帮助,如果你要加其他类型的数据库的odbc数据源,可以先用odbc工具配一个,得到相关信息. 老大,自己先用windows建立一个,然后看看注册表有什么变化就行了。 l_jia(我爱善柔),老大你敲诈啊!!!l_xiaofeng(≈流水≈不腐≈) 兄的方法最简便,一条语句就搞定了,hoho...const ODBC_ADD_DSN = 1;var SQLConfigDataSource(0, ODBC_ADD_DSN, 'Microsoft Access Driver (*.mdb)', 'DSN=TianCai' + Chr(0) + 'Server=(local)' + Chr(0) + 'DBQ=e:\TianCai.mdb' + Chr(0) + 'Description=Alex'); 晕,又写错了。const ODBC_ADD_DSN = 1;var...begin SQLConfigDataSource(0, ODBC_ADD_DSN, 'Microsoft Access Driver (*.mdb)', 'DSN=TianCai' + Chr(0) + 'Server=(local)' + Chr(0) + 'DBQ=e:\TianCai.mdb' + Chr(0) + 'Description=Alex');... 请问几个类似的的API的区别还有用法 打包软件 再次请教各位前辈,关于动态添加的问题 Fast Report 纵坐标刻度自定义问题 高分求救一凭证报表问题,解决立刻给分!!!! 屏幕操作的问题,急,各位大虾帮帮忙 关于delphi+word的问题?可能有点难! 如何检测某个已知存在文件当前是否处于被某个或某些应用程序打开的状态? 请问一个有关时间显示的问题,快看呀! 如何在Form中平铺Jpg图片? 高手请教,谢谢!多表之间的数据插入问题 这样一个简单的交换控件的name属性也会出错??在线等,当场结贴给分~
HKEY_LOCAL_MACHINE\Software\odbc\odbc.ini,你看看就知道了.
procedure TFrmMain.InstallDb(i: integer);
var
reg:TRegistry;
iniFile:TIniFile;
filename,tmps:string;
begin
fileName:=ExtractFileDir(Application.ExeName)+'\data\sysdb.ini';
reg:=Tregistry.Create;
iniFile:=TIniFile.Create(fileName);
reg.RootKey:=HKEY_LOCAL_MACHINE;
try
reg.DeleteKey('\SoftWare\ODBC\Odbc.ini\sysdb');
except
end;
reg.OpenKey('\SoftWare\ODBC\Odbc.ini\sysdb',true);
if (i=1) then //Sql数据库
begin
tmps:=iniFile.ReadString('sql服务器','Database','sysdb');
reg.WriteString('Database',tmps); tmps:=iniFile.ReadString('sql服务器','Driver','c:\sql\x86\system\sqlsrv32.dll');
reg.WriteString('Driver',tmps); tmps:=iniFile.ReadString('sql服务器','Lastuser','');
reg.WriteString('Lastuser',tmps); tmps:=iniFile.ReadString('sql服务器','pw','sysdb');
reg.WriteString('pw',tmps); tmps:=iniFile.ReadString('sql服务器','server','');
reg.WriteString('server',tmps);
reg.WriteString('dbtype','sql');
end
else
begin
tmps:=iniFile.ReadString('sybase服务器','ApplicationName','');
reg.WriteString('ApplicationName',tmps); tmps:=iniFile.ReadString('sybase服务器','ApplicationUsingThreads','1');
reg.WriteString('ApplicationUsingThreads',tmps); tmps:=iniFile.ReadString('sybase服务器','ArraySize','50');
reg.WriteString('ArraySize',tmps); tmps:=iniFile.ReadString('sybase服务器','Charset','');
reg.WriteString('Charset',tmps); tmps:=iniFile.ReadString('sybase服务器','CursorCacheSize','1');
reg.WriteString('CursorCacheSize',tmps); tmps:=iniFile.ReadString('sybase服务器','Database','sysdb');
reg.WriteString('Database',tmps); tmps:=iniFile.ReadString('sybase服务器','Databases','');
reg.WriteString('Databases',tmps); tmps:=iniFile.ReadString('sybase服务器','DefaultLongDataBuffLen','1024');
reg.WriteString('DefaultLongDataBuffLen',tmps); tmps:=iniFile.ReadString('sybase服务器','Description','');
reg.WriteString('Description',tmps); tmps:=iniFile.ReadString('sybase服务器','DirectoryServiceProvider','');
reg.WriteString('DirectoryServiceProvider',tmps); tmps:=iniFile.ReadString('sybase服务器','Driver','C:\WINNT\system32\SYSYBNT.DLL');
reg.WriteString('Driver',tmps); tmps:=iniFile.ReadString('sybase服务器','EnableQuotedIdentifiers','0');
reg.WriteString('EnableQuotedIdentifiers',tmps); tmps:=iniFile.ReadString('sybase服务器','InitializationString','');
reg.WriteString('InitializationString',tmps); tmps:=iniFile.ReadString('sybase服务器','InterfacesFile','');
reg.WriteString('InterfacesFile',tmps); tmps:=iniFile.ReadString('sybase服务器','Language','');
reg.WriteString('Language',tmps); tmps:=iniFile.ReadString('sybase服务器','lastuser','dbreport');
reg.WriteString('lastuser',tmps); tmps:=iniFile.ReadString('sybase服务器','LogonID','dbreport');
reg.WriteString('LogonID',tmps); tmps:=iniFile.ReadString('sybase服务器','OptimizePrepare','2');
reg.WriteString('OptimizePrepare',tmps); tmps:=iniFile.ReadString('sybase服务器','PacketSize','0');
reg.WriteString('PacketSize',tmps); tmps:=iniFile.ReadString('sybase服务器','PasswordEncryption','0');
reg.WriteString('PasswordEncryption',tmps); tmps:=iniFile.ReadString('sybase服务器','pw','tianjin');
reg.WriteString('pw',tmps); tmps:=iniFile.ReadString('sybase服务器','RaiseerrorPositionBehavior','0');
reg.WriteString('RaiseerrorPositionBehavior',tmps); tmps:=iniFile.ReadString('sybase服务器','SecurityServiceProvider','');
reg.WriteString('SecurityServiceProvider',tmps); tmps:=iniFile.ReadString('sybase服务器','SelectMethod','1');
reg.WriteString('SelectMethod',tmps); tmps:=iniFile.ReadString('sybase服务器','ServerName','tjs3');
reg.WriteString('ServerName',tmps); tmps:=iniFile.ReadString('sybase服务器','Servers','');
reg.WriteString('Servers',tmps); tmps:=iniFile.ReadString('sybase服务器','WorkStationID','');
reg.WriteString('WorkStationID',tmps); reg.WriteString('dbtype','sysdb');
end;
reg.CloseKey; reg.OpenKey('\SoftWare\ODBC\Odbc.ini\ODBC Data Sources\',true);
if (i=1) then //Sql
reg.WriteString('sysdb','SQL Server')
else
reg.WriteString('sysdb','Sybase System 11');
reg.CloseKey;
reg.Destroy;
iniFile.Destroy;
end;
我这个函数实现了sql和sybase数据库的转换,希望对你有点帮助,如果你要加其他类型的数据库的odbc数据源,可以先用odbc工具配一个,得到相关信息.
l_xiaofeng(≈流水≈不腐≈) 兄的方法最简便,一条语句就搞定了,hoho...const
ODBC_ADD_DSN = 1;
var
SQLConfigDataSource(0, ODBC_ADD_DSN, 'Microsoft Access Driver (*.mdb)',
'DSN=TianCai' + Chr(0) +
'Server=(local)' + Chr(0) +
'DBQ=e:\TianCai.mdb' + Chr(0) +
'Description=Alex');
const
ODBC_ADD_DSN = 1;
var
...
begin
SQLConfigDataSource(0, ODBC_ADD_DSN, 'Microsoft Access Driver (*.mdb)',
'DSN=TianCai' + Chr(0) +
'Server=(local)' + Chr(0) +
'DBQ=e:\TianCai.mdb' + Chr(0) +
'Description=Alex');
...