Entra

View Full Version : Visual C++ e OLE db...


bizzu
02-02-2004, 14:32
Devo fare un programmino per l'uni... creare l'interfaccia per un db access con Visual C++ 6. Non dovrebbe essere difficile... :rolleyes:
Mi consigliate dei buoni tutorial? Avere degli esempi sotto mi faciliterebbe non poco la vita!
Grassie...;)

cionci
02-02-2004, 19:44
Vuoi usare le MFC ? Oppure ADO ?

bizzu
02-02-2004, 19:58
Tu cosa mi consigli? Io punterei sulle ADO, non vorrei spendere tanto tempo sull'implementazione perché quello che conta (per l'esame) è la documentazione (UML)...

cionci
03-02-2004, 02:45
Con le MFC fai al volo......
Con le MFC hai due possibilità

Crei un nuovo progetto con supporto MFC includi AfxDB.h...
Aggiungi temporaneamente il DB come DSN utente o di sistema...
Insert -> New Class -> MFC Class -> Name: nome della classe ->
Base Class: CRecordset -> OK -> Seleziona il DSN che hai creato -> Snapshot -> Seleziona le tabelle che vuoi usare (attenzione devono apparire sempre nelle query tutti i campi delle tabelle che selezioni)

Poi nel codice:

CDatabase db;
try
{
CString conn = _T("DRIVER=Microsoft Access Driver (*.mdb); DBQ=D:\\cStatDB\\cStats.mdb;");

db.OpenEx((LPCTSTR)conn,CDatabase::noOdbcDialog);

CMdb2 rs(&db);
CString sql = "SELECT * FROM Users;";
rs.Open(AFX_DB_USE_DEFAULT_TYPE, (LPCTSTR)sql);
if(!rs.IsEOF())
{
//nei dati pubblici della classe trovi
//tutti gli attributi della tabella Users
}
rs.Close();
db.Close();
}
catch(...)
{
AfxMessageBox("Errore DB");
}

Purtroppo non puoi usare OLEDB, ma solamente ODBC (questa è una connessione senza DSN, ma è sempre ODBC...
Se dovessi usare OLEDB devi a tutti i costi usare ADO... PEr usare ADO ci sono diverse strade... Ad esempio usare il controllo ActiveX o direttamente la libreria...

bizzu
03-02-2004, 11:36
Grazie cionci... adesso provo come mi hai consigliato tu. Mi sembra troppo semplice però! :p Quali sono le "controindicazioni" di una soluzione del genere? Mi sembra di aver capito che così non potrei usare una tabella ActiveX del tipo DataGrid...

cionci
04-02-2004, 01:34
Nell'esempio CMdb2 è la classe creata sopra (non l'avevo specificato)...
Le uniche controindicazioni sono che sei legato ad ad MFC (quidi Microsoft)... Lo saresti stato comunque anche se avessi usato ADO ;)
Poi nel ciclo interno manca un rs.MoveNext(); per scorrere i vari record...

cionci
04-02-2004, 02:49
Puoi usare data grid, ma te la dovresti poplare a mano (non è difficile)...

cionci
04-02-2004, 02:56
Comunque se usi un controllo ActiveX Microsoft ADO Data Control e un Microsoft Data Grid puoi fare popolare automaticamente i dati (puoi anche far gestire automaticamente update, insert e delete ;))

bizzu
04-02-2004, 09:10
Originariamente inviato da cionci
Comunque se usi un controllo ActiveX Microsoft ADO Data Control e un Microsoft Data Grid puoi fare popolare automaticamente i dati (puoi anche far gestire automaticamente update, insert e delete ;))
Aggiudicato ADO, per le query non ho problemi... Adesso mi metto al lavoro! :(
Grazie 1k per l'aiuto cionci :D