Newsgroup: it.comp.programmare.win32
Titolo: [VC++] Ado ed Access problema di connessione

Salve a tutti
Questo è il mio problema
Vorrei connettermi ad un db access 2000 tramite ADO e questo è il codice che
eseguo al click di un pulsante
#import "c:\programmi\file comuni\system\ado\msado15.dll" no_namespace   //
inserito all'esterno dell'evento
_ConnectionPtr cn;
cn.CreateInstance(__uuidof(Connection));
cn->ConnectionString="Provider=Microsoft Jet.OleDB.4.0;Data
Source=C:\miodb.mdb";
cn->Open("","","",-1); //ed in altrnativa cn->Open("","admin","",-1);
Mi lancia un errore nella stringa di connessione, eppure ho inserito il
codice esattamente come visto dagli esempi in post precedenti e di msdn.
P.S. Premetto che ho testato il codice su VC++6 e VC++.net.
SPero di essere stato chiaro, in quanto mi sono impantanato.
Grazie
Fabio

Source=C:\miodb.mdb";
cn->ConnectionString="Provider=Microsoft Jet.OleDB.4.0;Data
 Source=C:\\miodb.mdb";
oppure
cn->ConnectionString=L"Provider=Microsoft Jet.OleDB.4.0;Data
 Source=C:\\miodb.mdb";
-- 
ciao,
hal

 Vorrei connettermi ad un db access 2000 tramite ADO e questo č il codice


 
Gia fatto ma non è quello il motivo.
Ciao
Fabio

 
Ho provato in entrambi i modi, ma non funziona. Se mi dite che in sostanza
(a parte qualche correzione suggerita da Voi relativa al doppio slash per
la stringa) il mio codice è corretto, allora perchè non funziona?
Tra l'altro ho verificato la presenza di msado15.dll nella sua directory.
Ho pensato anche che forse non avevo aggiornato con la sp5 il VC++6, ma ho
successivamente pensato che ho provato ancche con VC++.net,
quindi..........
Non so che pescci pigliare.
Cmq grazie
Ciao
Fabio

la stringa) il mio codice è corretto, allora perchè non funziona?
Qual e' l'esatto errore che ricevi?
-- 
ciao,
hal

cn->ConnectionString="Provider=Microsoft Jet.OleDB.4.0;Data
 cn->ConnectionString="Provider=Microsoft.Jet.OleDB.4.0;Data
   Ci va un "." tra Microsoft e Jet.
-- 
S.L.

    Ci va un "." tra Microsoft e Jet.
E' un errore di trascrizione. Nel codice c'è.
Ciao
Fabio

E' un errore di trascrizione. Nel codice c'è.
   A me, aggiungendo quel punto, funziona, comunque prova cosi`:
cn->Provider = "Microsoft.Jet.OLEDB.4.0";
cn->Open("C:\\miodb.mdb", "admin", "", adConnectUnspecified);
   Non che ci sia grossa differenza, ma cosi` puoi vedere, a seconda
di dove si verifichi l'errore, se il tuo problema e` con il provider o
con la fonte dati.
   Il database C:\miodb.mdb esiste gia`, vero?
-- 
S.L.

    Il database C:\miodb.mdb esiste gia`, vero?
Esatto.
Provo subito e speriamo che esca fuori qualcche cosa.
Grazie dell'aiuto e della pazienza.
Ciao
Fabio

 
E' questo il messaggio che mi lancia:
RunTime error;
Program: C:\Prova\bi\Debug\bi.exe;
This application has requested the runtime to terminate it in an usually
way.
A me non a detto molto.
Ciao e grazie per l'aiuto.
Fabio

 
L'errore sembra sia nell'impostazione del provider. E adesso?
Ciao
Fabio

L'errore sembra sia nell'impostazione del provider. E adesso?
   Prova a implementare qualcosa del genere...
---
try
{
   cn->Provider = "Microsoft.Jet.OLEDB.4.0";
   cn->Open("C:\\miodb.mdb", "admin", "", adConnectUnspecified);
}
catch()
{
   for (long i = 0; i < cn->Errors->Count; i++)
      // in questo ciclo visualizzi le coppie:
      //    cn->Errors->GetItem(i)->Number
      //    cn->Errors->GetItem(i)->Description
}
---
   che`, a questo punto, una descrizione piu` precisa degli errori
potrebbe aiutare.
-- 
S.L.

 ---
Ma non è che c'è qualche impostazione particolare da settare?
Ciao
Fabio

_com_error, mentre nell'esempio in questione funziona perfettamente.
Se hai importato msado15.dll deve riconoscere _com_error.
Noto ora che nel primo messaggio hai comandato l'importazione cosi':
#import "c:\programmi\file comuni\system\ado\msado15.dll" no_namespace
senza ridefinire l'eof.
Questo provoca dei warning, quando non degli errori, in fase di
compilazione. Il comportamento e' "by design", come documentato
nell' art. QQ166112 di msdn:
PRB: Conflict with EOF When Using #import with ADO
Quindi dovresti modificare l'istruzione in un modo analogo a questo,
che uso nei miei programmi:
#import "msado15.dll" rename( "EOF", "adoEOF" 
		rename_namespace("ADODB") 
Naturalmente, la notazione abbreviata della dll di ado presuppone che
il compilatore abbia nel path la directory di ado (sul mio portatile
e' C:\Program Files\Common Files\System\ado).
-- 
ciao,
hal

Qui mi lancia un errore dicendomi di inserire un tipo nel costrutto.
   Mettici l'ellissi, dai: catch(...)
-- 
S.L.

 rename_namespace("ADODB")
Eseguo e speriamo bene.
Ciao
Fabio

 
Provo subito.
Ciao e grazie
Fabio

S.L. wrote:

L'ho fatto ed il costrutto try/catch funziona ed ha rilevato che l'errore è
all'origine e cioè alla referenzziazione dell'oggetto connectionptr. Ho
modificato cos' il codice:
HRESULT hr;
_ConnectionPtr cn;     //qui ho inserito un breakpoint
hr=cn.CreateInstance(__uuidof(Connection)); //qui ho inserito un breakpoint
if(SUCCEEDED(hr))
        cn->Provider="Microsoft.Jet.OLEDB.4.0";
Eseguo il debug ed al primo brakpoint ottengo l'errore che dice che
l'espressione non può essere valutata, così come al secondo breakpoint e
l'istruzione all'interno dell'if non viene valutata confermando che cn non
è stato istanziato.
Sinceramente sono demoralizzato. 
Ciao
Fabio

 ha scritto nel messaggio
news:kesf309pjms295a5m...@4ax.com...
Ho risolto.
Ho inserito questa riga di codice:
hr=CoInitialize(NULL);
ed ho modificato
hr=cn.CreateInstance(__uuidof(Connection));
Grazie per l'interessamento e per le delucidazioni.
Ciao
Fabio

CoInitialize(NULL);
   Era questo mi sa... Fesso io che non ci ho pensato :)
-- 
S.L.

 
Su google ho letto molti esempi ed anche libri, ma nessuno mi ha menzionato
questa inizializzazione.
Comunque ti ringrazio per la pazienza.
Ciao
Fabio

Comunque ti ringrazio per la pazienza.
Soprattutto un complimento all'intuito di S.L., che io l'avevo dato
per scontato. Ma si sa, in programmazione, mai dare nulla per 
scontato ;-)
-- 
ciao,
hal