unit
odbc_func;
interface
uses
Classes;
function
GetODBCDriversNamesList(DrvNamesList:TStrings):
boolean
;
function
GetODBCDriversList(DrvNames,DrvList:TStrings):
boolean
;
function
GetFileExtnsByODBCDriverName(DriverName:
string
;
var
FileExtns:
string
):
boolean
;
function
GetODBCDriverNameByFileExtns(FileExtns:
string
;
var
DriverName:
string
):
boolean
;
function
GetODBCDriversNamesByFileExtns(FileExtns:
string
; DriversNames:TStrings):
boolean
;
implementation
uses
SysUtils, Windows,Registry, StrUtils
{$IFDEF debug}
, Dialogs
{
$ENDIF
}
;
function
GetODBCDriversNamesList(DrvNamesList:TStrings):
boolean
;
var
Reg:TRegistry;
begin
Result:=
False
;
Reg:=TRegistry
.
Create(KEY_READ);
try
if
Reg
.
OpenKey(
'\Software\ODBC\ODBC.INI\ODBC Data Sources'
,
False
)
then
begin
Reg
.
GetValueNames(DrvNamesList);
Result:=
True
;
end
;
finally
Reg
.
Free;
end
;
end
;
function
GetODBCDriversList(DrvNames,DrvList:TStrings):
boolean
;
var
Reg:TRegistry;
i:
integer
;
begin
Result:=
False
;
DrvList
.
Clear;
Reg:=TRegistry
.
Create(KEY_READ);
try
if
Reg
.
OpenKey(
'\Software\ODBC\ODBC.INI\ODBC Data Sources'
,
False
)
then
begin
for
i:=
0
to
DrvNames
.
Count-
1
do
DrvList
.
Append(Reg
.
ReadString(DrvNames[i]));
Result:=
True
;
end
;
finally
Reg
.
Free;
end
;
end
;
function
GetFileExtnsByODBCDriverName(DriverName:
string
;
var
FileExtns:
string
):
boolean
;
var
Reg:TRegistry;
begin
Result:=
False
;
FileExtns:=
''
;
Reg:=TRegistry
.
Create(KEY_READ);
try
Reg
.
RootKey:=HKEY_LOCAL_MACHINE;
if
Reg
.
OpenKey(Format(
'\Software\ODBC\ODBCINST.INI\%s'
,[DriverName]),
False
)
then
begin
FileExtns:=Reg
.
ReadString(
'FileExtns'
);
Result:=
True
;
end
;
finally
Reg
.
Free;
end
;
end
;
function
GetODBCDriverNameByFileExtns(FileExtns:
string
;
var
DriverName:
string
):
boolean
;
var
sl:TStringList;
DriversNamesList,DriversList:TStringList;
i,j:
integer
;
FileExt:
string
;
begin
Result:=
False
;
DriverName:=
''
;
sl:=TStringList
.
Create;
sl
.
Delimiter:=
';'
;
sl
.
DelimitedText:=FileExtns;
{$IFDEF debug}
ShowMessage(IntToStr(sl
.
Count));
{
$ENDIF
}
DriversNamesList:=TStringList
.
Create;
DriversList:=TStringList
.
Create;
if
GetODBCDriversNamesList(DriversNamesList)
then
if
GetODBCDriversList(DriversNamesList,DriversList)
then
begin
for
i:=
0
to
DriversList
.
Count-
1
do
begin
for
j:=
0
to
sl
.
Count-
1
do
if
GetFileExtnsByODBCDriverName(DriversList[i],FileExt)
then
if
pos(Trim(sl[j]),FileExt)>
0
then
begin
DriverName:=DriversNamesList[i];
Result:=
True
;
Break;
end
;
if
Length(DriverName)>
0
then
Break;
end
;
end
;
DriversList
.
Free;
DriversNamesList
.
Free;
sl
.
Free;
end
;
function
GetODBCDriversNamesByFileExtns(FileExtns:
string
; DriversNames:TStrings):
boolean
;
var
sl:TStringList;
DriversNamesList,DriversList:TStringList;
i,j:
integer
;
FileExt:
string
;
begin
DriversNames
.
Clear;
sl:=TStringList
.
Create;
sl
.
Delimiter:=
';'
;
sl
.
DelimitedText:=FileExtns;
DriversNamesList:=TStringList
.
Create;
DriversList:=TStringList
.
Create;
if
GetODBCDriversNamesList(DriversNamesList)
then
if
GetODBCDriversList(DriversNamesList,DriversList)
then
for
i:=
0
to
DriversList
.
Count-
1
do
for
j:=
0
to
sl
.
Count-
1
do
if
GetFileExtnsByODBCDriverName(DriversList[i],FileExt)
then
if
pos(Trim(sl[j]),FileExt)>
0
then
DriversNames
.
Append(DriversNamesList[i]);
DriversList
.
Free;
DriversNamesList
.
Free;
sl
.
Free;
Result:=
True
;
end
;
end
.