Delphi XE7, FireDAC i PostgreSQL - wymagana biblioteka libpq.dll

0

Witam serdecznie.
Na warsztat wziąłem najnowsze dostępne środowisko Delphi XE7 wersja trial i testuję działanie FireDAC-a w połączeniu z bazą PostgreSQL, wszystko działa niby ok. Jest jednak małe ale... chodzi o to że do dystrybucji razem z plikiem exe konieczny jest plik libpq.dll. To jak to w końcu jest z tym FireDAC-iem łączy się natywnie czy potrzebuje zewnętrznej biblioteki ?
W tym tutorialu Marco Cantu mówi że FireDAC ma sterowniki do baz napisane w pascalu i kompiluje je bezpośrednio w projekcie i tak zresztą reklamują FireDAC-a.
Czy może tylko wersja trial nie posiada takiej funkcjonalności ?

Oczywiście do projektu dodaję uses FireDAC.Phys.PG oraz FDPhysPgDriverLink1.

0

mylisz pojęcia - sterownik natywny, czyli nie ODBC czy dbExpress. Plik libpq.dll to biblioteka do natywnego połączenia z postgresem - API, które wraz ze zmianą silnika bazy nie zmienia się dla końcowego użytkownika (programisty). Każda baza ma własnego klienta.

0
xs1 napisał(a):

Witam serdecznie.
Na warsztat wziąłem najnowsze dostępne środowisko Delphi XE7 wersja trial i testuję działanie FireDAC-a w połączeniu z bazą PostgreSQL, wszystko działa niby ok. Jest jednak małe ale... chodzi o to że do dystrybucji razem z plikiem exe konieczny jest plik libpq.dll. To jak to w końcu jest z tym FireDAC-iem łączy się natywnie czy potrzebuje zewnętrznej biblioteki?

Wszystkie bazy danych oferują tzw. klienta, czyli bibliotekę (lub zestaw bibliotek) które są niezbędne do obsługi danej bazy danych. W przypadku PostgreSQL jest to libpq.dll.

W tym tutorialu Marco Cantu mówi że FireDAC ma sterowniki do baz napisane w pascalu i kompiluje je bezpośrednio w projekcie i tak zresztą reklamują FireDAC-a.

Marco nie ma monopolu na prawdę, a ten tutorial jest po prostu słaby (bo powstał na szybko jak Emba przejęła AnyDAC i jest zlepkiem materiałów Dmitriego - autora AnyDAC). To raz.
Dwa - Marco musi tak mówić, bo to marketing ;-)
A prawda jest taka; FireDAC posiada własną implementację obsługi natywnych bibliotek konkretnej bazy danych. Dzięki temu, FireDAC obsługuje taką bazę wydajnie i pewnie, a także pozwala na wykorzystanie jej specyficznych właściwości (np. Eventy dla Firebird czy FileStream dla MSSQL, itd.).

Czy może tylko wersja trial nie posiada takiej funkcjonalności ?

Trial nie ma tu nic do rzeczy.

Oczywiście do projektu dodaję uses FireDAC.Phys.PG oraz FDPhysPgDriverLink1.

Wystarczy samo użycie konkretnego modułu, co de-facto się dzieje kiedy położysz komponent niewizualny FDXXXDriverLink.

0

abrakadaber i wloochacz bardzo dziękuję za potwierdzenie moich spostrzeżeń.
A czy znacie jakiś sprawdzony i działający sposób na ładowanie bibliotek dll z zasobów ? Jest co prawda BTMemoryModule ale z tego co udało mi się wyczytać (wypowiedź olesio) radzi sobie z dll-kami napisanymi w Delphi ….?

0

Po co ładować bibliotekę z zasobów? Rozumiem, że chcesz aby Twój program wymagał specjalnych uprawnień przy uruchamianiu?
Dołączasz ją do instalki swojego programu, kopiujesz do katalogu z exe i działa.

0

No racja może przekombinowane, ale jestem troche zniesmaczony FireDAC-iem... a jak to jest w przypadku UniDAC-a http://www.devart.com/unidac/ czy też potrzebuje zewnętrzne biblioteki ?

0
xs1 napisał(a):

No racja może przekombinowane, ale jestem troche zniesmaczony FireDAC-iem...

Zniesmaczony?
Bawisz się nim kilka(naście?) godzin i już zdążyłeś sobie wyrobić opinię?
Zazdroszczę - ja UŻYWAM i rozwijam FireDAC'a od wersji 0.8 AnyDAC (czyli jakieś 9 lat) i twierdzę, że to najlepsza biblioteka do obsługi baz danych dla Delphi jaka kiedykolwiek się ukazała.
Znam i używałem w kom rożnych projektach IBX, FIBPlus, ADO, SDAC, dbExpress (z nieistniejącymi już rozszerzeniem firmy Luxena) i dawno temu BDE.

Komponenty DevArtu są bardzo dobre, ale FireDAC ma zdecydowanie większą funkcjonalność.
Tylko trzeba wiedzieć jak i do czego tego użyć - no, a tu już jest problem...

a jak to jest w przypadku UniDAC-a http://www.devart.com/unidac/ czy też potrzebuje zewnętrzne biblioteki ?

Nie (jako opcja); ale użyj google, nie szukaj frajera.

0

@wloochacz źle odebrałeś moją wypowiedź a chyba też nie za precyzyjnie się wyraziłem, tak więc już wyjaśniam... zniesmaczony jestem tym faktem że mówią/piszą no natywnym połączeniu bez użycia dodatkowych zewnętrznych bibliotek a faktycznie jest inaczej :/

W międzyczasie ściągnąłem triala UniDAC-a i wygląda na to że faktycznie „On” nie potrzebuje dodatkowych bibliotek dll.
tylko wersja trial nie linkuje do exe dac210.bpl i unidac210.bpl

0
xs1 napisał(a):

@wloochacz źle odebrałeś moją wypowiedź a chyba też nie za precyzyjnie się wyraziłem, tak więc już wyjaśniam... zniesmaczony jestem tym faktem że mówią/piszą no natywnym połączeniu bez użycia dodatkowych zewnętrznych bibliotek a faktycznie jest inaczej :/

I tak i nie, ale to naprawdę nieważne skoro nie rozumiesz co to jest "database client".
Niektóre bazy danych posiadają możliwość połączenia via TCP/IP bezpośrednio z bazą danych (np. PostgreSQL), bez użycia standardowego klienta. I takiej opcji połączenia z bazami FireDAC nie wspiera. Kropka.
Ale wspiera natywne biblioteki baz danych i nie wymaga do tego dodatkowych pośredników (ODBC, ADO, OLEDB, itd.). I też kropka.

W międzyczasie ściągnąłem triala UniDAC-a i wygląda na to że faktycznie „On” nie potrzebuje dodatkowych bibliotek dll.
tylko wersja trial nie linkuje do exe dac210.bpl i unidac210.bpl

Przepraszam, że co? Co nie linkuje czego? Delphi niczego nie linkuje, albo wkompilowuje do exe niezbędne DCU, albo dołącza wymagane pakiety (do exe lub Twojego pakietu) jeśli używasz kompilacji z pakietami.
A używasz?

0

Oczywiście kompilacja z dołączaniem pakietów a i tak komunikat wygląda

a64f811cd814cf80.png

dodanie obrazka do załączników posta - furious programming

0

Ten błąd pojawia się pod IDE czy jak odpalasz exe?
Jeśli przy exe - dołączyłeś te pakiety do exe lub wgrałeś je do katalogu PATH?
Przecież masz napisane jak wół co i jak.

BTW - "jęczysz" nad jedną biblioteką z PostgreSQL, ale nie przeszkadza Ci dołączenia kilkudziesięciu BPL do exe? ;-)
Bo bez tego to nie zadziała u klienta - nie ma mowy.

0

Odpowiedź z support-u UniDAC-a :

If you are using UniDAC Trial, then, independently on the "Build with runtime packages" option value, you have to deploy *.bpl packages along with the application.

dodanie znacznika <quote> - furious programming

0
xs1 napisał(a):

Odpowiedź z support-u UniDAC-a :
„If you are using UniDAC Trial, then, independently on the "Build with runtime packages" option value, you have to deploy *.bpl packages along with the application.”

Przecież dokładnie to miałeś napisane w okienku z błędem, prawda?
Prawda.
Sorry, ale jak do tego Ci potrzebny support to naprawdę NIE ładuj się w pakiety, bo nie ogarniesz.
No chyba, że bardzo chcesz...

0

Z całym szacunkiem dla twojej wiedzy wloochacz ale wszystkich rozumów to żeś nie pozjadał...
Z UniDAC-em chodzi o to że czy dołączysz „z czy bez” pakietów, wersja trial przygotowana jest w ten sposób że i tak wymaga dystrybucji exe z dac210.bpl i
unidac210.bpl koniec kropka.

http://www.devart.com/unidac/docs/index.html?deployment.htm

0
xs1 napisał(a):

Z całym szacunkiem dla twojej wiedzy wloochacz ale wszystkich rozumów to żeś nie pozjadał...

Ano, "żem" nie pozjadał... Tyle, że ja z pakietami za pan brat od bardzo dawno (dokładnie od Delphi 2006) i wierz mi - dokładnie wiem, co jak i kiedy.

Z UniDAC-em chodzi o to że czy dołączysz „z czy bez” pakietów, wersja trial przygotowana jest w ten sposób że i tak wymaga dystrybucji exe z dac210.bpl i
unidac210.bpl koniec kropka.
http://www.devart.com/unidac/docs/index.html?deployment.htm

Pytałem się grzecznie - kompilujesz exe z pakietami? Odpowiedziałeś, że tak. I kropka.
Dwa - dostałeś na twarzy wyjątek z UniDAC? Dostałeś, a w nim napisane jak wół stało co i jak.

O to czy się da czy się nie da... może się da, a może nie.
Na pewno da się wkompilować jeden pakiet w inny (a dokładnie - moduły który dany pakiet zawiera), ale do tego trzeba mieć źródła pakietów.
A jak ich nie masz - trzeba sobie zrobić i tak, da się to zrobić bez posiadania źródeł modułów.

Tyle, że to naprawdę nieistotne w tym konkretnym przypadku...

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