Laden...

Microsoft.ACE.OLEDB.12.0 bringt auf einer Maschine, dass der Treiber nicht installiert ist

Erstellt von oehrle vor 4 Jahren Letzter Beitrag vor 4 Jahren 2.619 Views
O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 4 Jahren
Microsoft.ACE.OLEDB.12.0 bringt auf einer Maschine, dass der Treiber nicht installiert ist

Hallo , habe das Problem das ich eine Excel einlesen muss, wie ich das schon oft gemacht habe.
Geht aber nicht, der Treiber sei nicht installiert.
Hane dann eine andere applikation vom mit genommen, dort die Excel eingelesen, voila das geht.

Habe nun schon die OLEDB - Access nachinstalliert, keine Chance, geht nicht. Immer noch gleicher Fehler.
Habe dann die Access2013 RunTime installiert, kein erfolg.

https://www.microsoft.com/en-us/download/confirmation.aspx?id=39358

Ich habe Office 365 drauf, kann das ein Problem sein (Firmenrechner).

So sieht der Code aus:



    System.Data.DataTable tblExl = new System.Data.DataTable("Exceldaten");

 System.Data.OleDb.OleDbConnection con = null;



            con = new System.Data.OleDb.OleDbConnection();
            con.ConnectionString = "Data Source=" + dateinemaMitPfadExceldatei + ";Provider=Microsoft.ACE.OLEDB.12.0;";
            con.ConnectionString += "Extended Properties=\"Excel 12.0;HDR = Yes;IMEX=1\";";

 //// Exceltabelle in Dataset einlesen
            try
            {
                string tableName = "Sheet1$";
                string sql = "SELECT * FROM [" + tableName + "]";

                System.Data.OleDb.OleDbDataAdapter adap = new System.Data.OleDb.OleDbDataAdapter(sql, con);
                adap.Fill(tblExl = new System.Data.DataTable(dateinemaMitPfadExceldatei));





            }
            catch (Exception ex)
            {

            }


Wäre um jeden Tipp dankbar, das ist echt zeitfressend.

16.806 Beiträge seit 2008
vor 4 Jahren

Schau Dir https://github.com/NetOfficeFw/NetOffice an, das nimmt Dir sowas ab oder verwende direkt OpenXML (wenn möglich).

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 4 Jahren

Ok, danke für die Info.

Also wie gesagt, ich könnte das Exel-Sheet auch zeilenweise einlesen, das würde bestimmt gehen.
Nur wenn ich es mit dem DataAdapter einlese, dann habe ich das Problem.

Da hat niemand die Erfahrung wie ich gemacht? Das war eine seht bequeme Art.
Nur komisch das es jetzt in einem neuen Projekt nicht mehr läuft.
Was noch ein Unterschied sein kann: Die neue Entwicklung läuft mit Win10, die vorige wurde unter WIn7 erstellt,damals hatte ich noch Office 2010 auf dem Rechner.
Kann das der Grund sein?

463 Beiträge seit 2009
vor 4 Jahren

Hast du dir die Antwort nicht schon selbst gegeben? Du verwendets in deinem Connectstring Excel 12 = Office 2007.

R
317 Beiträge seit 2006
vor 4 Jahren

Ist eventuell die 32Bit-Version von Excel oder der Runtime installiert?

Wenn ja - muss deine Applikation auch als x86 in 32 Bit kompiliert werden, da ansonsten der 64-Bit Prozess nicht auf den Treiber zugreifen kann. Das ist auch eine kleine Stolperfalle, gleiches z.B. wenn du per OleDB den JET-Treiber verwenden willst.

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 4 Jahren

Hallo, ja habe das auf X86 eingestellt.
Die ältere Applikation arbeitet mit Microsoft.ACE.OLEDB.12.0

Das ist der Punkt warum ich das auch nicht verstehen will. Der QUellcode der älteren Applikation läuft damit, die neue Applikation nicht, und wenn ich 14.0/15.0/16.0 einstelle, kommt der gleiche Fehler.

Office ist als 32-Bit instaliert, laut der Accounteinstellungsinformationen.

T
461 Beiträge seit 2013
vor 4 Jahren

Dieser Link hier https://www.microsoft.com/en-us/download/confirmation.aspx?id=39358 ist die 64Bit Version, zeigt er mir an wenn ich draufklicke.

Brauchst ja aber die 32er oder täusch ich mich, vielleicht hast du das übersehen?

Hatte auch schon damit gearbeitet, dieses 32 64 bin ich auch drübergestolpert...

SG

Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 4 Jahren
Problem besteht immer noch

Hallo, ich habe mit einem Kollegen aus der IT gesprochen. Problem bei uns: WIr haben Office 365, und wie es aussieht haben wir ein MischMasch aus 32/64 Bit im Office-System. Das würde auch die Probleme erklären.

Hier mal ein Screenshot mit der Abfrage vom Exceltreiber:
C:\Windows\System32\odbcad32

oder mit

C:\Windows\SysWOW64\odbcad32.exe

ist identisch. Der Exceltreiber fehlt, siehe angehängtes Bild.
Link für diese Info:
Link zum Tipp

Kann ich das irgendwie anders installieren, als mit dem Treiber von Access?
Wo muss der Treiber genau liegen, evtl. kann man das manuell einfügen?

16.806 Beiträge seit 2008
vor 4 Jahren

Das würde auch die Probleme erklären.

Nein.
Wenn Deine Anwendung als x86 läuft werden x86 Treiber gesucht.
Läuft sie als x64 eben x64 Treiber. Der Mischmasch ist hier egal, solange das Matching stimmt.

Die Treiber kommen i.d.R. via Redistributable mit; sind also Teil des Office SDKs / Visual Studio Tools for Office.
Solche Schnittstellen werden i.d.R. bei keinem Microsoft Produkt mit einer einfachen Endkundeninstallation mitgeliefert.

Microsoft empfiehlt aber seit über 10 Jahren die Verwendung von Open XML und unterstützt zusätzlich ODF.
Alles problemlos via .NET anzusteuern - ohne ODBC.

Ich wüsste zwar nicht, dass Microsoft mit Office 365 (bzw. im aktuellen 2019er Zyklus) die Unterstützung von ODBC eingestellt hat.
Wenn es so wäre, wäre das eine erfreuliche Nachricht, ein absolut korrekter Schritt und würde ich persönlich auch sehr begrüßen.
Ich hoffe sogar, dass das so wäre.

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 4 Jahren

Ja Abt, danke für die Info.
Bei Open XML kann halt nicht einfach das komplette Sheet eingelesen werden, so wie ich das gesehen habe.
So wie ich das gesehen habe immer mit UsedRange, dann die Zeilen und Spalten durchtackern.
Das ist halt mit ODBC deluxe. Sheet einlesen wie eine DataTable, dann sofort im DataGrid anzeigen lassen.
Oder ist diese Funktionalität im OpenXML verborgen?
Office ist so eine Sache, bei jeder neuen Version funktioniert wieder irgend etwas nicht 100 % - tig.
Von dem her denke ich wäre das OpenXML zukunfssicherer.

Habe gerade eben OpenXML eingebunden und eine Tabelle eingelesen, hat geklappt (zeilenweise einlesen). Denke, damit werde ich nun leben müssen, dafür fällt dann halt das Treibergedöns weg.
Bischen umständlicher, aber funktioniert.

16.806 Beiträge seit 2008
vor 4 Jahren

Alles sofort in Speicher laden ist nicht Deluxe - und auch nen DataTable ist nicht Deluxe.
DataTable ist genauso obsolete wie Intertop mit Office: funktioniert zwar noch, aber es gibt in Summe bessere Alternativen.

Absolut zu begrüßen, dass die neuen SDKs (zB. auch die von Datenbanken) ein eingebautes Paging haben und so die Entwickler zwingen ordentlich zu programmieren.
Alles in den Speicher schubsen ist bequem für den Entwickler: bescheiden für den Anwender - und das System.

Office ist so eine Sache, bei jeder neuen Version funktioniert wieder irgend etwas nicht 100 % - tig.

Du sprichst von Software, die einen 3 Jahres-Zyklus hat und von Schnittstellen, für die seit 10 Jahren bessere Alternativen gibt...
Du machst es Dir hier gerade sehr einfach....

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 4 Jahren
Gelöst - OpenXML verwenden

Also, danke für die Hilfe. OpenXML wirds tun.