Hmm..
Hab da mal was aus einem Testtool herausgenommen:
Delphi-Quellcode:
uses
ADODB;
const
c_JetOleDB = '
Microsoft.Jet.OLEDB.4.0';
c_ACEOleDB = '
Microsoft.ACE.OLEDB';
procedure GetADOProviderNames(AProviderList : TStrings);
begin
AProviderList.Clear;
GetProviderNames(AProviderList);
end;
function GetSQLServerProvider:
string;
var
tmpProviderList : TStringList;
i : integer;
begin
Result := '
';
tmpProviderList := TStringList.Create;
try
GetADOProviderNames(tmpProviderList);
tmpProviderList.Sort;
if tmpProviderList.IndexOf(c_JetOleDB) > -1
then
Result := c_JetOleDB;
for i := 0
to tmpProviderList.Count -1
do begin
if Pos(c_ACEOleDB, tmpProviderList[i]) = 1
then
Result := tmpProviderList[i];
end;
finally
tmpProviderList.Free;
end;
end;
procedure OpenExcelFile(ADOConnectionExcel : TADOConnection; AExcelFile :
string; AWithHeader : boolean);
var
tmpProvider :
string;
tmpProperties :
string;
tmpExcel :
string;
tmpHeader :
string;
tmpPWString :
string;
tmpExt :
string;
begin
ADOConnectionExcel.Close;
tmpExt := LowerCase(ExtractFileExt(AExcelFile));
tmpExcel := '
';
if tmpExt = '
.xls'
then tmpExcel := '
Excel 8.0';
if tmpExt = '
.xlsx'
then tmpExcel := '
Excel 12.0 Xml';
if tmpExt = '
.xlsm'
then tmpExcel := '
Excel 12.0 Macro';
if tmpExt = '
.xlsb'
then tmpExcel := '
Excel 12.0';
if tmpExcel = '
'
then begin
ShowMessage('
Invalid FileExt!');
exit;
end;
if AWithHeader
then
tmpHeader := '
HDR=YES'
else
tmpHeader := '
HDR=NO';
tmpProperties := '
Extended Properties="' + tmpExcel + '
;' + tmpHeader + '
;IMEX=1";';
// Kein Passwort setzen (Ja, auch bei ACE ist die Property mit 'Jet OLEDB:')
tmpPWString := '
Jet OLEDB:Database Password="";';
tmpProvider := GetSQLServerProvider;
ADOConnectionExcel.ConnectionString := '
Provider='+tmpProvider+'
;' + tmpProperties + tmpPWString + '
Data Source=' + AExcelFile;
ADOConnectionExcel.Open;
end;
Hiermit wird anhand der Extension und der installierten ACE-Version der Connection-String dynamisch zusammen gesetzt.
Es wird immer die höchste ACE-Version verwendet, auch wenn mehrere installiert wurden, selbst, wenn aufgrund der Office-Version noch JET verwendet werden könnte.