Zagwozdka z FireDAC Connectors

0

Zaczynając od początku potrzebuję połączenia z danymi z Excela, Accessa, CSV, JSON, DBF, MSSQL, Oracle, SQLite i kilku innych trochę mniej ważnych źródeł.
Mam to wszystko ogarnięte z FireDAC i CData Connectors i wszystko działa jak trzeba.
CData porzuca jednak wsparcie dla FIreDAC-a i nie jest już kompatybilny z Delphi 12.
Mój problem polega na tym, że mam aktywną subskrypcję na Delphi a nie mogę pracować na nowej wersji bo nie mam poinstalowanych wszystkich komponentów.
Kontaktowałem się z Embarcadero ale zasugerowali jedynie przeniesienie się na ODBC bo nie mają na razie innych pomysłów - tylko że ODBC do tego co potrzebuję wychodzi w kosmicznych pieniądzach i tylko w subskrypcji (Connectors-y były w cenie licencji na Delphi).
Wymyśliłem sobie obejście polegające na wrzuceniu wszystkich komponentów z CData-y razem z połączeniem do FireDAC-a do dll-ki. Korzystam z tego na kilku formatkach więc samo wyświetlanie danych i tabelki mam w aplikacji a jedynie połączenie jest w dll. Niestety nie działa to jak oczekiwałem. Jeśli odseparuję dll od aplikacji tak, że z dll udostępniam FDConnection i FDQuery to do aplikacji FDConnection trafia bez połączenia z Connectors-ami z CData-y - tzn. poprawne połączenie do Accessa z poziomu dll nie przekazuje połączenia do aplikacji (dostaję invalid typecast bo w aplikacji nie widać już sterowników do połączenia z dll). Jeśli dam aplikacji dostęp do unitów z dll to sterowniki w apce są widoczne ale nie działa wtedy Delphi 12 bo nie rozpoznaje komponentów CData-y.
Próbowałem na kilka sposobów rozdzielić dll ze sterownikami od apki ale za każdym razem wychodzi problem połączenia w apce albo problem kompilacji na Delphi 12.
Czy ktoś korzysta z FireDAC-a i ma podobne problemy? Mogę zostać na Delphi 11.3 i problem z głowy ale w nowszych wersjach zawsze jest coś lepiej i staram się być na bieżąco skoro mam taką możliwość z dostępem do nowej wersji.
Z tego co patrzyłem rozwiązaniem mógłby być UniDac. Tylko że tam nie mam dostępu do Excela a to jest w zasadzie kluczowe na tą chwilę. Wolałbym nie łączyć różnych rozwiązań np. FlexCella z UniDac bo potrzebuję w miarę uniwersalnego rozwiązania.
Trochę wybrzydzam ale może ktoś ma jakiś ciekawy pomysł jak to ugryźć?

0
  1. nie bardzo wiem co ma embarcadero do FireDAC connectors przecież to są osobne firmy
  2. to, że nie ma wsparcia wcale nie oznacza, że nie będą działać - próbowałeś zainstalować i zobaczyć czy działa?
  3. przekazywanie obiektów z DLL do EXE (albo w drugą stronę) jest mocno średnim pomysłem
  4. możesz owinąć DAL w interfejsy i zamknąć je w DLL (w delphi 11.3) a na zewnątrz udostępniać je przez COM - będzie działać na 100% ale na wstępie trzeba się będzie trochę narobić
0

Dzięki za odpowiedź.

  1. Licencje na Connectory były udostępnione w ramach licencji Delphi i są przeznaczone do FireDAC-a więc wydaje mi się z miarę logiczne zapytanie do nich czy mają jakiś plan. Nie jestem raczej jedynym klientem który z tego korzystał więc podobnych uwag mogą mieć więcej.
  2. Nie programuje od roku żeby najpierw się martwić a później sprawdzać. Po aktualizacji całego środowiska w wersji 12 wyniknął problem więc zacząłem szukać rozwiązania. Najpierw oczywiście był kontakt do CData.
  3. Tak wiem ale zawsze to jakiś pomysł. Moje się skończyły więc napisałem tutaj.
  4. Mogę prosić o rozwinięcie DAL? DLL mam na interfejsie ale końcówki są już z komponentami jak pisałem. Potrzebuję dostać zwrotnie z DLL DataSet-a żeby wyświetlić informacje w tabelce. W pierwszej próbie miałem właśnie tylko interfejsy ale FDConnection z Delphi 11 jest inny w Delphi 12 i dostawałem wyjątki o nie znalezieniu jakiś metod.
0

DAL- data access layer (generalnie część, która odpowiada za pozyskiwania danych z różnych źródeł i zwracanie ich do aplikacji w zunifikowany sposób).

Jeśli używasz bindowania to możesz się podpiąć kontrolkami do dowolnego źróła danych - listy, tablicy (array), obiektu czy interfejsu. Jeśli natomiast działasz "po staremu" i używasz data set i data source to rozwiązaniem mogło by być napisanie własnej implementacji TDataSet, która będzie wraperem na dane, które dostaniesz z DLL. Jeszcze inaczej możesz użyć TFDTable i użyć go jako pośredniego pojemnika na dane.

Oczywiście możesz też zostać na 11.3 i tyle.

Co do pytania czy próbowałeś zainstalować na 12 to chodziło mi o to, że o ile nie ma wsparcia to jednak Delphi zachowuje dość dobrze kompatybilność wsteczną (ostatni raz, kiedy zostałą ona złamana to wprowadzenie unicode) więc o ile masz źródła tych komponentów to nie powinno być problemów aby je zainstalować i zmusić do działania

0

Niestety nie mam pełnych źródeł, część kodu jest w dcu. Jest jeszcze kwestia kodu licencyjnego generowanego przy instalacji. Jeśli jest ten sam dla każdego użytkownika a nie dla każdej wersji Delphi i użytkownika to może się uda. Próbowałem właśnie ręcznie dodać odpowiednie unity i wychodzą różnice w FireDAC dla D11 i D12. Zobaczę jeszcze czy nie będę w stanie ich ominąć. Przeportowanie źródeł na nową wersję byłoby najlepszym rozwiązaniem i chyba jeszcze raz do niego wrócę.
Tabele wyświetlam w gridzie od DevExpressa więc najprościej idzie po datasecie. Z bindowania nie miałem okazji ani potrzeby jeszcze korzystać.
Najpierw faktycznie spróbuję jeszcze z instalacją komponentów.
Wrócę z informacją co i jak poszło.

0

Mała aktualizacja.
Komponentów nie dało się zainstalować w IDE. Poza źródłami są gotowe BPL-e i DCU dedykowane na konkretną wersję Delphi. Podłączyłem za to źródła, poprawiłem tak gdzie krzyczał że coś nie gra i o dziwo program się skompilował. Uruchomiłem aplikację (na razie testowo dla jednego sterownika z kilkunastu potrzebnych bo trochę brak czasu podczas majówki) i wczytało dane poprawnie. Na środowisku developerskim wiem jednak że te sterowniki działają trochę inaczej bo nie czytają licencji, która idzie z IDE więc sprawdziłem czy 'u mnie działa' też na innym sprzęcie. Odpaliłem tą samą wersję Windowsa na VirtualBoxie i pac - AV, nie znaleziono pliku z biblioteki w lokalizacji..... Był jeszcze komunikat żeby sprawdzić czy mam dobrze ustawione bity 64 albo 32 i podpięte odpowiedni pliki. Trochę się zasmuciłem ale coś mi nie grało. Przerzuciłem program na inny fizyczny komputer i tadam - działa!
To teraz szybkie przemyślenie OCB. Wpatruje się w ten komunikat z błędu na maszynie wirtualnej a tam szuka mi biblioteki w ścieżce w nazwą użytkownika na koncie hosta 😀 Chyba jakieś zabezpieczenie żeby nie tworzyć z tego serwera i nie udostępniać na innej licencji niż udzielona. Nie wnikam co i po co to zrobili, ważne że udało się to odpalić.

Pełnego sukcesu może nie ma, ponieważ nie mam jak dodać komponentów przez IDE (musiałbym dodawać w Delphi 11 a później przesiadać się na Delphi 12) ale może samo dodawanie źródeł (też muszę pospisywać co jest wymagane) pozwali na poprawne działanie. Kilka testów jeszcze będę musiał wykonać dla pewności czy na pewno wszystko jest ok ale na pierwszy rzut oka da się na tym pracować.

Dzięki za zwrócenie uwagi z tą instalacją komponentów, widać za szybko się poddałem.


Ostatnia aktualizacja wpisu.
Jednak pełny sukces. Udało się zainstalować komponenty w IDE, wrzucić jeszcze oryginalne ikonki do palety komponentów i przygotować jedną paczkę do instalacji wszystkiego w razie kolejnej aktualizacji Delphi. Skompilowane BPL-e o które się martwiłem to po prostu gotowe paczki kompilowane na daną wersję Delphi. Można je olać jak samemu się przygotuje paczki do instalacji.
Odkładałem przesiadkę na nowe Delphi kilka miesięcy, później kilka dni próbowałem przerzucić sterowniki na DLL (tu akurat tylko cześć czasu straciłem bo z DLL-ki skorzystam) a okazało się że wystarczy godzina pracy i wszystko gotowe 😏

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