AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi "Unerwarteter Fehler vom externen Datenbanktreiber (1)" beim Öffnen einer XLS-Datei
Thema durchsuchen
Ansicht
Themen-Optionen

"Unerwarteter Fehler vom externen Datenbanktreiber (1)" beim Öffnen einer XLS-Datei

Ein Thema von mjustin · begonnen am 6. Nov 2017 · letzter Beitrag vom 15. Nov 2017
Antwort Antwort
Seite 1 von 2  1 2      
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#1

"Unerwarteter Fehler vom externen Datenbanktreiber (1)" beim Öffnen einer XLS-Datei

  Alt 6. Nov 2017, 08:17
Datenbank: Excel • Version: 2010 • Zugriff über: ADO
Hallo,

in einem Delphi 2009 Projekt wird eine Excel-Datei über ADO geöffnet, gelesen und geschrieben. In der Vergangenheit lief dies in den VMWare Produktivumgebungen (Windows 7) und allen Entwicklungsumgebungen (Windows 7) problemlos.

Vermutlich durch ein Windows Update hat sich in den Office-Treibern auf den Entwicklungsrechnern etwas geändert, die Anwendung wirft die EOleException mit dem Text "Unerwarteter Fehler vom externen Datenbanktreiber (1)" sofort beim Öffnen der XLS-Datei. Wir können das in Frage kommende Windows Update vielleicht durch Deinstallationen der letzten Updates einkreisen, und müssen solange in den Produktivumgebungen auf Office-Updates verzichten.

Gibt es Möglichkeiten die Ursache des Fehlers weiter einzukreisen (ADO-Logging / Debugging)?

Ist es möglich, dazu ein Supportticket bei Embarcadero zu öffnen?
Angehängte Grafiken
Dateityp: png Unbenannt.PNG (7,1 KB, 15x aufgerufen)
Michael Justin
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.075 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: "Unerwarteter Fehler vom externen Datenbanktreiber (1)" beim Öffnen einer XLS-Dat

  Alt 6. Nov 2017, 08:22
Habt ihr mit dem Process Monitor das Problem untersucht?
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
984 Beiträge
 
Delphi 6 Professional
 
#3

AW: "Unerwarteter Fehler vom externen Datenbanktreiber (1)" beim Öffnen einer XLS-Dat

  Alt 6. Nov 2017, 08:23
Hmm..

Zeig mal deinen ConnectionString..

Embarcadero hat damit nichts zu tun, da es sich um eine Fehlermeldung des Treibers handelt!

Edit:
Und gib die Excel-Version vom Altsystem (Win7) und Neusystem an.

Geändert von HolgerX ( 6. Nov 2017 um 08:25 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#4

AW: "Unerwarteter Fehler vom externen Datenbanktreiber (1)" beim Öffnen einer XLS-Dat

  Alt 6. Nov 2017, 08:33
Hmm..

Zeig mal deinen ConnectionString..

Embarcadero hat damit nichts zu tun, da es sich um eine Fehlermeldung des Treibers handelt!

Edit:
Und gib die Excel-Version vom Altsystem (Win7) und Neusystem an.

Der Connection String ist:

Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Sandbox\***.xls; Extended Properties="Excel 8.0; HDR=YES; IMEX=0"

Excel Version in den Entwicklungsumgebungen:
14.0.7188.5002 (32 Bit)

In der Produktionsumgebung:
14.0.7184.5000 (32 Bit)
Michael Justin

Geändert von mjustin ( 6. Nov 2017 um 08:38 Uhr)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
984 Beiträge
 
Delphi 6 Professional
 
#5

AW: "Unerwarteter Fehler vom externen Datenbanktreiber (1)" beim Öffnen einer XLS-Dat

  Alt 6. Nov 2017, 08:40
Hmm..

Alternativ den Provider Microsoft.ACE.OLEDB.X.0 (Bei X die installierte Version, müsste bei dir 12 sein) verwenden anstelle von Microsoft.Jet.OLEDB.4.0.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#6

AW: "Unerwarteter Fehler vom externen Datenbanktreiber (1)" beim Öffnen einer XLS-Dat

  Alt 6. Nov 2017, 08:55
Hmm..

Alternativ den Provider Microsoft.ACE.OLEDB.X.0 (Bei X die installierte Version, müsste bei dir 12 sein) verwenden anstelle von Microsoft.Jet.OLEDB.4.0.
Ok, der Connection String beginnt nun mit

Code:
Provider=Microsoft.ACE.OLEDB.12.0;
Dann erscheint eine andere Fehlermeldung:

"Der Provider kann nicht gefunden werden. Möglicherweise ist der Provider nicht richtig installiert worden."
Michael Justin

Geändert von mjustin ( 6. Nov 2017 um 09:00 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: "Unerwarteter Fehler vom externen Datenbanktreiber (1)" beim Öffnen einer XLS-Dat

  Alt 6. Nov 2017, 09:06
Den "unerwarteten Fehler" bei ADO kenne ich ganz gut, er taucht gerne bei Datumswerten mit Range Verletzung (erlaubten Range kenne ich nicht) auf. (Unabhängig von der Datenquelle, hier Excel)
Was scheinbar nach einem Fehler nach Windows Update aussieht, ist also vielleicht einfach Zufall (so wie mit der schwarzen Katze).

Mein Tipp: Exceldaten im Originalprogramm auf mögliche, außergewöhnliche Datumswerte prüfen. Das gilt besonders, wenn es sich um Handeingabedaten handelt oder zumindest manuell bearbeitet bzw. "korrigiert" (ein anderer Grund würde mir auch kaum einfallen, Excel als Importformat zu nutzen)
Gruß, Jo
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
984 Beiträge
 
Delphi 6 Professional
 
#8

AW: "Unerwarteter Fehler vom externen Datenbanktreiber (1)" beim Öffnen einer XLS-Dat

  Alt 6. Nov 2017, 09:11
Hmm..

Alternativ den Provider Microsoft.ACE.OLEDB.X.0 (Bei X die installierte Version, müsste bei dir 12 sein) verwenden anstelle von Microsoft.Jet.OLEDB.4.0.
Ok, der Connection String beginnt nun mit

Code:
Provider=Microsoft.ACE.OLEDB.12.0;
Dann erscheint eine andere Fehlermeldung:

"Der Provider kann nicht gefunden werden. Möglicherweise ist der Provider nicht richtig installiert worden."
Wie geschrieben, könnte es 12 sein, jedoch auch 14 oder 15 je nach installierter Office-Version.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#9

AW: "Unerwarteter Fehler vom externen Datenbanktreiber (1)" beim Öffnen einer XLS-Dat

  Alt 6. Nov 2017, 10:11
Update:

in einer weiteren Entwicklungsumgebung ist eine ältere 64 Bit Version von Excel 2010 installiert, hier tritt der Fehler ebenfalls auf:

Excel Version in den Entwicklungsumgebungen (in diesen tritt der Fehler auf):
14.0.7128.5000 (64 Bit)
14.0.7188.5002 (32 Bit)

In der Produktionsumgebung:
14.0.7184.5000 (32 Bit)

Die Excel-Version in der Produktionsumgebung liegt "zwischen" denen der Entwicklungsumgebungen. Nur in der Produktionsumgebung tritt der Fehler nicht auf.
Michael Justin
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
984 Beiträge
 
Delphi 6 Professional
 
#10

AW: "Unerwarteter Fehler vom externen Datenbanktreiber (1)" beim Öffnen einer XLS-Dat

  Alt 6. Nov 2017, 10:20
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 = '.xlsxthen tmpExcel := 'Excel 12.0 Xml';
  if tmpExt = '.xlsmthen tmpExcel := 'Excel 12.0 Macro';
  if tmpExt = '.xlsbthen 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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz