procedure TForm1.Button1Click(Sender: TObject); var ls_dsn,ls_database,ls_desc,ls_login_id,ls_server_ip:string; lbl_user_dsn:boolean; // true-->user_dsn,false-->system dsn registerTemp : TRegistry; begin //判断用户输入的信息是否正确 ls_dsn:=trim(Edit1.text); //取得数据源名 ls_database:=trim(Edit2.text); //取得数据库名 ls_desc:=trim(Edit3.text); //取得描述名 ls_login_id:=trim(Edit4.text); //取得用户名 //取得数据库所在的IP地址 ls_server_ip:=Edit5.text; //判断数据源名是否填写 if ls_dsn='' then begin showmessage('请输入数据源名'); Edit1.SetFocus ; exit; end; registerTemp := TRegistry.Create; //建立一个Registry实例 with registerTemp do begin if RadioButton1.Checked then RootKey:=HKEY_CURRENT_USER //设置根键值为HKEY_CURRENT_USER else RootKey:=HKEY_LOCAL_MACHINE; //设置根键值为HKEY_LOCAL_MACHINE //找到Software\ODBC\ODBC.INI\ODBC Data Sources if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then begin //注册一个DSN名称 WriteString( ls_dsn, 'SQL Server' ); end else begin//创建键值失败 Showmessage('增加ODBC数据源失败'+#13+formatdatetime('yyyy-mm-dd hh:mm:ss',now)); exit; end; CloseKey; //找到或创建Software\ODBC\ODBC.INI\MyAccess,写入DSN配置信息 if OpenKey('Software\ODBC\ODBC.INI\'+ls_dsn,True) then begin WriteString( 'Database',ls_database);//数据库 WriteString( 'Description',ls_desc);//数据源描述 WriteString( 'Driver', 'E:\Windows\SYSTEM\sqlsrv32.dll' );//驱动程序DLL文件 Writestring( 'LastUser',ls_login_id);// WriteString( 'Server', ls_server_ip);//用户名称 end else//创建键值失败 begin Showmessage('增加ODBC数据源失败'+#13+#10+formatdatetime('yyyy-mm-dd hh:mm:ss',now)); exit; end; CloseKey; showmessage('已成功创建新的ODBC数据源'); Showmessage('已成功创建新的ODBC数据源'+#13+#10+formatdatetime('yyyy-mm-dd hh:mm:ss',now)); Free; end; end;
haerbin982(): 为什么没有设置登录访问数据源密码?
Function RegODBC(ODBCName,FileName:String):Boolean; var RegistryTemp:TRegistry; bData : array[ 0..0 ] of byte; StrKeyName:String;begin RegistryTemp:=TRegistry.Create; try RegistryTemp.RootKey:=HKEY_CURRENT_USER; IF RegistryTemp.OpenKey('\SoftWare\ODBC\ODBC.INI\ODBC data Sources',false) then begin RegistryTemp.WriteString(ODBCName,'Microsoft Access Driver (*.mdb)'); //考虑以后的通用性,加入多种数据库选 //RegistryTemp.CloseKey; Result:=true; end else begin MessageBox(Application.Handle,PChar('注册odbc数据源失败'),PChar('注册'),MB_OK); Result:=False; Exit; end; //Registrytemp.OpenKey('\SoftWare\ODBC\ODBC.INI',True); //RegistryTemp.WriteString(ODBCName); with RegistryTemp do begin if OpenKey('\SoftWare\ODBC\ODBC.INI\'+ODBCName,true) then begin WriteString( 'DBQ',FileName );//数据库目录 WriteString( 'Description','测试数据库' );//数据源描述 WriteString( 'Driver', 'C:\PWIN98\SYSTEM\odbcjt32.dll' );//驱动程序DLL文件 WriteInteger( 'DriverId', 25 ); //驱动程序标识 WriteString( 'FIL','Ms Access;' ); //Filter依据 WriteInteger( 'SafeTransaction', 0 );//支持的事务操作数目 WriteString( 'UID','' );//用户名称 bData[0] := 0; WriteBinaryData( 'Exclusive', bData, 1 ); //非独占方式 WriteBinaryData( 'ReadOnly', bData, 1 ); end; StrKeyName:='\SoftWare\ODBC\ODBC.INI\'+ODBCName+'\Engines'; OpenKey(StrKeyName,true); StrKeyName:='\SoftWare\ODBC\ODBC.INI\'+ODBCName+'\Engines\Jet'; if OpenKey(StrKeyName,True) then begin WriteString( 'ImplicitCommitSync',''); WriteInteger( 'MaxBufferSize', 512 );//缓冲区大小 WriteInteger( 'PageTimeout', 10 );//页超时 WriteInteger('Threads', 3 );//支持的线程数目 WriteString( 'UserCommitSync', 'Yes' ); ShowMessage('注册成功'); end; end; finally RegistryTemp.Free; end; end;
var
ls_dsn,ls_database,ls_desc,ls_login_id,ls_server_ip:string;
lbl_user_dsn:boolean; // true-->user_dsn,false-->system dsn
registerTemp : TRegistry;
begin
//判断用户输入的信息是否正确
ls_dsn:=trim(Edit1.text); //取得数据源名
ls_database:=trim(Edit2.text); //取得数据库名
ls_desc:=trim(Edit3.text); //取得描述名
ls_login_id:=trim(Edit4.text); //取得用户名
//取得数据库所在的IP地址
ls_server_ip:=Edit5.text; //判断数据源名是否填写
if ls_dsn='' then
begin
showmessage('请输入数据源名');
Edit1.SetFocus ;
exit;
end; registerTemp := TRegistry.Create; //建立一个Registry实例
with registerTemp do
begin
if RadioButton1.Checked then
RootKey:=HKEY_CURRENT_USER //设置根键值为HKEY_CURRENT_USER
else
RootKey:=HKEY_LOCAL_MACHINE; //设置根键值为HKEY_LOCAL_MACHINE //找到Software\ODBC\ODBC.INI\ODBC Data Sources
if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then
begin //注册一个DSN名称
WriteString( ls_dsn, 'SQL Server' );
end
else
begin//创建键值失败
Showmessage('增加ODBC数据源失败'+#13+formatdatetime('yyyy-mm-dd hh:mm:ss',now));
exit;
end;
CloseKey; //找到或创建Software\ODBC\ODBC.INI\MyAccess,写入DSN配置信息
if OpenKey('Software\ODBC\ODBC.INI\'+ls_dsn,True) then
begin
WriteString( 'Database',ls_database);//数据库
WriteString( 'Description',ls_desc);//数据源描述
WriteString( 'Driver', 'E:\Windows\SYSTEM\sqlsrv32.dll' );//驱动程序DLL文件
Writestring( 'LastUser',ls_login_id);//
WriteString( 'Server', ls_server_ip);//用户名称
end
else//创建键值失败
begin
Showmessage('增加ODBC数据源失败'+#13+#10+formatdatetime('yyyy-mm-dd hh:mm:ss',now));
exit;
end;
CloseKey; showmessage('已成功创建新的ODBC数据源');
Showmessage('已成功创建新的ODBC数据源'+#13+#10+formatdatetime('yyyy-mm-dd hh:mm:ss',now));
Free;
end;
end;
为什么没有设置登录访问数据源密码?
var
RegistryTemp:TRegistry;
bData : array[ 0..0 ] of byte;
StrKeyName:String;begin
RegistryTemp:=TRegistry.Create;
try
RegistryTemp.RootKey:=HKEY_CURRENT_USER;
IF RegistryTemp.OpenKey('\SoftWare\ODBC\ODBC.INI\ODBC data Sources',false) then
begin
RegistryTemp.WriteString(ODBCName,'Microsoft Access Driver (*.mdb)'); //考虑以后的通用性,加入多种数据库选
//RegistryTemp.CloseKey;
Result:=true;
end
else
begin
MessageBox(Application.Handle,PChar('注册odbc数据源失败'),PChar('注册'),MB_OK);
Result:=False;
Exit;
end;
//Registrytemp.OpenKey('\SoftWare\ODBC\ODBC.INI',True);
//RegistryTemp.WriteString(ODBCName);
with RegistryTemp do
begin
if OpenKey('\SoftWare\ODBC\ODBC.INI\'+ODBCName,true) then
begin
WriteString( 'DBQ',FileName );//数据库目录
WriteString( 'Description','测试数据库' );//数据源描述
WriteString( 'Driver', 'C:\PWIN98\SYSTEM\odbcjt32.dll' );//驱动程序DLL文件
WriteInteger( 'DriverId', 25 ); //驱动程序标识
WriteString( 'FIL','Ms Access;' ); //Filter依据
WriteInteger( 'SafeTransaction', 0 );//支持的事务操作数目
WriteString( 'UID','' );//用户名称
bData[0] := 0;
WriteBinaryData( 'Exclusive', bData, 1 );
//非独占方式
WriteBinaryData( 'ReadOnly', bData, 1 ); end;
StrKeyName:='\SoftWare\ODBC\ODBC.INI\'+ODBCName+'\Engines';
OpenKey(StrKeyName,true);
StrKeyName:='\SoftWare\ODBC\ODBC.INI\'+ODBCName+'\Engines\Jet'; if OpenKey(StrKeyName,True) then
begin
WriteString( 'ImplicitCommitSync','');
WriteInteger( 'MaxBufferSize', 512 );//缓冲区大小
WriteInteger( 'PageTimeout', 10 );//页超时
WriteInteger('Threads', 3 );//支持的线程数目
WriteString( 'UserCommitSync', 'Yes' );
ShowMessage('注册成功');
end;
end; finally
RegistryTemp.Free; end;
end;