Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++ mfc]dao , access e connection

    ciao.
    Sto lavorando ad un progetto in vc++ 7 che usa dao e un database access.
    la domanda è questa:
    E' possibile connettersi al db con una connessione e aprire piu' di un recordset con questa connessione?
    o si deve aprire una connessione per ogni recordset?
    grazie.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Una connessione e' sufficiente per piu' recordset ... (e meno male ...)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    grazie Oregon , solo che ho queto problema :
    Devo importare moltissimi dati e arrivato alla seguente funzione:
    m_pRsShell= m_dbEngine->returnRecordset("Select * from [Connectivity - Area]",m_pDB);
    if(m_pRsShell)
    m_pRsShell->MoveFirst();

    la query ritorna null! se invece chiudo la connessione e la riapro tutto funziona correttamente!.
    possono esssere problemi di memoria?
    Qesto è il m_dbEngine:

    #include "stdafx.h"
    #include "dbdao.h"
    CDaoDB::CDaoDB()
    {
    }

    CDaoDB::~CDaoDB()
    {
    }
    DAORecordset * CDaoDB::returnRecordset(CString sql,DAODatabase * pDB)
    {
    DAOQueryDef * query=NULL;
    COleVariant empty;
    COleVariant strSql(_T(sql), VT_BSTRT);
    COleVariant strQueryName;
    DAORecordset * rs=NULL;

    LPCSTR str=(LPCSTR)"";
    strQueryName.SetString(str,VT_BSTRT);
    if(pDB)
    {
    pDB->CreateQueryDef(strQueryName,strSql ,&query);
    COleVariant varOptRecorsdset(((long)dbReadOnly),VT_I4);
    COleVariant varLockType(((long)dbPessimistic),VT_I4);
    COleVariant varType(((long)dbOpenDynaset),VT_I4);
    query->OpenRecordset(varType,empty,varLockType,&rs);
    query->Release();
    }
    return rs;
    }
    DAODatabase * CDaoDB::ConnectDb(CString strDb)
    {

    DAODBEngine * pEngine = AfxDaoGetEngine();

    if (pEngine == NULL)
    {
    AfxDaoInit();
    pEngine = AfxDaoGetEngine();
    }


    COleVariant varFileName(_T(strDb), VT_BSTRT);
    COleVariant varLocale(dbLangGeneral, VT_BSTRT);
    COleVariant varOption = (long)dbVersion30;
    COleVariant empty;

    DAODatabase * pDB = NULL;
    pEngine->OpenDatabase(V_BSTR(&varFileName),empty,empty,emp ty, &pDB);

    pEngine->Release();
    return pDB;
    }

    potrebbe essere che non faccio il delete degli oggetti del dao qundo non servono piu'?
    o è altro?
    perchè se provo a fare il delete di un recordset mi da errore ad es:
    delete m_pRs mi da il solito hai provato a crivere su 002313123 ?



    cosa puo' essere?
    grazie.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    ho trovato un piccola libreria :
    bool CDaoDB::dbOpen(CString strFilePathName)
    {
    try
    {
    db = new CDaoDatabase(NULL);
    db->Open(strFilePathName);
    return true;
    }
    catch(CDaoException* error)
    {
    delete db;
    db = NULL;

    LPTSTR errors = "";
    error->GetErrorMessage(errors,100,NULL);
    AfxMessageBox(errors);
    return false;
    }
    }
    questa funzione che apre una connessione è da richiamare tutte le volte che apro un recordset?
    perchè non ha il metodo open() , metre ha il metodo close().

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