Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    VC++ Connessione ai Database con ADO (SELECT, INSERT, DELETE, UPDATE)

    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)
    ...Terrible warlords, good warlords, and an english song

  2. #2
    Con i compilatori diversi da Microsoft fare dei client COM un'impresa ardua, forse per questo non ha spopolato su altre piattaforme, ma bisogna ammettere che con il VC++ questo codice funziona benissimo.

  3. #3
    #import and #using available only in C++ compiler

    Con Visual C++ 2005 Express edition. Come lo risolvo??? Grazie, Michele

  4. #4
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,591
    Stai compilando il tutto come codice di C
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,904
    Originariamente inviato da artedelcorpo
    #import and #using available only in C++ compiler
    Con Visual C++ 2005 Express edition. Come lo risolvo???
    Ogni nuovo quesito va proposto in una nuova discussione, senza risollevare quelle concluse da tempo.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Altri link...

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    305

    [c++] connessione a db access esterno

    x Johnny_Depp

    In locale funziona.

    Invece non riesco a connettermi al mio db access esterno ossia online sul mio sito da programma.exe:

    questa sotto non funge:
    _bstr_t strCnn("DRIVER={Microsoft Access Driver (*.mdb)};UID=mioID;PWD=miaPASS;DBQ=http:\\\\www.miosito.it\\public\\dbBike.mdb");

    questa sotto non funge:
    _bstr_t strCnn("Provider=MSDASQL; Data Source=www.server.it; Database=http:////www.miosito.it//public//dbBike.mdb; User Id=mioID; Password=miaPASS; Security Info=True");

    ma quale il problema come vedete ho messo il db nella cartella public del mio sito... perch non me lo trova!!!!!!

    come diavolo devo fare??... cosa che sbaglio
    il sito che ospita il mio db aruba e il db l'ho messo nella cartella public... non capisco perch non v

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,904

    Re: [c++] connessione a db access esterno

    Originariamente inviato da scancode
    Invece non riesco a connettermi al mio db access esterno ossia online sul mio sito da programma.exe
    Ci che chiedi non consentito.

    Ad ogni modo, apri una nuova discussione per ogni diverso quesito da porre.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Altri link...

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    4
    mi da questo tipo di errore che puo essere???

    Errore: [Microsoft][Driver Manager ODBC] Nome origine dati non trovato e driver
    predefinito non specificato.

    ciao grazie!!

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,904
    "BUMP!"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.