Crear un DSN de sistema desde Delphi

Ejemplo de creación de un DSN para Access:

procedure TForm1.Button1Click(Sender: TObject);
var
 Reg:TRegistry;
 Path:String;
begin
  Path:='c:\Neptuno.mdb';
  Reg:=TRegistry.Create;
  Try
   Reg.RootKey:=HKEY_LOCAL_MACHINE;
   Reg.OpenKey('\Software\ODBC\ODBC.INI\jose',True);
   Reg.WriteString('DBQ',Path);
   Reg.WriteString('Driver','c:\windows\system\odbcjt32.dll');
   Reg.WriteInteger('DriverId',25);
   Reg.WriteString('FIL','MS Access;');
   Reg.WriteInteger('SafeTransactions',0);
   Reg.WriteString('UID','');
   Reg.OpenKey('\Software\ODBC\ODBC.INI\jose\Engines\Jet',True);
   Reg.WriteString('ImplicitCommitSync','');
   Reg.WriteInteger('MaxBufferSize',2048);
   Reg.WriteInteger('PageTimeout',5);
   Reg.WriteInteger('Threads',3);
   Reg.WriteString('UserCommitSync','Yes');
   Reg.OpenKey('\Software\ODBC\ODBC.INI\ODBC Data Sources',True);
   Reg.WriteString('jose','Microsoft Access Driver (*.mdb)');
  finally
   Reg.Free;
  end;
 end;

Matizaciones por Julio García

Reg.WriteString('Driver','c:\windows\system\odbcjt32.dll');

Se está presuponiendo que la ruta al directorio system es siempre esa, cuando no tiene por qué serlo.

El driver necesario, en este caso odbcjt32.dll al tratarse de Access, se encuentra en el directorio de sistema de Windows. La ruta a este directorio se puede obtener con la función GetSystemDirectory.

El código mostrado puede utilizarse para crear un DSN de usuario con sólo cambiar:

Reg.RootKey:=HKEY_LOCAL_MACHINE por Reg.RootKey:=HKEY_CURRENT_USER