Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - C'è qualcuno che mi aiuta con i database?
Forum - C/C++ - C'è qualcuno che mi aiuta con i database?

Avatar
The Lizard King (Member)
Rookie


Messaggi: 33
Iscritto: 10/06/2007

Segnala al moderatore
Postato alle 16:14
Mercoledì, 10/10/2007
Raga, ho trovato un libro a casa dove c'è una guida (fatta con i piedi) che spiega come collegarsi ed interagire ad un database con C++.
Prima cosa, ho creato il database andando su Pannello di controllo - Strumenti di amministrazione - Origine dati ODBC, e nella scheda DNS di sistema, clicco su Aggiungi e scelgo Driver to Microsoft Access (*.mdb). Il file del database lo chiamo mysql.mdb, il nome è Database e il nome accesso è root. Poi ho ricopiato un sorgente dal libro:

Codice sorgente - presumibilmente C++

  1. #include<iostream>
  2. #import "C:\Programmi\File% comuni\System\ado\msado.dll"\
  3. no_namespace rename("EOF","EndOfFile")
  4. using namespace std;
  5. int main()
  6. {
  7.     ::CoInitialize(NULL);
  8.     _ConnectionPtr PuntConn;
  9.     PuntConn.CreateInstance(__uuidof(Connection));
  10.     try
  11.     {
  12.        PuntConn->Open("Database","root","",NULL);
  13.     }
  14.     catch(c_com_error &e)
  15.     {
  16.        cout<<"connessione al database non avvenuta!";
  17.        return -1;
  18.     }
  19.     _CommandPtr PuntCmd;
  20.     PuntCmd->ActiveConnection=PuntConn;
  21.     PuntCmd->CommandText="SELECT * FROM ???";
  22.    
  23.     _RecordsetPtr PuntRs;
  24.     PuntRs.CreateInstance(__uuidof(Recordset));
  25.     PuntRs->PutRefSource(PuntCmd);
  26.    
  27.     _variant_t VNull;
  28.     VNull.vt=VT_ERROR;
  29.     VNull.scode=DISP_E_PARAMNOTFOUND;
  30.     PuntRs->Open(VNull,VNull,adOpenDynamic,adLockOptimistic,adCmdUnknown);
  31.    
  32.     while (!PuntRs->EndOfFile)
  33.     {
  34.           cout<<(char*) _bstr_t(PuntRs->Fields->Getltem("CProd")->Value)<<",";
  35.           cout<<(char*) _bstr_t(PuntRs->Fields->Getltem("CProd")->Value)<<",";
  36.           PuntRs->MoveNext();
  37.     }
  38.    
  39.     PuntRs->Close();
  40.     PuntConn->Close();
  41.     CoUnintialize();
  42.     return 0;
  43. }



Ora, a parte il fatto che non ho capito la maggior parte delle istruzioni, non so cosa fa il simbolo "::" e "->", ho provato a compilarlo, ma mi da vari errori, il primo è: ::CoInitialize(NULL); , mi dice che non è dichiarato... poi alla parte SELECT * FROM ??? ho messo i punti interrogativi perchè io ancora devo creare una tabella e sul libro non c'è scritto, passa direttamente a questo codice... mi spiegate cos'è che non va??? E poi cosa fanno try e catch?? Sembra un altro linguaggio, che diamine :(

PM Quote
Avatar
WARRIOR (Ex-Member)
Guru


Messaggi: 627
Iscritto: 30/03/2007

Segnala al moderatore
Postato alle 14:57
Domenica, 14/10/2007
Testo quotato

Postato originariamente da The Lizard King:

Ora, a parte il fatto che non ho capito la maggior parte delle istruzioni, non so cosa fa il simbolo "::" e "->", ho provato a compilarlo, ma mi da vari errori, il primo è: ::CoInitialize(NULL); , mi dice che non è dichiarato... poi alla parte SELECT * FROM ??? ho messo i punti interrogativi perchè io ancora devo creare una tabella e sul libro non c'è scritto, passa direttamente a questo codice... mi spiegate cos'è che non va??? E poi cosa fanno try e catch?? Sembra un altro linguaggio, che diamine :(



Beh io simbolo :: l'ho incontrato nello studio della programmazione ad oggetti, il simbolo "->" è l'operatore freccia, cioè un puntatore ad un membro di una struttura.
Se ti dice già alla prima funzione che non è dichiarata, molto probabilmente devi importare la libreria che contiene quelle funzioni.
Gli operatori try e catch compongono la gestione delle eccezioni:

try {
codice;
//se viene generata un'eccezione (errore)
}
catch() {
//Acchiappala (chatch)
}

:k:

PM Quote
Avatar
JackDaniels (Normal User)
Newbie


Messaggi: 18
Iscritto: 08/10/2007

Segnala al moderatore
Postato alle 12:11
Lunedì, 15/10/2007
Non so aiutarti per quanto riguarda l'interfacciamento con il database ma posso dirti che le istruzioni try e catch ti permettono di gestire le eccezioni come ti ha spiegato Warrior.
L'operatore :: si chiama Operatore di risoluzione del campo d'azione e ti permette di accedere ad un membro public di una certa classe senza specificare il nome di un'oggetto per quella classe. Se non sono stato chiaro ti faccio un esempio più comprensibile.
L'operatore -> ti permette di accedere ad un membro di una classe attraverso un puntatore ad un'oggetto di quest'ultima.:k:

PM Quote
Avatar
WARRIOR (Ex-Member)
Guru


Messaggi: 627
Iscritto: 30/03/2007

Segnala al moderatore
Postato alle 13:19
Lunedì, 15/10/2007
Testo quotato

Postato originariamente da JackDaniels:

L'operatore -> ti permette di accedere ad un membro di una classe attraverso un puntatore ad un'oggetto di quest'ultima.:k:




Sisi anche.... :) .
Visual C++ contiente le librerie adatte per connetterti ai database, prova con quello (MySQL). :k:

PM Quote