Italian community of Lazarus and Free Pascal

Programmazione => Databases => Topic aperto da: opto - Marzo 16, 2022, 03:09:29 pm

Titolo: Errore con ZEOS dopo aggiornamento Lazarus 2.2.0
Inserito da: opto - Marzo 16, 2022, 03:09:29 pm
Salve a tutti
Ho un problema con ZEOS (credo). Ho dei programmi in cui ho utilizzato Zeos per connettermi a PostgreSQL che funzionavano correttamente. Dopo aver fatto l'aggiornamento a Lazarus dalla 2.0 alla 2.2 e aver reinstallato ZEOS mi compare sempre questo errore:

Client-Library C:\Program Files\PostgreSQL\12\bin\libpq.dll found but could not be loaded. Check compile-target and library compatibility!


Questo si verifica quando cerco di connettere il TZConnection.
Ho provato anche a copiare libpq.dll nella cartella del progetto ma non cambia nulla.
Non ho fatto nessun aggiornamento a PostgreSQL e l'eseguibile che avevo creato precedentemente continua a funzionare correttamente.
Qualcuno ha già avuto un problema simile?
Titolo: Re:Errore con ZEOS dopo aggiornamento Lazarus 2.2.0
Inserito da: DragoRosso - Marzo 16, 2022, 03:54:48 pm
Sembrerebbe essere un errore legato non tanto alla libreria che viene trovata, ma a qualche ulteriore DLL che non esiste, comunque ...

Tanto per cominciare, la libreria a cui accedi è X64, hai verificato nelle opzioni di progetto che il tuo progetto sia per X64 ? Se fosse per x86 (32 bit) non potrebbe funzionare.

Ulteriormente, nelle proprietà di ZConnection, hai verificato che la versione di Postgress indicata nella proprietà "protocol" sia quella che effettivamente usi ? Può essere che con l'aggiornamento quel dato sia stato modificato.

Ciao
Titolo: Re:Errore con ZEOS dopo aggiornamento Lazarus 2.2.0
Inserito da: opto - Marzo 16, 2022, 06:51:38 pm
Grazie per la risposta rapida.

La libreria è prelevata dalla cartella in cui è installato Postgresql.
Ho provato con quella nella directory   C:\Program Files\PostgreSQL\12\bin\libpq.dll
e l'altra nella                                     C:\Program Files\PostgreSQL\12\lib\libpq.dll
Ritengo che siano X64.
Ma non funzionano.
Nel TZConnection nella proprietà "protocol" non è presente "postgresql-12" ma solo fino a "postgresql-9". Tuttavia con questa proprietà precedentemente funzionava su questa stessa macchina w10 I7 . Ho provato anche con la proprietà non indicizzata "postgres".
Ho anche disinstallato completamente Lazarus, disintallato zeos installata con online package Manager e reinstallato con zeos scaricato direttamente da sourceforgenet.
Titolo: Re:Errore con ZEOS dopo aggiornamento Lazarus 2.2.0
Inserito da: DragoRosso - Marzo 16, 2022, 09:36:13 pm
Ho installato progress e provo a vedere se riesco a replicare il problema.
..........
Titolo: Re:Errore con ZEOS dopo aggiornamento Lazarus 2.2.0
Inserito da: DragoRosso - Marzo 16, 2022, 09:55:47 pm
A me funziona senza problemi nei due modi previsti da progres (nel caso della DLL ho provato sia progres che progres-9)

In particolare, provando con altri ambienti nessuno usa la dll per la connessione, ma usano tutti il TCP.

Io ho usato 2nQuadrant, che mi ha installato tutto compreso OmniDB così potevo fare una serie di test.

Ti posto l'immagine di connessione tramite DLL e tramite TCP.

Ti consiglio di provare a connetterti tramite TCP per vedere se almeno così temporaneamente tamponi.

EDIT: Lazarus 2.20 stable X64 con ZEOS (la versione la vedi negli llegati)

Ciao
Titolo: Re:Errore con ZEOS dopo aggiornamento Lazarus 2.2.0
Inserito da: opto - Marzo 17, 2022, 07:42:03 pm
Grazie ancora del tuo tempo.
Ho provato come mi hai suggerito e non funziona. Ho provato sia in localhost che su PGSQL sul NAS. Sempre errore di compatibilità.
Ho cercato sul form inglese ed il problema era presente nel 2016 e dicevano di installare alcune librerie da cui dipendeva libpq.dll ma in quel modo anche se si connetteva non consentiva di modificare i dati sul db.
https://forum.lazarus.freepascal.org/index.php/topic,31964.msg205610.html#msg205610

In alternativa vorrei usare tpqConnection di SQLdb ma anche qui dice che non trova libpq.dll. Ho provato a collocarne una copia nella cartella del progetto ma non funziona.

Titolo: Re:Errore con ZEOS dopo aggiornamento Lazarus 2.2.0
Inserito da: DragoRosso - Marzo 17, 2022, 09:27:47 pm
Grazie ancora del tuo tempo.
Ho provato come mi hai suggerito e non funziona. Ho provato sia in localhost che su PGSQL sul NAS. Sempre errore di compatibilità.
Ho cercato sul form inglese ed il problema era presente nel 2016 e dicevano di installare alcune librerie da cui dipendeva libpq.dll ma in quel modo anche se si connetteva non consentiva di modificare i dati sul db.
https://forum.lazarus.freepascal.org/index.php/topic,31964.msg205610.html#msg205610

In alternativa vorrei usare tpqConnection di SQLdb ma anche qui dice che non trova libpq.dll. Ho provato a collocarne una copia nella cartella del progetto ma non funziona.

Il problema era noto e come ti avevo accennato inizialmente anche secondo me poteva dipendere dalla mancanza di DLL.

Ma la connessione TCP non ha necessità di quella libreria. Controlla bene quello che hai fatto e guarda il mio allegato .... NON C'E' il collegamento alla DLL nell'immagine riguardante il collegamento TCP.

NON DEVI IMPOSTARE LA DLL, se no Lazarus usa quella e non l'HOST......

Ciao
Titolo: Re:Errore con ZEOS dopo aggiornamento Lazarus 2.2.0
Inserito da: opto - Marzo 18, 2022, 06:47:07 pm
Provato di nuovo ma quando provo a connettere mi da l'errore come si vede nell'allegato. Proverò a passare tutto su un'altra macchina per vedere se per caso il problema non è nel S.O.

Buonaserata
Titolo: Re:Errore con ZEOS dopo aggiornamento Lazarus 2.2.0
Inserito da: Stilgar - Marzo 18, 2022, 07:05:44 pm
Ciao
https://www.blackice.com/Help/Tools/PrinterDriver%20Demo/RTK_Full_WebHelp/How_to_check_the_dll_is_32_or_64-bit.htm


Magari la DLL è della "versione" giusta, ma dare una controllata non credo sia un'idea sbagliata :)


Stilgar
Titolo: Re:Errore con ZEOS dopo aggiornamento Lazarus 2.2.0
Inserito da: opto - Marzo 18, 2022, 07:52:19 pm
Grazie anche a te
 Verificato è la versione giusta  tuttavia segnala alcuni errori  nella DLL
Error: At least one required implicit or forwarded dependency was not found.
Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module.
Error: A circular dependency was detected.
Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.


Ma non credo che possa dipendere da questi perche altri eseguibili compilati prima dell'aggiornamento funzionano ancora bene.
Titolo: Re:Errore con ZEOS dopo aggiornamento Lazarus 2.2.0
Inserito da: DragoRosso - Marzo 18, 2022, 09:56:48 pm
Quegli errori sono normali. Sicuramente fanno riferimento ad Asssembly che possono essere "bindati" solo a runtime (tipicamente le API del .Net Framework).

L'errore che ti riporta ZEOS invece non è normale. Avrebbe dovuto connettersi tramite TCP, non tramite la libreria dll.

Non è che hai copie della dll nella stessa directory del tuo programma eseguibile ?

Ciao

Titolo: Re:Errore con ZEOS dopo aggiornamento Lazarus 2.2.0
Inserito da: schumi - Marzo 21, 2022, 08:52:42 am
ciao,
io uso abitualmente lazarus 2.2 + zeos 7.2.14.0 (via OPM) e postgresql, sia 64 che 32 bit, quindi non è un problema di zeos o versione Laz.
tempo fa avevo installato un programmino fatto da me su un server windows e non funzionava, ho dovuto scaricare libeay32.dll e ssleay32.dll diverse per quella macchina.

Prova a copiare tutte le DLL PGSQL nella cartella del tuo programma.
dovrebbero essere queste
libcrypto-1_1-x64.dll
libcurl.dll
libeay32.dll
libecpg.dll
libiconv-2.dll
libintl-8.dll
libpgtypes.dll
libpq.dll
libssl-1_1-x64.dll
libxml2.dll
libxslt.dll
ssleay32.dll
zlib1.dll
Titolo: Re:Errore con ZEOS dopo aggiornamento Lazarus 2.2.0
Inserito da: opto - Marzo 21, 2022, 07:39:10 pm
Ciao
ho provato a copiare le DLL che mi hai indicato ma non è servito. Per scrupolo ho copiato TUTTE le DLL di pgsql nella cartella del programma ma ottengo lo stesso risultato. Disinstallato Lazarus e Reinstallato ma ancora niente. Ho anche provato ad aprire un nuovo programma senza unit particolari ma rimane uguale.
Titolo: Re:Errore con ZEOS dopo aggiornamento Lazarus 2.2.0
Inserito da: DragoRosso - Marzo 21, 2022, 08:19:22 pm
Scusa un attimo, facciamo un punto 0.

Intanto da terminale e dalla bin di Postgres, prova a digitare:

Codice: [Seleziona]
pg_isready

Dovresti avere una risposta tipo questa.
Codice: [Seleziona]
C:\Program Files\2ndQuadrant\PostgreSQL\12\bin>pg_isready.exe
/tmp:5432 - accepting connections

Confermi ?
Titolo: Re:Errore con ZEOS dopo aggiornamento Lazarus 2.2.0
Inserito da: opto - Marzo 22, 2022, 11:24:45 am
Scusa se non ho risposto subito.
Confermo che la risposta è
/tmp:5432 - accepting connections
Titolo: Re:Errore con ZEOS dopo aggiornamento Lazarus 2.2.0
Inserito da: DragoRosso - Marzo 22, 2022, 12:04:16 pm
Allora è probabile che per qualche motivo la connessione venga rifiutata.

IMPORTANTE: NON DEVI AVERE ALCUNA DLL DI Postgres nella directory del tuo eseguibile o nel percorso PATH (diciamo che protresti cercare la "libpq.dll" in tutto il disco per vedere se ci sono copie nelle directory di sistema).

Se non ce ne sono (quindi nessuna libpq.dll è accessibile) , allora cercando di accedere con TCP deve darti un risultato. Se neanche così ci accedi e ottieni lo stesso errore, allora ZEOS probabilmente categorizza gli errori di connessione TUTTI in quel modo.

In Postgres 12, potrei sbagliare su ciò che dico però, dovrebbe essere obbligatoria la connessione "protetta" con TLS (o SSL). Quindi tendenzialmente dovresti avere ssleay32.dll e libeay32.dll nella directory del tuo eseguibile (le librerie anche se hanno nel nome il "32" devono essere della versione del tuo eseguibile quindi 32 o 64 bit ... ma si chiameranno sempre "32").

Prova ad buildare un programma (con solo il componente ZConnection) e ad attivare la connessione  solo a runtime e con le due librerie nella directory del tuo eseguibile.

Vediamo se dà ancora errore di connessione .....

Ciao
Titolo: Re:Errore con ZEOS dopo aggiornamento Lazarus 2.2.0
Inserito da: opto - Marzo 23, 2022, 12:55:16 am
Ho tolto tutto, ma se non indico la libpq.dll la richiede continua a richiedere la libpq.dll Errore 1 allegato
Se non indico la libpq.dll produce errore2 allegato

Copiate ssleay32.dll e libeay32.dll nella directory dell'eseguibile dopo aver verificato che fossero 64bit. Non cambia nulla.
Titolo: Re:Errore con ZEOS dopo aggiornamento Lazarus 2.2.0
Inserito da: schumi - Marzo 23, 2022, 11:14:32 am
ciao
prova con questo progetto test, ho tutto 64bit e funziona