Import z Excel (zmienny plik) do SQL Server - błedy wersji 32/64 bit - obejście problemu

0

Witam ponownie,

tym razem z niezbyt błahym problemem. Pokrótce co chce osiągnąć: Chcę w paczce SSIS ładować (właściwie kasować starą i tworzyć na nowo) tabele z pliku excel (office 2010 xlsx) - przy czym plik excel każdego dnia może się zmieniać (tj. nie ma zawsze takiej samej struktury - liczba kolumn może się zmienić) i dla tego nie mogę użyć standardowej metody połączenia się po prostu do źródła excel i kopiowania danych.

Ok zatem cel jasny - teraz rozwiązanie - po rozmowach z wujem G. - wyczaiłem opcje ala:

 Select * into tst.DaneTest FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=D:\Transport\ProjectStatus.xlsx;HDR=YES', 'SELECT * FROM [Status$]')

Oczywiście nie mogło byc za prosto więc różne tam błedy wyskakiwały w związku z "ad hoc distributed queries" i innymi ale wsio rozwiązałem dzięki google:

 EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO

EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1   
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParam', 1
GO

Ok 2 błędy rozwiązane .... pojawia się nowy:
"The 32-bit OLE DB provider "Microsoft.ACE.OLEDB.12.0" cannot be loaded in-process on a 64-bit SQL Server."

tu wspomnę, że pracuję na Microsoft SQL Server 2014 - 12.0.4213.0 (X64) zainstalowany na Windows Server 2008 64 bit.
No więc OK .... trzeba przeinstalować sterowniki "MS office Access database engine" z 32 na 64. Ok zrobiłem to dla wersji 2010 i ..... Voila - Działa - ładuje tablicez excela do bazy.

No i niby problem rozwiązany powiecie ... ale teraz przechodzimy do Meritum:

Na tym samym serwerze w innym projekcie SSIS mam popisane paczki gdzie ciągnę dane z baz danych Accessa ver. 2010 czyli accdb. I .... żeby było śmieszniej te z kolei wymagają (o ile nic nigdzie nie ominąłem to potwierdzone w wielu wątkach na google) .... sterownika 32 bitowego .... i nie ma zmiłuj na 64 nie poleci.

No i dla tego ten wątek i prośba do Was .... co z tym począć ... jak żyć ? Moze ktoś miał podobny problem i go jakoś obszedł ... a może znacie inną / lepszą metodę na pobieranie danych z excela który się zmienia ? ..... Poradźcie coś.... liczę na Was :) (jak zwykle)

Z góry dzięki,
Pozdrawiam

0

a jaki problem zainstalować obie wersje?

0

Hmmm, no nie pozwala mi :| Woła, żeby odinstalować wpierw ta drugą jak chce zainstalować nową.

chyba, że jest jakiś mykens tu ? To poproszę o podpowiedź jak to zrobić.

0

ne da sie mieć dwóch bitowych wersji, w firmie w której pracuje korzystają intesywnie z baz danych accesowych to sobie napisali własny stwerownik 32bitowy i 64 bitowy :P
i po problemie :P

0

jeśli byłbyś w stanie wyciągnąć potrzebne DLLe z obu wersji to jestem w stanie Cię naprowadzić jak to skonfigurować. Obawiam się tylko, że tu to może być trudne

0

Witam,

sorry za późna odpowiedź ale na wyjeździe byłem i nie bardzo miałem jak. Anyway - dzięki za propozycje @abrakadaber ale chyba tym razem się poddam, raz że nie wiem nawet jak się za to zabrać (jak wyciągnąć potrzebne DLLe), dwa sam mówisz, że później będzie jeszcze trudniej, trzy muszę sprawdzić jeszcze jedn opcję która może zadziała, no i cztery - w ostateczności mam do dyspozycji 2 serwery przeznaczone do "podobnych" celów także jak nic nie wymyślę to w ostateczności 1 skonfiguruje na 32-bit drugi na 64 i tyle (pewno będzie czas że i tak problem wróci - ale to wtedy będę się martwił).

0

Nie próbowałem, ale tu piszą ze się da: https://blogs.msdn.microsoft.com/farukcelik/2010/06/04/accessing-excel-files-on-a-x64-machine/

Konkretnie komentarz:

John Mc Morrin
13 August 2014 at 6:25 am
the correct solution has been provided by Andreas above. I have 32 bit office on windows 7 64 bit

Andreas Marschall 18 Aug 2010 12:15 AM #

Hi Faruk,

according to your P.S. 2 you say that it is not possible to install "Microsoft Access Database Engine 2010 Redistributable" 64bit when MS Office 2010 32bit is installed.

This is only true if you call AccessDatabaseEngine_X64.exe without any arguments.

But when you call

AccessDatabaseEngine_X64.exe /passive

then is installs with no complaints in parallel with an existing 32bit counter part.

Best Regards,

Andreas Marschall

</p>

Czyli instalujesz najpierw 32 bit później 64 bit z argumentem passive

0

@Panczo: No i niestety :( ... nie bangla. Tzn. w sumie jest dziwnie ... udało się zainstalować sterownik 64bit wykorzystując opcję /passive (nie zgłaszał błędu, że jest już zainstalowany 32) co od razu poskutkowało, że mogłem ładować dane z excela metodą:

 SELECT * INTO tst.DaneTest FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=D:\Transport\ProjectStatus.xlsx;HDR=YES', 'SELECT * FROM [Status$]')

Ale... wygląda na to, że albo na czytuje albo uszkadza (?) sterownik 32bitowy względnie po prostu się gubi .... bo paczki które łączą się z kolei z bazami accessa się wywalają. Nic nie zmieniając i odpalając paczkę SSIS nie dzieje się nic .... próbując na nowo stworzyć połączenie - przy teście połączenia wywala się cały VS.

żeby wrócić do pierwotnej sytuacji odinstalowuje sterownik 64bit - i muszę przeinstalować/naprawić sterownik 32bit.

Także kicha .... rozwiązania brak.

Edit: Hmm ale może to by było zapieknie gdyby wystarczyło zainstalwać 2 steronik z argumentem /passive ... pobieżnie przejrzałem przed chwilą ten art:
http://techblog.aimms.com/2014/10/27/installing-32-bit-and-64-bit-microsoft-access-drivers-next-to-each-other/
I zdaje się trochę więcej trzeba by namieszać tam ... wrócę do tematu w weekend pewnie i dam znać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1