Using DAO from a DLL

Microsoft's Visual C++ on-line help says that DAO is safe to use in DLL's. Therefore, I created a DLL which I use to access the same database my main application thread is accessing, in order to do a background report with one worker thread..

From the main application's point of view it is creating wrapper objects in a DLL. The wrapper objects, in turn, access the database and return the results to the application.

It is a single-threaded DLL but it could probably be modified to be thread-safe by using locks.

I list the code for one wrapper class here but you could put many different recordset wrappers into the DLL project.

Here's some of the code in my DLL:

class CMyRecordsetWrapper : public CCmdTarget
{
 DECLARE_DYNCREATE(CMyRecordsetWrapper)

 // protected constructor used by dynamic creation
 CMyRecordsetWrapper();           
 CMyRecordsetWrapper(CString filename);

// Attributes
public:
 CMyRecordset* myrecordset;
 long	m_index;
 long	m_time;
 long	m_eventtype; 
 CString	m_title;
 long	m_binarydataindex;
 long	m_offset;
 long	m_length;

// Operations
public:
 void Open(int thetype, LPCTSTR sqlstring, int themode);
 BOOL IsBOF();
 BOOL IsEOF();
 void MoveFirst();
 void MoveLast();
 LONG GetRecordCount();
 void Close();
 void MoveNext();
 BOOL FindNext(LPCTSTR lpszFilter);
 BOOL FindPrev(LPCTSTR lpszFilter);
 BOOL CanRestart();
 void copyem();
 void opentherecordset();

// Overrides
 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CMyRecordsetWrapper)
 //}}AFX_VIRTUAL

// Implementation
 virtual ~CMyRecordsetWrapper();

protected:
 // Generated message map functions
 //{{AFX_MSG(CMyRecordsetWrapper)
  // NOTE - the ClassWizard will add and remove member functions here.
 //}}AFX_MSG

 DECLARE_MESSAGE_MAP()
};

CMyRecordsetWrapper::CMyRecordsetWrapper(CString filename)
{
  AFX_MANAGE_STATE(AfxGetStaticModuleState());
  if (theApp.databaseopen == 0)
  {
    AfxDaoInit( );
    theApp.eventdatabase = new CDaoDatabase;
    theApp.eventdatabase->Open(filename);
  }
  // increment reference count
  theApp.databaseopen++;
  opentherecordset();
}

CMyRecordsetWrapper::~CMyRecordsetWrapper()
{
  AFX_MANAGE_STATE(AfxGetStaticModuleState());
  delete myrecordset;
  theApp.databaseopen--;
  if (theApp.databaseopen == 0)
  {
    theApp.eventdatabase->Close();
    delete theApp.eventdatabase;
    AfxDaoTerm();
  }
}

void CMyRecordsetWrapper::opentherecordset()
{
  AFX_MANAGE_STATE(AfxGetStaticModuleState());
  myrecordset = new CMyRecordset(theApp.eventdatabase);
}

void CMyRecordsetWrapper::Close()
{
  AFX_MANAGE_STATE(AfxGetStaticModuleState());
  myrecordset->Close();
}

void CMyRecordsetWrapper::MoveFirst()
{
  AFX_MANAGE_STATE(AfxGetStaticModuleState());
  myrecordset->MoveFirst();
  copyem();
}

void CMyRecordsetWrapper::copyem()
{
  AFX_MANAGE_STATE(AfxGetStaticModuleState());
  m_index = myrecordset->m_index;
  m_time = myrecordset->m_time;
  m_eventtype = myrecordset->m_eventtype;
  m_title = myrecordset->m_title;
  m_binarydataindex = myrecordset->m_binarydataindex;
  m_offset = myrecordset->m_offset;
  m_length = myrecordset->m_length;
}


Comments

  • How to attach table from a database

    Posted by Legacy on 08/01/2002 12:00am

    Originally posted by: LKp

    I want to copy a table from another database to a new database using dao but i don't know how to do it pls help!!!

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: March 19, 2015 @ 1:00 p.m. ET / 10:00 a.m. PT The 2015 Enterprise Mobile Application Survey asked 250 mobility professionals what their biggest mobile challenges are, how many employees they are equipping with mobile apps, and their methods for driving value with mobility. Join Dan Woods, Editor and CTO of CITO Research, and Alan Murray, SVP of Products at Apperian, as they break down the results of this survey and discuss how enterprises are using mobile application management and private …

  • Finance leaders have been talking about expanding the value-added role of their teams for a long time. The debate is no longer whether the finance and accounting function needs to become a more strategic partner to the rest of the business but rather how to get there. Technology innovation has caught up to this ambition, and what was once aspiration can be a reality – and the choice is now yours. Read this research report to learn how to make the most of information tools to enable innovation and growth.

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date