Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Collegare Excel ad un database PostGres SQL

548 views
Skip to first unread message

draleo

unread,
Mar 26, 2017, 5:22:06 AM3/26/17
to
Per collegare Excel ad un Data base Sybase SQL utilizzavo, con SUCCESSO , la seguente stringa di conessione

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
On Error GoTo RigaErrore
cn.CursorLocation = 1
cn.Open "Provider=MSDASQL; " & _
"dsn=miodatabase;uid=XXX;pwd=YYY"

Ora , da quando il mio database è migrato a PostgreSQL , logicamente ottengo il seguente errore:
“Errata corrispondenza di architettura tra il driver e l’applicazione nel DNS specificato.
Allora Ho provato ad inserire nella stringa quello che , da ricerche fatte sul Web, ritenevo sia il nuovo provider
cn.Open "Provider=PostgreSQL_unicode " & _
ma ottengo quest’altro errore
“ impossibile trovare il provider. È possibile che non sia stato installato correttamente”
Ho cercato sul web in lungo e in largo, ma non riesco a trovare la soluzione giusta.
Forse PostGreSQL_Unicode è il driver e non il provider?
Qualcuno può darmi qualche indicazione generale per capirci qualcosa ?
Che differenza c’è tra Provider e driver ?
Quali driver SQL e/o provider SQL caricare ?
grazie
draleo

Davide

unread,
Mar 26, 2017, 9:31:33 AM3/26/17
to

<<Forse PostGreSQL_Unicode è il driver e non il provider?

PostgreSQL Unicode è un driver e se lo usi direttamente la stringa deve
riportare anche il numero di porta oltre alle credenziali e nome database.
Invece il provider-dns usa una porta di default;
Installalo da qui per creare il DSN :
http://pgfoundry.org/projects/oledb/

e poi
cn.ConnectionString = "Provider=PostgreSQL OLE DB Provider;Data
Source=localhost;Location=<database>;User ID=<user_id>;Password=<password>"

draleo

unread,
Mar 27, 2017, 9:41:09 AM3/27/17
to
Scusa l’ignoranza, ma non riesco a caricarli
1)Ho scaricato dal sito indicato il file PgOledb
2)Seguendo le istruzioni dovrei copiare i files PGOLEDB.DLL and LIBPQ.DLL into your system
Prima Domanda: qual è la cartella dove devo copiare questi files ?
3)Poi , sempre seguendo le istruzioni, dovrei eseguire "regsvr32 PGOLEDB.DLL”
Seconda domanda: come eseguire questo punto 3?
Puoi darmi ulteriori delucidazioni su questi ultimi 2 punti
Grazie
draleo

Davide

unread,
Mar 27, 2017, 3:01:38 PM3/27/17
to


"draleo" ha scritto nel messaggio
news:b884c8f6-974f-4d6c...@googlegroups.com...

<2)Seguendo le istruzioni dovrei copiare i files PGOLEDB.DLL and LIBPQ.DLL
into your system
<Prima Domanda: qual è la cartella dove devo copiare questi files ?


copy in your system directory : è la cartella C:\Windows\System32


<<3)Poi , sempre seguendo le istruzioni, dovrei eseguire "regsvr32
PGOLEDB.DLL”


clicca sul simbolo di Windows che si trova nella parte sinistra della barra
delle applicazioni in basso e nella casella di ricerca rapida scrivi
'esegui' (oppure clicca direttamente sulla voce
di menù Esegui se presente) . In automatico apparirà la voce 'Esegui' nella
parte bassa del menù, cliccaci sopra.
Non ti resta che digitare il comando direttamente nella finestra 'Esegui' e
cliccare ok.



draleo

unread,
Mar 28, 2017, 6:31:24 AM3/28/17
to
Ho eseguito le istruzioni, credo correttamente.
Ma quando ,da Excel, per connettermi al Data base,
vado ad eseguire il seguente comando
cn.Open " Provider=PostgreSQL OLE DB provider;Server=localHost;Port=5432;" & _
"DataBase=zzzzz;uid=xxx;pwd=yyy"

mi dice: impossibile trovare il provider: è possibile che non sia stato installato correttamente
Da dove si può verificare se il provider è stato installato ?
draleo

Davide

unread,
Mar 28, 2017, 2:54:40 PM3/28/17
to


"draleo" ha scritto nel messaggio
news:f00a2f5f-b131-47ce...@googlegroups.com...

<<Da dove si può verificare se il provider è stato installato ?


nella finestra esegui incolla:

%systemdrive%\Windows\SysWoW64\odbcad32.exe

oppure se hai un ambiente 64bit:

c:\windows\system32\odbcad32

e vedi se nella lista dei provider c'è.

draleo

unread,
Mar 28, 2017, 4:11:52 PM3/28/17
to
No. In entrambi i casi il provider PgOLEdb non c'è.
in effetti quando ho provato a caricarlo con il comando
regsvr32.exe C:\Windows\System32\PGOLEDB.DLL
ricevo questo messaggio di errore
"Il modulo è stato caricato,ma la chiamata a dllRegister Server non è riuscita. Errore 0x80020009"
Considerando che il mio data base Postgres è a 32 bit (utilizzato in un sistema a 64 bit),ho provato anche a mettere questo PgOLEdb nella cartella SysWow64 e a caricarlo con il comando
regsvr32 C:\Windows\SysWow64\PGOLEDB.DLL
ma riporta sempre lo stesso errore.
Ho provato in 2 diversi PC con Win 10, ma in entrambi , quando cerco di connettermi da Excel
con la stringa
cn.Open "Provider=PGOLEDB; " ecc ecc
mi dice: impossibile trovare il provider: è possibile che non sia stato installato correttamente .
Ho provato anche ad utilizzare il driver, anzichè il provider, cioè
cn.Open "Driver=PostgreSQL UNICODE; ecc ecc
ma in questo caso risponde con un altro tipo di errore "impossibile trovare il provider"
vattelapesca perchè
Rimpiango di aver fatto la conversione-obbligatoria- da Sybase a postGres. Prima riuscivo ad estrarre da Excel tutto quello che volevo...
Esistono altri provider da provare a caricare, per connettersi a questo benedetto PostGres ?

draleo

Davide

unread,
Mar 28, 2017, 5:48:30 PM3/28/17
to


"draleo" ha scritto nel messaggio
news:63fab69f-1bdc-47cb...@googlegroups.com...

<"Il modulo è stato caricato,ma la chiamata a dllRegister Server non è
riuscita. Errore 0x80020009"

prova ad eseguire Regsvr32.exe dalla cartella %SystemRoot%\Syswow64



dalla finestra del dos usa il comando per cambiare directory (cd) :

cd \windows\syswow64

e poi digita il comando:


regsvr32 C:\Windows\System32\PGOLEDB.DLL

Davide

unread,
Mar 28, 2017, 5:51:15 PM3/28/17
to


"Davide" ha scritto nel messaggio news:obelna$16hd$1...@gioia.aioe.org...


<dalla finestra del dos usa il comando per cambiare directory (cd) :

la finestra la devi aprire come amministratore

draleo

unread,
Mar 29, 2017, 5:48:38 AM3/29/17
to
Ho eseguito quanto suggerito da te. Per non sbagliare Ho caricato il provider in entrambe le cartelle: System32 e SysWOW64.E stavolta, contrariamente a quanto avveniva prima, mi risponde che i file sono stati caricati correttamente. Però quando vado a digitare

%systemdrive%\Windows\SysWoW64\odbcad32.exe

oppure

c:\windows\system32\odbcad32
non c'è traccia del provider e francamente non ne capisco il perchè
E soprattutto quando cerco di connettermi da Excel
con la stringa
cn.Open "Provider=PGOLEDB; " ecc ecc oppure
cn.Open "Provider=PostgreSQL OLE DB Provider;
mi dice: impossibile trovare il provider: è possibile che non sia stato installato correttamente .
Evidentemente la cosa è più complicata di quanto pensassi; esiste qualche programma che carichi automaticamente queste dll in maniera corretta, in maniera almeno di riuscire a visualizzarle ?
Grazie ancora per la tua pazienza
draleo

Davide

unread,
Mar 30, 2017, 5:48:30 PM3/30/17
to


"draleo" ha scritto nel messaggio
news:e5a5991f-0b64-4748...@googlegroups.com...
<Evidentemente la cosa è più complicata di quanto pensassi; esiste qualche
programma che carichi automaticamente queste dll in maniera corretta, in
maniera almeno di riuscire a visualizzarle ?


Ho provato il driver ODBC autoinstallante (32 bit o 64) :

https://www.postgresql.org/ftp/odbc/versions/msi/

Poi ho creato la nuova DSN ( pannello di controllo\strum.di
amministrazione\origini dati 32 o 64 a seconda del tuo pc e\o excel e\o
database , clic su aggiungi e scegli il driver appena installato),nel mio
caso chiamandola PostgreSql30.

Poi uso la stringa in VBA :

cn.Open "DSN=PostgreSql30;Server=localhost;Port=5432;" & "UID=postgres;" &
"PWD=sistema;Database=miodatabase;"

E mi connette senza errori.

E connette senza errori anche nell'import dati grafico : Excel\scheda DATI
\da altre origini \connessione guidata\DNS odbc \PostgreSql30

ciao

draleo

unread,
Mar 31, 2017, 4:20:35 AM3/31/17
to
Grazie per il tempo che mi hai dedicato. Sul sito indicato dove scaricare i drivers, ce ne sono una marea. Allora, per evitare di caricarne uno errato e poi tornare a romperti in caso di non funzionamento, ti domando ancora: quale/quali scaricare ?
draleo

Davide

unread,
Mar 31, 2017, 7:58:10 AM3/31/17
to


"draleo" ha scritto nel messaggio
news:32d7b985-2b72-45f9...@googlegroups.com...

<Grazie per il tempo che mi hai dedicato. Sul sito indicato dove scaricare i
drivers, ce ne sono una marea.

sono in ordine cronologico.......scarica l'ultimo,cioè il più recente!

se hai il pc 64 bit prova quello , altrimenti scarica e installa entrambi

draleo

unread,
Mar 31, 2017, 4:16:09 PM3/31/17
to
Sei un mago. Finalmente funziona. Mi ero arrovellato inutilmente per mesi (insieme a tanti altri).
Anche se ….ci sono alcune cose sulle quali continuo a non capirci un czzo!
Perché ,per portare i dati su Excel, è stato necessario creare una nuova connessione ODBC a 64 bit ?
Non bastava quella già esistente 32 bit ? ( che è poi quella che usa normalmente il mio Data Base per funzionare)?
Perché quando andavo a chiamare da Excel questa connessione ODBC a 32 bit mi dava –e continua anche oggi a darmi- errata corrispondenza di architettura tra il driver e l’applicazione sul DSN specificato? Dipende forse dal mio Excel 2016 a 64 bit ? che non accetta più connessioni a 32 bit?
Comunque l’importante è che si sia risolto questo guazzabuglio
Ancora grazie
draleo

Davide

unread,
Mar 31, 2017, 6:18:39 PM3/31/17
to


<Perché ,per portare i dati su Excel, è stato necessario creare una nuova
connessione ODBC a 64 bit ?
<Non bastava quella già esistente 32 bit ? ( che è poi quella che usa
normalmente il mio Data Base per funzionare)?

Nel mio pc a 64 bit e con excel 32 bit e database 64 bit viene usato il
driver a 32 bit . La DSN mi compare sia nell'elenco a 32 bit che 64 bit , ma
in quest'ultimo selezionandola c'è scritto che il driver usato è quello a
32 bit.
Tale driver a 32 bit può funzionare su pc 64 grazie al WOW64.




<Perché quando andavo a chiamare da Excel questa connessione ODBC a 32 bit
mi dava –e continua anche oggi a darmi- errata corrispondenza di
architettura

ma chiamavi una DSN OLEDB per sybase


draleo

unread,
Apr 1, 2017, 6:09:47 AM4/1/17
to
> ma chiamavi una DSN OLEDB per Sybase

Allora: Solo per tentare di capirci qualcosa (anche perché lavoro su 3 PC ognuno con una diversa configurazione)
1° PC con Windows 10 ed Excel 2016 a 64 bit: il mio DB postgres funziona grazie ad una connessione ODBC a 32 bit (che non ho creato io, ma si crea automaticamente all’installazione del DabaBase). Questa connessione è visibile da pannello di controllo\strum.di amministrazione\origini dati 32 bit. Facendoci sopra DoppioClik appare la schermata dei vari parametri e un pulsante: test di connessione, cliccando il quale ottengo la risposta ; Connessione effettuata con successo. Però quando vada sul mio Excel a 64 bit e richiamo questa connessione a 32 Bit, inserendo tutti i parametri corretti, ottengo la risposta: “ errata corrispondenza di architettura tra il driver e l’applicazione sul DSN specificato”. E questo errore lo ottengo sia che richiami il DSN OLEDB per sybase (Provider=MSDASQL), sia che lo richiami con lo stesso provider utilizzato dal mio database PostGres. Cioè lo stesso DSN a 32 bit funziona solo FUORI dall’ ambiente excel; da però l’ errore sopradetto, quando lo chiama da excel a 64 bit.

Ho fatto una controprova
2° PC con windows10 con Excel 2010 a 32 bit:
In questo PC non esistono problemi: non è necessario creare un nuovo DSN a 64 bit: io posso chiamare, da Excel, con SUCCESSO il DSN a 32 bit , già presente e precaricato, sia utilizzando il Provider MSDASQL, sia uno nuovo DSN creato da me (purchè sia a 32 bit).
Sono arrivato quindi alla conclusione più logica : tutto dipende dalla versione di Excel: quella a 64 bit non accetta connessioni a 32 bit (che però, nello stesso PC, uscendo da Excel, funzionano bene)
Sbaglio ?
draleo

Davide

unread,
Apr 1, 2017, 7:47:06 AM4/1/17
to

<Sono arrivato quindi alla conclusione più logica : tutto dipende dalla
versione di Excel: quella a 64 bit non accetta connessioni a 32 bit



Sì: excel 64 cerca di usare il pannello ODBC a 64 bit per gestire il driver
che è invece a 32 bit , e quindi riceve l'errore sull'architettura :

"If you use the 64-bit odbcad32.exe ( c:\windows\system32\odbcad32.exe) to
configure or remove a DSN that connects to a 32-bit driver you will receive
this message :The specified DSN contains an
architecture mismatch between the Driver and Application"





0 new messages