如何在程序中自动注册SQL Server的ODBC?
解决方案 »
- Delphi 2005 -> Failed to initialize the VCL for .NET Form Designer
- 关于截获程序封包的问题
- 打到小日本,支持大罢工(深圳),大去看看
- 所以我,求求你。不要不管我。
- 中秋节快乐!高兴,散分。来者有份。
- 高分题:请问有什么办法用Delphi来实现对QQ中所有在线好友发信息?不会的也请帮忙up一下
- 在DBGrid中如何显示日期型字段中的时间?谢谢。
- 请教高手!!(权限控制问题)
- 请大家说说ado加access的优缺点,比如速度、稳定性、大数据量环境下等等,希望经验指导。
- 关于注册热键的问题!!!!
- 关于ehlib导出文件的一个问题
- 有关调用函数的问题(在线等待)
const
RegODBCDB = 'SoftWare\ODBC\ODBC.INI\';
ODBCINIFile = 'ODBC.ini';
RegAccessDB = 'SoftWare\ODBC\ODBC.INI\MS Access Database';
RegSubAccessDB = 'SoftWare\ODBC\ODBC.INI\MS Access Database\Engines\Jet';
ODBC32bSection = 'ODBC 32 bit Data Sources';
EngSetup = 'SoftWare\ODBC\ODBC.INI\ODBC Data Sources';
WallyAliasName = 'WallyDB';
MDBFile = 'WallyDB.MDB';
var
ODBCIni: TIniFile;
Reg: TRegistry;
vDriver: String;
vImplicitCommitSync, vUserCommitSync: string;
vDriverID, vSafeTransactions, vThreads: integer;
begin
try
Reg := TRegistry.Create;
with Reg do
begin
RootKey := HKEY_CURRENT_USER;
if OpenKey(RegAccessDB, False) then
begin
vDriver := ReadString('Driver');
vDriverID := ReadInteger('DriverId');
vSafeTransactions := ReadInteger('SafeTransactions');
CloseKey;
end
else
Showmessage('OS can''t supporting DataBase type');
if OpenKey(RegSubAccessDB, False) then
begin
vImplicitCommitSync := ReadString('ImplicitCommitSync');
vThreads := ReadInteger('Threads');
vUserCommitSync := ReadString('UserCommitSync');
CloseKey;
end;
end;
finally
Reg.Free;
end;
try
ODBCIni := TIniFile.Create(vOSPath +ODBCINIFile);
with ODBCIni do
begin
WriteString(ODBC32bSection, WallyAliasName, 'Microsoft Access Driver (*.mdb) (32 位元)');
WriteString(WallyAliasName, 'Driver32', vDriver);
end;
finally
ODBCIni.Free;
end;
try
Reg := TRegistry.Create;
with Reg do
begin
RootKey := HKEY_CURRENT_USER;
CreateKey(RegODBCDB +WallyAliasName);
if OpenKey(RegODBCDB +WallyAliasName, False) then
begin
WriteString('DBQ', DBPath+MDBFile);
WriteString('Driver', vDriver);
WriteString('FIL', DBType);
WriteString('UID', vsUID);
WriteString('PWD', vsPWD);
WriteInteger('DriverID', vDriverID);
WriteInteger('SafeTransactions', vSafeTransactions);
CloseKey;
end;
CreateKey(RegODBCDB +WallyAliasName +'\Engines\Jet');
if OpenKey(RegODBCDB +WallyAliasName +'\Engines\Jet', False) then
begin
WriteString('ImplicitCommitSync', vImplicitCommitSync);
WriteString('UserCommitSync', vUserCommitSync);
WriteInteger('MaxBufferSize', 2048);
WriteInteger('PageTimeout', 5);
WriteInteger('Threads', vThreads);
CloseKey;
end;
if OpenKey(EngSetup, False)then
begin
CreateKey(WallyAliasName);
WriteString(WallyAliasName, 'Microsoft Access Driver (*.mdb)');
CloseKey;
end;
end;
finally
Reg.Free;
end;
end;
发信人: cuterat (学习的革命), 信区: VisualBasic
标 题: Re: 如何用程序实现ODBC的连接即自动生成一个数据源?
发信站: BBS 水木清华站 (Wed Feb 24 12:09:21 1999)
我不赞成读写注册表定制 DSN
调用ODBC32 API 比较好
例子:
在模块文件中的API和常数声明:
Public Const ODBC_ADD_DSN = 1
Declare Function SQLConfigDataSource Lib "odbccp32.dll" (ByVal hwndParent As Long, ByVal fRequest As Long, ByVal lpszDriver As String, ByVal lpszAttributes As String) As Boolean
在窗体上加command button:cmdReg
Private Sub cmdReg_Click()
Dim szDriver As String
Dim szAttributes As String
Dim retcode As Boolean
szAttributes = "DSN=my65dsn" & Chr(0) _
& "DESCRIPTION=SQLConfigDSN Sample" & Chr(0) _
& "SERVER=Myserver" & Chr(0) _
& "ADDRESS=192.168.64.67,1433" & Chr(0) _
& "NETWORK=dbmssocn" & Chr(0) _
& "DATABASE=pubs" & Chr(0)
szDriver = "SQL Server" & Chr(0)
retcode = SQLConfigDataSource(Me.HWND, ODBC_ADD_DSN, szDriver, szAttributes)
End Sub
如果参数 lpszAttributes 给出的参数不够完备,会弹出对话窗体。