Novo AdSense

sexta-feira, 23 de setembro de 2011

Unit em Delphi para Consultas de DSNs


unit DSNFuncs;

{Créditos para  Oscar Noe Martin

Fonte pego no endereço http://www.delphi3000.com/articles/article_3584.asp?SK=
Comentários traduzidos por Jullian Henrique Moreira
23/09/2011
}

interface
Uses Windows, Classes, SysUtils, Registry;

Type
  TDSN_Type       = (dtUSER, dtSYSTEM);
  TDSN_Types      = Set of TDSN_Type;


function GetODBCDriversList: TStrings;
function GetDSNList (aDSN_TYPES: TDSN_Types; aDriverFilter: String): TStrings;

implementation

function GetODBCDriversList: TStrings;

  //Esta função retornará uma lista dos Drivers ODBC instalados
  // Example: combobox1.Assign(GetODBCDriversList); // ;)

var
  aStringlist   : TStringlist;
  aRegistry   : TRegistry;
Begin
  aStringlist:= Tstringlist.Create;
  aRegistry:= TRegistry.Create;
  Result:= Tstringlist.Create;

  with aRegistry do
  Begin
    rootkey:= HKEY_LOCAL_MACHINE;
    OpenKey('Software\ODBC\ODBCINST.INI\ODBC Drivers',False);
    GetValueNames(aStringlist);
  End;
  aRegistry.Free;
  aStringlist.Sort;
  result.AddStrings(aStringlist);
  aStringlist.Free;
End;

function GetDSNList (aDSN_TYPES: TDSN_Types; aDriverFilter: String): TStrings;

  // Esta função retorna uma lista de DSNs( DSNs de Usuários (dtUser),
  // DSNs de Sistema (dtSystem), ou ambas), onde o Driver contém aDriverFilter,
  // pode ser o nome completo do driver ou apenas parte dele;
  //       (Exemplo: 'Microsoft Access Driver (*.mdb)' or 'Access').
  //
  // Exemplo: listbox1.Items.Assign(GetDSNList([dtUser,dtSystem],'Access');
  // Irá retornar uma lista com todos os DSNs existentes tanto User quanto System
  // com a string 'Access' no nome do Driver.

var
  aStringList : TStringlist;

  aStrings1   : TStrings;
  aStrings2   : Tstrings;
  aString     : String;

  aRegistry   : TRegistry;
  aInt        : Integer;
Begin
  aStringlist:=TStringlist.Create;
  aStrings1:=TStringlist.Create;
  aStrings2:=TStringlist.Create;

  If dtUSER in aDSN_TYPES then
  Begin
    aRegistry:= Tregistry.Create;
    With aRegistry do
    Begin
      RootKey:=HKEY_CURRENT_USER;
      OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',False);
      GetValueNames(aStrings1);
      for aInt:=aStrings1.Count-1 downto 0 do
      Begin
        aString:= ReadString(aStrings1.Strings[aInt]);
        if ((Pos( aDriverFilter, aString ) = 0) and (aDriverFilter<>''))  then
          aStrings1.Delete(aInt);
      End;
    End;
    aRegistry.Free;
  end;

  If dtSYSTEM in aDSN_TYPES then
  Begin
    aRegistry:= Tregistry.Create;
    With aRegistry do
    Begin
      RootKey:=HKEY_LOCAL_MACHINE;
      OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',False);
      GetValueNames(aStrings2);
      for aInt:=aStrings2.Count-1 downto 0 do
      Begin
        aString:= ReadString(aStrings2.Strings[aInt]);
        if ((Pos( aDriverFilter, aString) = 0) and (aDriverFilter<>''))  then
          aStrings2.Delete(aInt);
      End;
    End;
    aRegistry.Free;
  end;

  aStringlist.AddStrings(aStrings1);
  aStrings1.Free;
  aStringlist.AddStrings(aStrings2);
  aStrings2.Free;
  aStringlist.Sort;
  result:= Tstringlist.Create;
  result.Assign(aStringlist);
End;

end.

Nenhum comentário:

Postar um comentário