Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1

    [TURBO C++] Connessione Database Access

    primo: chiedo scusa per la domanda che sto per farvi.
    secondo: abbiate pazienza. sn con le connessioni a databse a zero.
    terzo:
    dopo mille ricerche su internet....nn sn riuscito a trovare un pezzo di codice "semplice" che mi consentiva di connettermi "facilmente" ad un database mdb.
    Non esistono dei passaggi semplici per far aprire una connessione con un database? O anche qualkosa di complicato...basta che riesco a connettermi!
    Uso Borland TurboC++.......
    Grazie.
    By SirSeymour !!!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non e' semplice connettersi ad un DB da C++ ...

    Ovviamente dovrai utilizzare una libreria appositamente scritta dato che il C++, in se', non ha capacita' del genere ...

    Ad esempio, puoi farlo attraverso ADO.

    Eccoti degli esempi ... buono studio ...

    http://msdn2.microsoft.com/en-us/library/ms677563.aspx

  3. #3
    grazie...ma sinceramente nn riesco a capire niente...la guida è un pò troppo complicata...
    un altro aiutino?
    per esempio qualke programmino già fatto? (intendo solo per la connessione)
    By SirSeymour !!!

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da SirSeymour
    grazie...ma sinceramente nn riesco a capire niente...la guida è un pò troppo complicata...
    un altro aiutino?
    Beh ... l'argomento e' questo ... non c'e' un modo "piu' semplice" ... forse non e' un programma alla tua portata, per ora ...

    per esempio qualke programmino già fatto? (intendo solo per la connessione)
    Un programmino fatto non l'ho cercato ma quelli sono esempi abbastanza completi ...

    "Solo" per la connessione e' un concetto molto relativo ... c'e' tanto prima della connessione da fare ...

  5. #5
    immagino che ci sia molto da fare prima della connessione...
    perciò avevo chiesto un programmino guida generale che effettua solo la connessione ad un database, così posso capirlo studiarlo e quindi editarlo a mio piacimento....è troppo?
    By SirSeymour !!!

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da SirSeymour
    ... così posso capirlo studiarlo e quindi editarlo a mio piacimento....è troppo?
    No ... eccolo

    codice:
    // Open_Close_Methods.cpp
    // compile with: /EHsc
    #import "msado15.dll" no_namespace rename("EOF", "EndOfFile")
    
    #include [list=1]
    #include <stdio.h>
    #include <conio.h>
    #include "icrsint.h"
    
    // class extracts only fname,lastname and hire_date from employee table
    class CEmployeeRs : public CADORecordBinding {
       BEGIN_ADO_BINDING(CEmployeeRs)
    
          // Column fname is the 2nd field in the table   
          ADO_VARIABLE_LENGTH_ENTRY2(2, adVarChar, m_sze_fname, 
          sizeof(m_sze_fname), le_fnameStatus, FALSE)
    
          // Column lname is the 4th field in the table.
          ADO_VARIABLE_LENGTH_ENTRY2(4, adVarChar, m_sze_lname, 
          sizeof(m_sze_lname), le_lnameStatus, FALSE)
    
          // Column hiredate is the 8th field in the table.
          ADO_VARIABLE_LENGTH_ENTRY2(8, adDBDate,m_sze_hiredate, 
          sizeof(m_sze_hiredate), le_hiredateStatus, TRUE)
    
       END_ADO_BINDING()
    
    public:
       CHAR   m_sze_fname[21];
       ULONG   le_fnameStatus;
       CHAR   m_sze_lname[31];
       ULONG   le_lnameStatus;
       DBDATE   m_sze_hiredate;
       ULONG   le_hiredateStatus;
    };
    
    // Function declarations
    inline void TESTHR(HRESULT x) { if FAILED(x) _com_issue_error(x); };
    void OpenX();
    void PrintProviderError(_ConnectionPtr pConnection);
    void PrintComError(_com_error &e);
    
    int main() {
       if ( FAILED(::CoInitialize(NULL)) )
          return -1;
    
       OpenX();
       ::CoUninitialize();
    }
    
    void OpenX() {
       // Define ADO object pointers.  Initialize pointers on define.
       // These are in the ADODB:: namespace
       _RecordsetPtr pRstEmployee = NULL;
       _ConnectionPtr pConnection = NULL;
    
       // Define string variables.
       _bstr_t strCnn("Provider='sqloledb'; Data Source='My_Data_Source'; Initial Catalog='pubs'; Integrated Security='SSPI';");
    
       IADORecordBinding *picRs = NULL;   // Interface Pointer declared.
       CEmployeeRs emprs;   // C++ Class object
       DBDATE varDate;
    
       try {
          // open connection and record set
          TESTHR(pConnection.CreateInstance(__uuidof(Connection)));
          pConnection->Open(strCnn, "", "", adConnectUnspecified);
    
          TESTHR(pRstEmployee.CreateInstance(__uuidof(Recordset)));
          pRstEmployee->Open("Employee", _variant_t((IDispatch *)pConnection,true), 
             adOpenKeyset, adLockOptimistic, adCmdTable);
    
          // Open an IADORecordBinding interface pointer for Binding Recordset to a class.
          TESTHR(pRstEmployee->QueryInterface(__uuidof(IADORecordBinding),(LPVOID*)&picRs));
    
          // Bind the Recordset to a C++ Class here.
          TESTHR(picRs->BindToRecordset(&emprs));
    
          // Assign first employee record's hire date to variable, then change hire date.
          varDate = emprs.m_sze_hiredate;
          printf("Original data\n");
          printf("\tName - Hire Date\n");
          printf("  %s  %s - %d/%d/%d\n\n",
             emprs.le_fnameStatus == adFldOK ? 
             emprs.m_sze_fname : "<NULL>",
             emprs.le_lnameStatus == adFldOK ? 
             emprs.m_sze_lname : "<NULL>",
             emprs.le_hiredateStatus == adFldOK ? 
             emprs.m_sze_hiredate.month : 0,
             emprs.le_hiredateStatus == adFldOK ? 
             emprs.m_sze_hiredate.day : 0,
             emprs.le_hiredateStatus == adFldOK ? 
             emprs.m_sze_hiredate.year : 0); 
    
          emprs.m_sze_hiredate.year = 1900;
          emprs.m_sze_hiredate.month = 1;
          emprs.m_sze_hiredate.day = 1;
          picRs->Update(&emprs);
    
          printf("\nChanged data\n");
          printf("\tName - Hire Date\n");
          printf("  %s %s - %d/%d/%d\n\n",
             emprs.le_fnameStatus == adFldOK ? 
             emprs.m_sze_fname : "<NULL>",
             emprs.le_lnameStatus == adFldOK ? 
             emprs.m_sze_lname : "<NULL>",
             emprs.le_hiredateStatus == adFldOK ? 
             emprs.m_sze_hiredate.month : 0,
             emprs.le_hiredateStatus == adFldOK ? 
             emprs.m_sze_hiredate.day : 0,
             emprs.le_hiredateStatus == adFldOK ? 
             emprs.m_sze_hiredate.year : 0); 
    
          // Requery Recordset and reset the hire date.
          pRstEmployee->Requery(adOptionUnspecified);
    
          // Open IADORecordBinding interface pointer for Binding Recordset to a class.
          TESTHR(pRstEmployee->QueryInterface(__uuidof(IADORecordBinding), (LPVOID*)&picRs));
    
          // Rebind the Recordset to a C++ Class here.
          TESTHR(picRs->BindToRecordset(&emprs));
          emprs.m_sze_hiredate = varDate;
          picRs->Update(&emprs);
          printf("\nData after reset\n");
          printf("\tName - Hire Date\n");
          printf("  %s %s - %d/%d/%d", emprs.le_fnameStatus == adFldOK ? 
             emprs.m_sze_fname : "<NULL>",
             emprs.le_lnameStatus == adFldOK ? 
             emprs.m_sze_lname : "<NULL>",
             emprs.le_hiredateStatus == adFldOK ? 
             emprs.m_sze_hiredate.month : 0,
             emprs.le_hiredateStatus == adFldOK ? 
             emprs.m_sze_hiredate.day : 0,
             emprs.le_hiredateStatus == adFldOK ? 
             emprs.m_sze_hiredate.year : 0); 
       }
       catch(_com_error &e) {
          // Display errors, if any. Pass a connection pointer accessed from the Connection.
          PrintProviderError(pConnection);
          PrintComError(e);
       }
    
       // Clean up objects before exit.
       if (pRstEmployee)
          if (pRstEmployee->State == adStateOpen)
             pRstEmployee->Close();
       if (pConnection)
          if (pConnection->State == adStateOpen)
             pConnection->Close();
    }
    
    void PrintProviderError(_ConnectionPtr pConnection) {
       // Print Provider Errors from Connection object.
       // pErr is a record object in the Connection's Error collection.
       ErrorPtr pErr = NULL;
    
       if ( (pConnection->Errors->Count) > 0) {
          long nCount = pConnection->Errors->Count;
          // Collection ranges from 0 to nCount -1.
          for ( long i = 0 ; i < nCount ; i++ ) {
             pErr = pConnection->Errors->GetItem(i);
             printf("\t Error number: %x\t%s", pErr->Number, pErr->Description);
          }
       }
    }
    
    void PrintComError(_com_error &e) {
       _bstr_t bstrSource(e.Source());
       _bstr_t bstrDescription(e.Description());
    
       // Print COM errors. 
       printf("Error\n");
       printf("\tCode = %08lx\n", e.Error());
       printf("\tCode meaning = %s\n", e.ErrorMessage());
       printf("\tSource = %s\n", (LPCSTR) bstrSource);
       printf("\tDescription = %s\n", (LPCSTR) bstrDescription);
    }

  7. #7
    Con Turbo C++ hai componenti visuali che ti consentono di connetterti ad un database (quasi) senza scrivere una riga di codice.

    La soluzione suggerita da Oregon è basata su estensioni MFC quindi più adatta ad essere usata con Visual C++.

    Le tecniche di interfacciamento ai dati sono descritte dettagliatamente in qualsiasi testo su Borland Turbo C++ (Builder) e non ha senso riassumerle in un forum.
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da pallinopinco
    Con Turbo C++ ...
    Gia' ... ma di quale versione di Turbo C++ parliamo?

  9. #9
    versione 10.
    esiste qualke guida per questa versione?
    By SirSeymour !!!

  10. #10
    Gia' ... ma di quale versione di Turbo C++ parliamo?
    Visto che vuole interfacciarsi ad un db Access credo che si riferisca a questa versione e non a quelle dei primi anni 90.

    DATABASE DEVELOPMENT AND ACCESS

    Database Explorer with dbExpress and drag-n-drop support
    Includes InterBase 7.5.1 Developer Edition—up to 20 users and 80 logical local connections
    Latest dbExpress server and multi-tier drivers for Borland InterBase 7.5, MySQL
    Borland dbGO for ADO connectivity for Win32 (MDAC 2.8)
    BDE support for dBASE and Paradox on VCL
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

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 © 2024 vBulletin Solutions, Inc. All rights reserved.