如何在程序中自动注册SQL Server的ODBC?
解决方案 »
- ExtCtrls这是什么控件,控件主要是做什么用的
- FastReport3.01中怎样设置MasterData Footer?
- 有没有像QQ菜单一样的控件?如(我的好友,陌生人,黑名单)
- dataset的filter中怎么用DATETIME类型
- 在midas 结构中,在客户端异常终止时,应用服务器为什么会占用100%CPU?
- 请问TScrollBar控件怎么用?
- 我有一个SQL Server 的语名,要在MySQL下运行,如何改????
- 该如何打印 html文件??
- 求助:怎样实现在登陆后释放login Form 并进入主窗口????????????
- 为什么我的数据窗口中放的ADOQUERY等数据控件比较多出现滚动条后,只要一按保存键,窗口里的控件位置便会变乱?
- 关于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 给出的参数不够完备,会弹出对话窗体。