codice:
/*
ESEMPIO 1 - SELECT
Prima di utilizzare questo codice
1) Creare un database con ACCESS e chiamarlo "mio_database"
creare una tabella e chiamarla "mia_tabella"
inserire nella tabella 3 campi di tipo testo
e chiamarli: "nome", "cognome", "telefono".
Ora inserire nella tabella 2 o 3 record.
2) La prima riga del codice, importa la libreria ADO
"msado15.dll", indispensabile per l'esecuzione
del programma.
*/
#import "c:\Programmi\File comuni\SYSTEM\ADO\msado15.dll" no_namespace rename("EOF","EndOfFile")
#include <stdio.h>
#include <iostream>
using namespace std;
int main(int argc, char* argv[]){
// Inizializzo la libreria COM prima di utilizzare le sue funzioni.
CoInitialize(NULL);
// Costrutto 'try - catch' se si verifica un eccezione (exception) con 'catch' la "catturo"
try{
// Dichiaro un puntatore al recordset (utilizzando la tecnologia ADO)
_RecordsetPtr pRst("ADODB.Recordset");
// Stringa di connessione DSN-Less con un database ACCESS
//_bstr_t strCnn("DRIVER={Microsoft Access Driver (*.mdb)};UID=;PWD=;DBQ=mio_database.mdb");
// Stringa di connessione con DSN Attivo, valida con tutti i database
_bstr_t strCnn("Provider=MSDASQL; Data Source=mio_database; Database=mio_database; User Id=; Password=; Security Info=True");
// Query SQL (seleziono tutto il recordset presemte nella tabella)
pRst->Open("SELECT * FROM mia_tabella;", strCnn, adOpenStatic, adLockReadOnly, adCmdText);
// Muovo il puntatore al recordset sul primo record
pRst->MoveFirst();
// Itero fino alla fine del recordset (<-- totale dei record presenti nella tabella)
while (!pRst->EndOfFile) {
// Visualizzo a video il campo NOME
cout<<(char*) ((_bstr_t) pRst->GetFields()->GetItem("nome")->GetValue())<<endl;
// Visualizzo a video il campo COGNOME
cout<<(char*) ((_bstr_t) pRst->GetFields()->GetItem("cognome")->GetValue())<<endl;
// Visualizzo a video il campo TELEFONO
cout<<(char*) ((_bstr_t) pRst->GetFields()->GetItem("telefono")->GetValue())<<endl<<endl;
// Muovo il puntatore sul record successivo
pRst->MoveNext();
}
// Chiudo connessione al recordset
pRst->Close();
}
// Se si verifica un errore lo catturo
catch (_com_error &exception){
// ... E lo visualizzo a video (con tanto di descrizione)
cout<<"Errore: "<<(char*) exception.Description()<<endl;
}
// libero la memoria utilizzata da COM
CoUninitialize();
return(0);
}
codice:
/*
ESEMPIO 2 - INSERT, DELETE, UPDATE
Prima di utilizzare questo codice
1) Creare un database con ACCESS e chiamarlo "mio_database"
creare una tabella e chiamarla "mia_tabella"
inserire nella tabella 3 campi di tipo testo
e chiamarli: "nome", "cognome", "telefono".
2) La prima riga del codice, importa la libreria ADO
"msado15.dll", indispensabile per l'esecuzione
del programma.
*/
#import "c:\Programmi\File comuni\SYSTEM\ADO\msado15.dll" no_namespace rename("EOF","EndOfFile")
#include <iostream>
#include <cstdio>
using namespace std;
int main(int argc, char* argv[]){
char queryString[200], nome[20]="pinco", cognome[20]="pallino", telefono[15]="0622222222";
// Inizializzo la libreria COM prima di utilizzare le sue funzioni.
CoInitialize(NULL);
// Costrutto 'try - catch' se si verifica un eccezione (exception) con 'catch' la "catturo"
try{
// Dichiaro un puntatore alla connessione ADO
_ConnectionPtr pCnn("ADODB.Connection");
// Stringa di connessione al database ACCESS (DSN-LESS)
_bstr_t strCnn("DRIVER={Microsoft Access Driver (*.mdb)};UID=;PWD=;DBQ=mio_database.mdb");
// Stringa di connessione con DSN Attivo, valida con tutti i database
// _bstr_t strCnn("Provider=MSDASQL; Data Source=mio_database; Database=mio_database; User Id=; Password=; Security Info=True");
// Apro la connessione
pCnn->Open(strCnn, "", "", adConnectUnspecified);
// Inserisco nella stringa 'queryString' la Query Sql (INSERT)
sprintf(queryString,"INSERT INTO mia_tabella (nome,cognome,telefono) VALUES ('%s','%s','%s');",nome,cognome,telefono);
// Inserisco nella stringa 'queryString' la Query Sql (DELETE)
// sprintf(queryString,"DELETE FROM mia_tabella WHERE nome = '%s' AND cognome = '%s';",nome,cognome);
// Inserisco nella stringa 'queryString' la Query Sql (UPDATE)
// sprintf(queryString,"UPDATE mia_tabella SET telefono = '0244444444' WHERE nome = '%s' AND cognome = '%s';",nome,cognome);
// Eseguo la Query
pCnn->Execute(queryString, NULL, adCmdText);
// Chiudo la connessione al database
pCnn->Close();
cout<<"Operazione eseguita con successo"<<endl;
}
// Se si verifica un errore lo catturo
catch(_com_error &exception){
// ... E lo visualizzo a video (con tanto di descrizione)
cout<<"Errore: "<<(char*) exception.Description()<<endl;
}
// libero la memoria utilizzata da COM
CoUninitialize();
return(0);
}
N.B.1 Il codice riportato nell'esempio è specifico per Microsoft Visual C++ 6.0 (Pertanto con altri compilatori ed altri ambienti potrebbe causare degli errori)
N.B.2 Nell'esempio specifico, viene effettuata una connessione ad un Database Microsoft Access, ma modificando la stringa di connessione (evidenziata in neretto) questo codice vi permette di connettervi anche ad altri Database (testato con: Oracle, SqlServer, MySql)