2221 lines
57 KiB
C++
2221 lines
57 KiB
C++
// GZRset.cpp: implementation of the GZRset class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
#include "sp.h"
|
|
#include "GZRset.h"
|
|
#include <crtdbg.h>
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[]=__FILE__;
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
GZRset::GZRset(CString strErr)
|
|
{
|
|
#ifdef _RSTRACE_
|
|
log=new CLogTrace();
|
|
log->SetFileName("dblog.txt");
|
|
log->m_strAppName="AyaNova";
|
|
log->OnStartup(true,true);
|
|
|
|
//log->WriteLine(">>>>Opening: %s\r\n",strErr);
|
|
#endif
|
|
|
|
m_bUseTransactions=false;
|
|
m_bInUse=true;
|
|
m_bPrinting=false;
|
|
m_bRSPRINT=false;
|
|
CString copyright="AyaNova Classic Edition Copyright 2000-2004 Ground Zero Tech-Works";
|
|
|
|
_ASSERT(!strErr.IsEmpty());
|
|
//set error message so that if various _ASSERTions fail
|
|
//the user can be alerted with something meaningful to write
|
|
//down and in turn tell us during a tech support call.
|
|
//because this class will be used all over the place
|
|
m_strErrMsg=strErr;
|
|
m_bForwardOnly=false;
|
|
//by default not an exclusive connection
|
|
m_bExclusiveConnection=false;
|
|
//set to null as a default
|
|
m_pRecordSet=NULL;
|
|
|
|
try{
|
|
|
|
// instantiate the recordset defined in the header
|
|
m_pRecordSet.CreateInstance(__uuidof(Recordset));
|
|
|
|
//m_pRecordSet->PutCacheSize(500);
|
|
|
|
m_pRecordSet->CursorLocation=adUseServer;
|
|
m_bOpen = false;// signify no recordset
|
|
m_strLastError.Empty();
|
|
}
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
m_strLastError.Format("%s",(LPCTSTR) bstrDescription);
|
|
if(m_pRecordSet==NULL)
|
|
{
|
|
|
|
AfxMessageBox(
|
|
"Problem: It appears that you do not have the required \r\n"
|
|
"Microsoft Data Access Components installed.\r\n\r\n"
|
|
|
|
"They should have been installed automatically with AyaNova\r\n"
|
|
"but are not present. Please contact tech support at:\r\n"
|
|
"support@ayanova.com or ... \r\n\r\n"
|
|
|
|
"The following page on our website gives instructions on installing\r\n"
|
|
"the missing database driver files:\r\n"
|
|
"http://www.ayanova.com/mdac.htm");
|
|
|
|
if(AfxMessageBox("Do you want to be taken to this page on our website now?\r\n(requires internet ability)",MB_YESNO)==IDYES)
|
|
HINSTANCE h = ShellExecute(NULL, "open", "http://www.ayanova.com/mdac.htm", NULL, NULL, SW_SHOWNORMAL);
|
|
|
|
}
|
|
else
|
|
AfxMessageBox(cstrErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
GZRset::GZRset(CString strErr, bool bUseClientCursor)
|
|
{
|
|
m_bUseTransactions=false;
|
|
#ifdef _RSTRACE_
|
|
log=new CLogTrace();
|
|
log->SetFileName("dblog.txt");
|
|
log->m_strAppName="AyaNova";
|
|
log->OnStartup(true,true);
|
|
//log->WriteLine(">>>>Opening: %s\r\n",strErr);
|
|
#endif
|
|
m_bInUse=true;
|
|
|
|
|
|
|
|
#ifdef _WTF_
|
|
|
|
//AfxMessageBox(strErr);
|
|
#endif
|
|
_ASSERT(!strErr.IsEmpty());
|
|
//set error message so that if various _ASSERTions fail
|
|
//the user can be alerted with something meaningful to write
|
|
//down and in turn tell us during a tech support call.
|
|
//because this class will be used all over the place
|
|
m_strErrMsg=strErr;
|
|
|
|
// instantiate the recordset defined in the header
|
|
m_pRecordSet.CreateInstance(__uuidof(Recordset));
|
|
//changed this July 1st for performance,
|
|
//not sure why it was client before
|
|
if(bUseClientCursor)
|
|
m_pRecordSet->CursorLocation=adUseClient;
|
|
else
|
|
m_pRecordSet->CursorLocation=adUseServer;
|
|
m_bOpen = false;// signify no recordset
|
|
|
|
m_strLastError.Empty();
|
|
|
|
}
|
|
|
|
GZRset::~GZRset()
|
|
{
|
|
|
|
|
|
#ifdef _RSTRACE_
|
|
//log->WriteLine("CLOSING: %s<<<<*\r\n",m_strErrMsg);
|
|
delete log;
|
|
#endif
|
|
|
|
|
|
if(m_pRecordSet->GetState()==adStateOpen)
|
|
m_pRecordSet->Close();
|
|
|
|
//releases on it's own despite this and causes error
|
|
//lesson: don't release unless you call addref first
|
|
//m_pRecordSet->Release();
|
|
|
|
}
|
|
|
|
|
|
|
|
_RecordsetPtr GZRset::RecordSetPointer()
|
|
{
|
|
return m_pRecordSet;
|
|
}
|
|
/*
|
|
bool GZRset::Open()
|
|
{
|
|
|
|
AfxMessageBox("OBSOLETE:\r\nbool GZRset::Open()");
|
|
//for confirming if recordset is open or not.
|
|
return m_bOpen;
|
|
}
|
|
*/
|
|
|
|
/*
|
|
//Open forward only
|
|
bool GZRset::OpenForwardOnly(CString strQuery)
|
|
{
|
|
|
|
|
|
AfxMessageBox("OBSOLETE:\r\nbool GZRset::OpenForwardOnly(CString strQuery)");
|
|
m_bForwardOnly=true;
|
|
_ASSERT(!strQuery.IsEmpty());
|
|
|
|
_ASSERT(!m_strConnect.IsEmpty());
|
|
|
|
try
|
|
{
|
|
//if the recordset is already open, close it first.
|
|
//because open is also requery
|
|
if(m_bOpen)
|
|
{
|
|
m_pRecordSet->Close();
|
|
|
|
m_bOpen=false;
|
|
}
|
|
|
|
|
|
//no records at this point
|
|
m_bNoRecords=true;
|
|
//convert query to a variant
|
|
_variant_t vQuery(strQuery);
|
|
|
|
//convert connection string to a binary string
|
|
_bstr_t bstrConn(m_strConnect);
|
|
|
|
//open the forward only recordset based on the passed query
|
|
m_pRecordSet->Open(vQuery, bstrConn, adOpenForwardOnly, adLockOptimistic, adCmdUnknown);
|
|
|
|
//check for empty recordset
|
|
if (m_pRecordSet->GetadoEOF())
|
|
m_bNoRecords = true;// no records found
|
|
else
|
|
m_bNoRecords = false;//there are records
|
|
|
|
//open must be true or an exception would have happened before now
|
|
|
|
m_bOpen=true;
|
|
}
|
|
|
|
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
//cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
cstrErrMsg.Format("at: OLD OpenForwardOnly\r\n%s: %s,\r\n%s\r\nQuery:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,strQuery);
|
|
m_strLastError.Format("%s",(LPCTSTR) bstrDescription);
|
|
AfxMessageBox(cstrErrMsg);
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
|
|
}
|
|
|
|
|
|
return m_bOpen;
|
|
|
|
}
|
|
|
|
|
|
*/
|
|
|
|
//QUERY: replacement for openforwardonly
|
|
//December 7th 2000
|
|
bool GZRset::Query(CString strQuery)
|
|
{
|
|
|
|
#ifdef _RSTRACE_
|
|
//don't log nulltable queries
|
|
log->WriteLine("Query: %s\r\n",strQuery);
|
|
#endif
|
|
m_strLastQuery=strQuery;
|
|
m_bForwardOnly=true;
|
|
_ASSERT(!strQuery.IsEmpty());
|
|
|
|
_ASSERT(!m_strConnect.IsEmpty());
|
|
// long cs=m_pRecordSet->GetCacheSize();
|
|
try
|
|
{
|
|
//if the recordset is already open, close it first.
|
|
//because open is also requery
|
|
if(m_bOpen && m_bExclusiveConnection==false)
|
|
{
|
|
//sometimes, the recordset is actually
|
|
//closed even though we don't know it
|
|
//this is a 3am "I don't ***** understand why, but this fixes it" Hack
|
|
if(m_pRecordSet->GetState()==adStateOpen)
|
|
m_pRecordSet->Close();
|
|
m_pRecordSet->CursorLocation=adUseServer;
|
|
if(m_bRSPRINT)
|
|
m_pRecordSet->CursorLocation=adUseClient;
|
|
m_bOpen=false;
|
|
}
|
|
/*EXCLUSIVE should mean this is no longer necessary
|
|
//exclusivity is set in the pool now by GoExclusive()
|
|
if(m_bIsClosed)//was it closed
|
|
{
|
|
m_strConnect=m_strLiveConnectString;
|
|
if(m_bExclusiveConnection)
|
|
m_strConnect=m_strLiveConnectStringExclusive;
|
|
m_bIsClosed=false;
|
|
|
|
|
|
}
|
|
*/
|
|
|
|
//no records at this point
|
|
m_bNoRecords=true;
|
|
|
|
|
|
//convert query to a variant
|
|
_variant_t vQuery(strQuery);
|
|
|
|
//convert connection string to a binary string
|
|
_bstr_t bstrConn(m_strConnect);
|
|
|
|
//open the forward only recordset based on the passed query
|
|
//m_pRecordSet->Open(vQuery, bstrConn, adOpenForwardOnly, adLockOptimistic, adCmdUnknown);
|
|
|
|
|
|
m_pRecordSet->Open(vQuery, _variant_t((IDispatch *)pTheConnection,true), adOpenForwardOnly, adLockOptimistic, adCmdUnknown);
|
|
|
|
|
|
|
|
//check for empty recordset
|
|
m_bNoRecords = false;//there are records
|
|
if (m_pRecordSet->GetadoEOF())
|
|
m_bNoRecords = true;// no records found
|
|
|
|
|
|
|
|
//open must be true or an exception would have happened before now
|
|
|
|
m_bOpen=true;
|
|
//Added just now while swilling wine and
|
|
//eating pizza
|
|
m_bInUse=true;
|
|
}
|
|
|
|
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
cstrErrMsg.Format("%s: %s,\r\n%s\r\nQuery:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,strQuery);
|
|
m_strLastError.Format("%s",(LPCTSTR) bstrDescription);
|
|
AfxMessageBox(cstrErrMsg);
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
|
|
}
|
|
|
|
|
|
return m_bOpen;
|
|
|
|
}
|
|
|
|
|
|
|
|
//QUERY: replacement for openforwardonly
|
|
//December 7th 2000
|
|
bool GZRset::QueryReadOnly(CString strQuery)
|
|
{
|
|
|
|
#ifdef _RSTRACE_
|
|
//don't log nulltable queries
|
|
log->WriteLine("Query: %s\r\n",strQuery);
|
|
#endif
|
|
m_strLastQuery=strQuery;
|
|
m_bForwardOnly=true;
|
|
_ASSERT(!strQuery.IsEmpty());
|
|
|
|
_ASSERT(!m_strConnect.IsEmpty());
|
|
//long cs=m_pRecordSet->GetCacheSize();
|
|
try
|
|
{
|
|
//if the recordset is already open, close it first.
|
|
//because open is also requery
|
|
if(m_bOpen)
|
|
{
|
|
//sometimes, the recordset is actually
|
|
//closed even though we don't know it
|
|
//this is a 3am - "I don't understand
|
|
//why, but this fixes it" Hack
|
|
if(m_pRecordSet->GetState()==adStateOpen)
|
|
m_pRecordSet->Close();
|
|
m_pRecordSet->CursorLocation=adUseServer;
|
|
if(m_bRSPRINT)
|
|
m_pRecordSet->CursorLocation=adUseClient;
|
|
m_bOpen=false;
|
|
}
|
|
|
|
/*//SET IN rspool go exclusive function now
|
|
if(m_bIsClosed)//was it closed
|
|
{
|
|
m_strConnect=m_strLiveConnectString;
|
|
if(m_bExclusiveConnection)
|
|
m_strConnect=m_strLiveConnectStringExclusive;
|
|
m_bIsClosed=false;
|
|
|
|
|
|
}
|
|
|
|
*/
|
|
//no records at this point
|
|
m_bNoRecords=true;
|
|
|
|
|
|
//convert query to a variant
|
|
_variant_t vQuery(strQuery);
|
|
|
|
//convert connection string to a binary string
|
|
_bstr_t bstrConn(m_strConnect);
|
|
|
|
//open the forward only recordset based on the passed query
|
|
//THIS IS THE ONLY DIFFERENCE IN A READ ONLY RECORDSET
|
|
//m_pRecordSet->Open(vQuery, bstrConn, adOpenForwardOnly, adLockReadOnly, adCmdUnknown);
|
|
|
|
//TEST TEST TEST TEST adLockReadOnly adLockOptimistic adCmdUnknown adCmdText
|
|
m_pRecordSet->Open(vQuery, _variant_t((IDispatch *)pTheConnection,true),
|
|
adOpenForwardOnly,adLockReadOnly , adCmdText );
|
|
|
|
|
|
//check for empty recordset
|
|
m_bNoRecords = false;//there are records
|
|
if (m_pRecordSet->GetadoEOF())
|
|
m_bNoRecords = true;// no records found
|
|
|
|
|
|
|
|
//open must be true or an exception would have happened before now
|
|
|
|
m_bOpen=true;
|
|
//Added just now while swilling wine and
|
|
//eating pizza
|
|
m_bInUse=true;
|
|
}
|
|
|
|
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
cstrErrMsg.Format("%s: %s,\r\n%s\r\nQuery:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,strQuery);
|
|
m_strLastError.Format("%s",(LPCTSTR) bstrDescription);
|
|
//Added 08/03/2001 to hide errors on update
|
|
if(!m_bSupressErrors)
|
|
AfxMessageBox(cstrErrMsg);
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
|
|
}
|
|
|
|
|
|
return m_bOpen;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
//Open dynaset
|
|
bool GZRset::Open(CString strQuery)
|
|
{
|
|
|
|
AfxMessageBox("OBSOLETE:\r\nbool GZRset::Open(CString strQuery)");
|
|
m_bForwardOnly=false;
|
|
_ASSERT(!strQuery.IsEmpty());
|
|
|
|
_ASSERT(!m_strConnect.IsEmpty());
|
|
|
|
try
|
|
{
|
|
//if the recordset is already open, close it first.
|
|
//because open is also requery
|
|
if(m_bOpen)
|
|
{
|
|
m_pRecordSet->Close();
|
|
|
|
m_bOpen=false;
|
|
}
|
|
|
|
|
|
if(m_bIsClosed)//was it closed
|
|
{
|
|
if(m_bExclusiveConnection)
|
|
m_strConnect=m_strLiveConnectStringExclusive;
|
|
else
|
|
m_strConnect=m_strLiveConnectString;
|
|
|
|
m_bIsClosed=false;
|
|
|
|
}
|
|
|
|
//no records at this point
|
|
m_bNoRecords=true;
|
|
//convert query to a variant
|
|
_variant_t vQuery(strQuery);
|
|
|
|
//convert connection string to a binary string
|
|
_bstr_t bstrConn(m_strConnect);
|
|
|
|
//open the recordset based on the passed query
|
|
m_pRecordSet->Open(vQuery, bstrConn, adOpenDynamic, adLockOptimistic, adCmdUnknown);
|
|
|
|
//check for empty recordset
|
|
if (m_pRecordSet->GetadoEOF())
|
|
m_bNoRecords = true;// no records found
|
|
else
|
|
m_bNoRecords = false;//there are records
|
|
|
|
//open must be true or an exception would have happened before now
|
|
//or so the theory goes
|
|
m_bOpen=true;
|
|
}
|
|
|
|
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
AfxMessageBox(cstrErrMsg);
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
|
|
}
|
|
|
|
|
|
return m_bOpen;
|
|
|
|
}
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void GZRset::SetConnect(CString str)
|
|
{
|
|
|
|
_ASSERT(!str.IsEmpty());
|
|
|
|
//set connection string
|
|
m_strConnect=str;
|
|
|
|
|
|
}
|
|
|
|
|
|
//returns lValue records
|
|
//-1 on error. CAUTION:moves bookmark
|
|
//Modified to do it manually as the cursor
|
|
//type in use does not support record count
|
|
long GZRset::FetchRecordCount()
|
|
{
|
|
|
|
m_lRecordCount=0;
|
|
if(MoveFirst())
|
|
{
|
|
do{
|
|
m_lRecordCount++;
|
|
}while(MoveForward());
|
|
m_pRecordSet->MoveFirst();
|
|
|
|
}
|
|
return m_lRecordCount;
|
|
|
|
|
|
}
|
|
|
|
//returns all text type fields in record as one string
|
|
//ignores non text field types
|
|
//Added v1.9.4.6 09-May-2005 to fix problem with indexing
|
|
bool GZRset::FetchAllTextFieldsAsOneString( CString *strValue)
|
|
{
|
|
//Since this function appends instead of setting
|
|
//must ensure passed in string is empty as expected
|
|
strValue->Empty();
|
|
try{
|
|
_variant_t vItem;
|
|
long lFieldCount=m_pRecordSet->GetFields()->Count;
|
|
for(long x=0;x<lFieldCount;x++)
|
|
{
|
|
|
|
vItem = m_pRecordSet->GetCollect(x);
|
|
|
|
if ( vItem.vt==VT_BSTR)
|
|
{
|
|
*strValue+=vItem.bstrVal;
|
|
*strValue+=" ";
|
|
}
|
|
|
|
}
|
|
|
|
}//end try block
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
//cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
cstrErrMsg.Format("At FetchAllTextFieldsAsOneString:\r\n%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
|
|
bool GZRset::FetchAnyFieldAsString(CString fld, CString *strValue)
|
|
{
|
|
//takes a field name and sets the passed cstring contents
|
|
//to that field in the current record
|
|
try{
|
|
_variant_t vItem;
|
|
_bstr_t bsfld(fld);
|
|
vItem = m_pRecordSet->GetCollect(bsfld);
|
|
|
|
if (vItem.vt == VT_NULL)
|
|
strValue->Empty();
|
|
else if(vItem.vt==VT_BOOL)
|
|
{
|
|
if(vItem.boolVal==-1)
|
|
*strValue="1";
|
|
else
|
|
*strValue="0";
|
|
}
|
|
else
|
|
{
|
|
vItem.ChangeType(VT_BSTR,NULL);
|
|
*strValue=vItem.bstrVal;
|
|
}
|
|
|
|
}//end try block
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
//cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
cstrErrMsg.Format("At CString FetchField:\r\n%s: %s,\r\n%s\r\nQuery:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,fld);
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool GZRset::FetchField(CString fld, CString *strValue)
|
|
{
|
|
//takes a field name and sets the passed cstring contents
|
|
//to that field in the current record
|
|
try{
|
|
_variant_t vItem;
|
|
_bstr_t bsfld(fld);
|
|
vItem = m_pRecordSet->GetCollect(bsfld);
|
|
|
|
|
|
|
|
|
|
//to catch those little !@#$ups!
|
|
_ASSERT(vItem.vt==VT_BSTR || vItem.vt==VT_NULL);
|
|
|
|
// clean out nasty nulls
|
|
if (vItem.vt == VT_NULL)
|
|
strValue->Empty();
|
|
else
|
|
*strValue=vItem.bstrVal;
|
|
|
|
}//end try block
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
//cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
cstrErrMsg.Format("At CString FetchField:\r\n%s: %s,\r\n%s\r\nQuery:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,fld);
|
|
//Added 08/03/2001 to hide errors on update
|
|
if(!m_bSupressErrors)
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool GZRset::FetchField(CString fld, bool *bValue)
|
|
{
|
|
//same as string field but for a bool item instead
|
|
//_ASSERTs on invalid field name or type
|
|
try{
|
|
_variant_t vItem;
|
|
_bstr_t bsfld(fld);
|
|
vItem = m_pRecordSet->GetCollect(bsfld);
|
|
//to catch those little !@#$ups!
|
|
_ASSERT(vItem.vt==VT_BOOL || vItem.vt==VT_NULL);
|
|
|
|
// clean out nasty nulls
|
|
if (vItem.vt == VT_NULL)
|
|
{
|
|
*bValue=false;
|
|
return true;
|
|
}
|
|
|
|
*bValue=(bool)vItem;
|
|
|
|
}//end try block
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
// cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
cstrErrMsg.Format("At BOOL FetchField:\r\n%s: %s,\r\n%s\r\nQuery:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,fld);
|
|
//Added 08/03/2001 to hide errors on update
|
|
if(!m_bSupressErrors)
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
|
|
//************************************************
|
|
bool GZRset::FetchField(CString fld, long *lValue)
|
|
{
|
|
//same as string field but for a long variable instead
|
|
//_ASSERTs on invalid field name or type
|
|
//same as string field but for a bool item instead
|
|
//_ASSERTs on invalid field name or type
|
|
try{
|
|
_variant_t vItem;
|
|
_bstr_t bsfld(fld);
|
|
vItem = m_pRecordSet->GetCollect(bsfld);
|
|
//to catch those little !@#$ups!
|
|
_ASSERT(vItem.vt==VT_I4 || vItem.vt==VT_NULL);
|
|
|
|
// clean out nasty nulls
|
|
if (vItem.vt == VT_NULL)
|
|
{
|
|
*lValue=0;
|
|
return true;
|
|
}
|
|
|
|
*lValue=vItem.lVal;
|
|
|
|
}//end try block
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
//cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
cstrErrMsg.Format("At LONG FetchField:\r\n%s: %s,\r\n%s\r\nQuery:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,fld);
|
|
//Added 08/03/2001 to hide errors on update
|
|
if(!m_bSupressErrors)
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//************************************************
|
|
bool GZRset::FetchField(CString fld, float *fValue)
|
|
{
|
|
//same as string field but for a long variable instead
|
|
//_ASSERTs on invalid field name or type
|
|
//same as string field but for a bool item instead
|
|
//_ASSERTs on invalid field name or type
|
|
try{
|
|
_variant_t vItem;
|
|
_bstr_t bsfld(fld);
|
|
vItem = m_pRecordSet->GetCollect(bsfld);
|
|
//to catch those little !@#$ups!
|
|
_ASSERT(vItem.vt==VT_R4 || vItem.vt==VT_NULL);
|
|
|
|
// clean out nasty nulls
|
|
if (vItem.vt == VT_NULL)
|
|
{
|
|
*fValue=0;
|
|
return true;
|
|
}
|
|
|
|
*fValue=vItem.fltVal;
|
|
|
|
}//end try block
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
//cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
cstrErrMsg.Format("At Float FetchField:\r\n%s: %s,\r\n%s\r\nQuery:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,fld);
|
|
//Added 08/03/2001 to hide errors on update
|
|
if(!m_bSupressErrors)
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
//********************************************
|
|
bool GZRset::IsEmpty()
|
|
{
|
|
|
|
return m_bNoRecords;
|
|
}
|
|
|
|
|
|
bool GZRset::MoveFirst()
|
|
{
|
|
//ASSERT(m_bForwardOnly==false);
|
|
if(m_bNoRecords==true || m_bOpen==false) return false;
|
|
|
|
HRESULT hr;
|
|
hr=m_pRecordSet->MoveFirst();
|
|
if(FAILED(hr)) return false;
|
|
return true;
|
|
}
|
|
|
|
bool GZRset::MoveLast()
|
|
{
|
|
if(m_bNoRecords==true || m_bOpen==false) return false;
|
|
|
|
HRESULT hr;
|
|
hr=m_pRecordSet->MoveLast();
|
|
if(FAILED(hr)) return false;
|
|
return true;
|
|
}
|
|
|
|
bool GZRset::MoveForward()
|
|
{
|
|
if(m_bNoRecords==true || m_bOpen==false) return false;
|
|
HRESULT hr;
|
|
try{
|
|
hr=m_pRecordSet->MoveNext();
|
|
if(FAILED(hr)) return false;
|
|
if(m_pRecordSet->GetadoEOF()) return false;
|
|
}
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
cstrErrMsg.Format("At MoveForward:\r\n%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool GZRset::MoveBack()
|
|
{
|
|
ASSERT(m_bForwardOnly==false);
|
|
|
|
if(m_bNoRecords==true || m_bOpen==false) return false;
|
|
HRESULT hr;
|
|
hr=m_pRecordSet->MovePrevious();
|
|
if(FAILED(hr)) return false;
|
|
if(m_pRecordSet->GetBOF()) return false;
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
//DATE AND TIME VERSION - Boo-ya!
|
|
bool GZRset::FetchField(CString fld, COleDateTime *dtValue)
|
|
{
|
|
|
|
//Fetch a date time field
|
|
//_ASSERTs on invalid field name or type
|
|
//same as string field but for a bool item instead
|
|
//_ASSERTs on invalid field name or type
|
|
try{
|
|
_variant_t vItem;
|
|
_bstr_t bsfld(fld);
|
|
vItem = m_pRecordSet->GetCollect(bsfld);
|
|
//to catch those little !@#$ups!
|
|
_ASSERT(vItem.vt==VT_DATE || vItem.vt==VT_NULL);
|
|
|
|
|
|
// clean out nasty nulls
|
|
if (vItem.vt == VT_NULL)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
*dtValue=vItem.date;
|
|
|
|
}//end try block
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
//cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
cstrErrMsg.Format("At DT fetchfield:\r\n%s: %s,\r\n%s\r\nQuery:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,fld);
|
|
//Added 08/03/2001 to hide errors on update
|
|
if(!m_bSupressErrors)
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//CURRENCY VERSION - Boo-ya!
|
|
bool GZRset::FetchField(CString fld, COleCurrency *crValue)
|
|
{
|
|
|
|
//Fetch a date time field
|
|
//_ASSERTs on invalid field name or type
|
|
//same as string field but for a bool item instead
|
|
//_ASSERTs on invalid field name or type
|
|
try{
|
|
_variant_t vItem;
|
|
_bstr_t bsfld(fld);
|
|
vItem = m_pRecordSet->GetCollect(bsfld);
|
|
//to catch those little !@#$ups!
|
|
_ASSERT(vItem.vt==VT_CY || vItem.vt==VT_NULL);
|
|
|
|
|
|
// clean out nasty nulls
|
|
if (vItem.vt == VT_NULL)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
*crValue=vItem.cyVal;
|
|
|
|
}//end try block
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
//cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
cstrErrMsg.Format("At $$ fetchfield:\r\n%s: %s,\r\n%s\r\nField:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,fld);
|
|
//Added 08/03/2001 to hide errors on update
|
|
if(!m_bSupressErrors)
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
//************************************************
|
|
//Fetch unsigned char 0-255 BYTE value in database
|
|
bool GZRset::FetchField(CString fld, unsigned char *byteValue)
|
|
{
|
|
|
|
try{
|
|
_variant_t vItem;
|
|
_bstr_t bsfld(fld);
|
|
vItem = m_pRecordSet->GetCollect(bsfld);
|
|
//to catch those little !@#$ups!
|
|
//_ASSERT(vItem.vt==VT_UI1 || vItem.vt==VT_NULL);
|
|
|
|
// clean out nasty nulls
|
|
if (vItem.vt == VT_NULL)
|
|
{
|
|
*byteValue=0;
|
|
return true;
|
|
}
|
|
|
|
*byteValue=vItem.bVal;
|
|
|
|
}//end try block
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
//cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
cstrErrMsg.Format("At BYTE FetchField:\r\n%s: %s,\r\n%s\r\nQuery:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,fld);
|
|
//Added 08/03/2001 to hide errors on update
|
|
if(!m_bSupressErrors)
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//***************************************************8
|
|
//byte value 0-255
|
|
bool GZRset::UpdateField(CString fld, unsigned char* byteValue)
|
|
{
|
|
try
|
|
{
|
|
_variant_t vItem(*byteValue);
|
|
_bstr_t bsfld(fld);
|
|
m_pRecordSet->Fields->GetItem(bsfld)->Value=vItem;
|
|
|
|
}
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
//cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
cstrErrMsg.Format("At BYTE UpdateField:\r\n%s: %s,\r\n%s\r\nQuery:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,fld);
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//***************************************************8
|
|
bool GZRset::UpdateField(CString fld, long* lValue)
|
|
{
|
|
try
|
|
{
|
|
_variant_t vItem(*lValue);
|
|
_bstr_t bsfld(fld);
|
|
m_pRecordSet->Fields->GetItem(bsfld)->Value=vItem;
|
|
|
|
}
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
//cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
cstrErrMsg.Format("At LONG UpdateField:\r\n%s: %s,\r\n%s\r\nQuery:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,fld);
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
}
|
|
|
|
//***************************************************8
|
|
//FLOAT or SINGLE type
|
|
|
|
bool GZRset::UpdateField(CString fld, float* fValue)
|
|
{
|
|
try
|
|
{
|
|
_variant_t vItem(*fValue);
|
|
_bstr_t bsfld(fld);
|
|
m_pRecordSet->Fields->GetItem(bsfld)->Value=vItem;
|
|
|
|
}
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
//cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
cstrErrMsg.Format("At float updatefield:\r\n%s: %s,\r\n%s\r\nQuery:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,fld);
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
}
|
|
|
|
//*********************************************************
|
|
bool GZRset::UpdateField(CString fld, bool* bValue)
|
|
{
|
|
try
|
|
{
|
|
_variant_t vItem(*bValue);
|
|
_bstr_t bsfld(fld);
|
|
m_pRecordSet->Fields->GetItem(bsfld)->Value=vItem;
|
|
|
|
}
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
//cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
cstrErrMsg.Format("At bool updatefield:\r\n%s: %s,\r\n%s\r\nQuery:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,fld);
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool GZRset::UpdateField(CString fld, CString *strValue)
|
|
{
|
|
try
|
|
{
|
|
_variant_t vItem(*strValue);
|
|
if(strValue->IsEmpty())
|
|
vItem.vt=VT_NULL;
|
|
_bstr_t bsfld(fld);
|
|
m_pRecordSet->Fields->GetItem(bsfld)->Value=vItem;
|
|
|
|
}
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
// cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
cstrErrMsg.Format("At CString UpdateField:\r\n%s: %s,\r\n%s\r\nQuery:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,fld);
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
//********************************************************
|
|
bool GZRset::UpdateField(CString fld, COleDateTime *dtValue)
|
|
{
|
|
|
|
try
|
|
{
|
|
_variant_t vItem(*dtValue);
|
|
_bstr_t bsfld(fld);
|
|
m_pRecordSet->Fields->GetItem(bsfld)->Value=vItem;
|
|
|
|
}
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
//cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
cstrErrMsg.Format("At DT UpdateField:\r\n%s: %s,\r\n%s\r\nQuery:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,fld);
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
//CURRENCY:
|
|
//********************************************************
|
|
bool GZRset::UpdateField(CString fld, COleCurrency *crValue)
|
|
{
|
|
|
|
try
|
|
{
|
|
_variant_t vItem(*crValue);
|
|
_bstr_t bsfld(fld);
|
|
m_pRecordSet->Fields->GetItem(bsfld)->Value=vItem;
|
|
|
|
}
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
//cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
cstrErrMsg.Format("At $$ UpdateField:\r\n%s: %s,\r\n%s\r\nQuery:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,fld);
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
//***********************************************************
|
|
bool GZRset::AddNewRecord()
|
|
{
|
|
|
|
try{m_pRecordSet->AddNew(vtMissing, vtMissing);}
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool GZRset::SaveRecord()
|
|
{
|
|
|
|
|
|
try{
|
|
|
|
|
|
m_pRecordSet->Update();
|
|
|
|
|
|
}
|
|
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
//New close routine, no more stupid extra database calls
|
|
//booya!
|
|
//This function is really a refresh method
|
|
//used to ensure that data is completely updated
|
|
//before another query that requires it immediately following
|
|
bool GZRset::Close()
|
|
{
|
|
ASSERT(!m_bSQLServer);
|
|
|
|
try{
|
|
|
|
|
|
//changed may 21 2001 moved inside of check
|
|
//IJetEnginePtr jet(__uuidof(JetEngine));
|
|
//jet->RefreshCache(pTheConnection);
|
|
|
|
if(m_pRecordSet->GetState()==adStateOpen)
|
|
{
|
|
|
|
if(!m_bSQLServer)
|
|
{
|
|
IJetEnginePtr jet(__uuidof(JetEngine));
|
|
jet->RefreshCache(pTheConnection);
|
|
}
|
|
m_pRecordSet->Close();
|
|
|
|
}
|
|
|
|
m_bOpen=false;
|
|
m_bIsClosed=true;
|
|
m_bInUse=false;
|
|
}
|
|
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
//returns last error message
|
|
//added 9/25/00
|
|
//returns last exception error message
|
|
CString GZRset::GetLastError()
|
|
{
|
|
return m_strLastError;
|
|
}
|
|
|
|
|
|
|
|
//valid recordset?
|
|
bool GZRset::Valid()
|
|
{
|
|
|
|
if(m_pRecordSet==NULL)
|
|
return false;
|
|
else
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
//used to set a definable error message
|
|
//that will be displayed on any kind
|
|
//of recordset error when thrown
|
|
//this is set by each calling function
|
|
//so that the area where the error is occuring
|
|
//can be easily determined
|
|
void GZRset::SetErrorMsg(CString strError)
|
|
{
|
|
m_strErrMsg=strError;
|
|
}
|
|
|
|
void GZRset::Initialize(CString strError)
|
|
{
|
|
|
|
if(m_bInUse)
|
|
{
|
|
CString XX;
|
|
XX.Format("Error:Recordset\r\n %s\r\nIs trying to be taken over by\r\n"
|
|
"Recordset\r\n %s\r\nWhile still in use.",m_strErrMsg,strError);
|
|
AfxMessageBox(XX);
|
|
return;
|
|
}
|
|
else
|
|
m_bInUse=true;
|
|
m_strErrMsg=strError;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Execute an SQL statement independant of recordset
|
|
//supersedes Execute (dec 7 2000)
|
|
bool GZRset::Ex(CString strQuery)
|
|
{
|
|
//TRACE(strQuery);
|
|
//#ifdef _DEBUG
|
|
// CString q;
|
|
// q.Format("Transactions are:%s\r\n%s",m_bUseTransactions?"ON":"OFF",strQuery);
|
|
// AfxMessageBox(q);
|
|
//#endif
|
|
|
|
bool status=true;
|
|
//this function takes a sql statement and runs and execute
|
|
//query using a connection object. It returns true if successful
|
|
//False if not
|
|
|
|
if(m_bExclusiveConnection)
|
|
m_strConnect=m_strLiveConnectStringExclusive;
|
|
else
|
|
m_strConnect=m_strLiveConnectString;
|
|
|
|
try
|
|
{
|
|
|
|
//convert the string to a bstr
|
|
_bstr_t strSQL(strQuery);
|
|
/* if(m_bUseTransactions)
|
|
pTheConnection->BeginTrans();
|
|
//convert the string to a bstr
|
|
_bstr_t strSQL(strQuery);
|
|
pTheConnection->Execute(strSQL, NULL, adExecuteNoRecords);
|
|
if(m_bUseTransactions)
|
|
pTheConnection->CommitTrans();
|
|
*/
|
|
|
|
if(m_bUseTransactions)
|
|
pTheConnection->BeginTrans();
|
|
|
|
pTheConnection->Execute(strSQL, NULL, adExecuteNoRecords);
|
|
|
|
if(m_bUseTransactions)
|
|
pTheConnection->CommitTrans();
|
|
|
|
|
|
}
|
|
|
|
catch (_com_error &e)
|
|
{
|
|
if(m_bUseTransactions)
|
|
pTheConnection->RollbackTrans();
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
cstrErrMsg.Format("at EX standard:\r\n%s: %s,\r\n%s\r\nQuery:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,strQuery);
|
|
//cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
|
|
return status;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Execute and set Identity return
|
|
//New version 12/7/2000
|
|
bool GZRset::Ex(CString strQuery, long* lIdentity)
|
|
{
|
|
bool status=true;
|
|
_variant_t vQuery;
|
|
|
|
m_bForwardOnly=true;
|
|
//#ifdef _DEBUG
|
|
// CString q;
|
|
// q.Format("Transactions are:%s\r\n%s",m_bUseTransactions?"ON":"OFF",strQuery);
|
|
// AfxMessageBox(q);
|
|
//#endif
|
|
|
|
try
|
|
{
|
|
|
|
//if the recordset is already open, close it first.
|
|
//because open is also requery
|
|
if(m_bOpen)
|
|
{
|
|
m_pRecordSet->Close();
|
|
|
|
m_bOpen=false;
|
|
}
|
|
|
|
if(m_bExclusiveConnection)
|
|
m_strConnect=m_strLiveConnectStringExclusive;
|
|
else
|
|
m_strConnect=m_strLiveConnectString;
|
|
|
|
//RUN THE EXECUTE QUERY PART
|
|
|
|
//convert the string to a bstr
|
|
_bstr_t strSQL(strQuery);
|
|
|
|
//new method using already open connection
|
|
if(m_bUseTransactions)
|
|
pTheConnection->BeginTrans();
|
|
|
|
pTheConnection->Execute(strSQL, NULL, adExecuteNoRecords);
|
|
|
|
if(m_bUseTransactions)
|
|
pTheConnection->CommitTrans();
|
|
//GET THE IDENTITY PART
|
|
vQuery="SELECT @@Identity;";
|
|
m_pRecordSet->Open(vQuery, _variant_t((IDispatch *)pTheConnection,true), adOpenForwardOnly, adLockOptimistic, adCmdUnknown);
|
|
|
|
//open must be true or an exception would have happened before now
|
|
m_bOpen=true;
|
|
|
|
_variant_t vItem;
|
|
vItem = m_pRecordSet->Fields->GetItem( _variant_t( 0L ) )->Value;
|
|
//to catch those little !@#$ups!
|
|
_ASSERT(vItem.vt==VT_I4 || vItem.vt==VT_NULL);
|
|
|
|
// clean out nasty nulls
|
|
if (vItem.vt == VT_NULL)
|
|
{
|
|
AfxMessageBox("Error at: GZRset::Execute Identity = NULL");
|
|
*lIdentity=0;
|
|
return false;
|
|
}
|
|
|
|
*lIdentity=vItem.lVal;
|
|
|
|
|
|
|
|
}
|
|
|
|
catch (_com_error &e)
|
|
{
|
|
if(m_bUseTransactions)
|
|
pTheConnection->RollbackTrans();
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
cstrErrMsg.Format("at EX(identity)\r\n%s: %s,\r\n%s\r\nQuery:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,strQuery);
|
|
//cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
|
|
return status;
|
|
}
|
|
|
|
//Added Dec 8th 2000 with new pooling class
|
|
//this is required as it's no longer kosher
|
|
//to set this in the constructor
|
|
bool GZRset::SetToPrint(bool bPrinting)
|
|
{
|
|
|
|
if(bPrinting)
|
|
{
|
|
m_pRecordSet->CursorLocation=adUseClient;
|
|
m_bPrinting=true;
|
|
}
|
|
else
|
|
{
|
|
m_pRecordSet->CursorLocation=adUseServer;
|
|
m_bPrinting=false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
CString GZRset::GetRSInfo()
|
|
{
|
|
CString strTemp;
|
|
strTemp.Format("RS#%i\r\nErr String ID:%s",m_nID,m_strErrMsg);
|
|
|
|
return strTemp;
|
|
|
|
}
|
|
|
|
|
|
//used to set the error message/id string of a recordset
|
|
//when it's re-used.
|
|
void GZRset::SetErrMsg(CString strErrorID)
|
|
{
|
|
m_strErrMsg=strErrorID;
|
|
|
|
}
|
|
|
|
|
|
//required because query based recordsets don't
|
|
//come across as memos and so crystal thinks
|
|
//they are regular text 255 char size only
|
|
//and truncates
|
|
CString GZRset::SetFieldToMemo(CString fld)
|
|
{
|
|
|
|
int x;
|
|
long lActualSize;
|
|
long lDefinedSize;
|
|
int nMySize;
|
|
CString strData;
|
|
_variant_t vItem;
|
|
_variant_t vData;
|
|
_variant_t vFld(fld);
|
|
long lCount=m_pRecordSet->Fields->GetCount();
|
|
for(long lx=0;lx<lCount+1;lx++)
|
|
{
|
|
//m_pRecordSet->Fields->GetItem(lx)->Type;
|
|
vItem=m_pRecordSet->Fields->GetItem(lx)->Name;
|
|
x = m_pRecordSet->Fields->GetItem(lx)->Type;
|
|
lActualSize=m_pRecordSet->Fields->GetItem(lx)->GetActualSize();
|
|
lDefinedSize=m_pRecordSet->Fields->GetItem(lx)->GetDefinedSize();
|
|
vData=m_pRecordSet->Fields->GetItem(lx)->GetUnderlyingValue();
|
|
|
|
|
|
if(vItem==vFld)
|
|
{
|
|
strData=vData.bstrVal;
|
|
nMySize=strData.GetLength();
|
|
break;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return strData;
|
|
|
|
|
|
}
|
|
|
|
|
|
//given a field name return an int that indicates what
|
|
//type it is
|
|
int GZRset::FetchFieldType(CString fld)
|
|
{
|
|
//-1=unknown,0=text,1=long int,2=datetime,3=currency,4=float,5=bool;
|
|
int nType=-1;
|
|
//_ASSERTs on invalid field name
|
|
try{
|
|
_variant_t vItem;
|
|
_bstr_t bsfld(fld);
|
|
vItem = m_pRecordSet->GetCollect(bsfld);
|
|
|
|
switch(vItem.vt)
|
|
{
|
|
case (VT_BOOL):
|
|
nType=5;
|
|
break;
|
|
case (VT_BSTR):
|
|
nType=0;
|
|
break;
|
|
case (VT_I4):
|
|
nType=1;
|
|
break;
|
|
case (VT_CY):
|
|
nType=3;
|
|
break;
|
|
case (VT_DATE):
|
|
nType=2;
|
|
break;
|
|
case (VT_R4):
|
|
nType=4;
|
|
break;
|
|
default:
|
|
nType=-1;
|
|
break;
|
|
}
|
|
|
|
return nType;
|
|
}//end try block
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
// cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
cstrErrMsg.Format("At FetchFieldType:\r\n%s: %s,\r\n%s\r\nField:%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription,fld);
|
|
AfxMessageBox(cstrErrMsg);
|
|
return -1;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox(m_strErrMsg);
|
|
PostQuitMessage(-1);//exit now before anything worse happens
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
//*******************USEFUL INFORMATION *******************
|
|
|
|
/*
|
|
//test of createable recordset and saving to disk
|
|
bool CAyabaseDlg::test()
|
|
{
|
|
GZRset rs("test in memory",true);
|
|
_bstr_t bsName("TEST");
|
|
_variant_t vt(_bstr_t("c:\\temp\\test.xml"));
|
|
_variant_t vtTEST(_bstr_t("mangoes, mangoes everywhere!"));
|
|
COleDateTime dtNow=COleDateTime::GetCurrentTime();
|
|
_variant_t vtDate(dtNow);
|
|
|
|
try{
|
|
|
|
|
|
|
|
_RecordsetPtr pRS;
|
|
pRS.CreateInstance( __uuidof(Recordset));
|
|
pRS->CursorLocation = adUseClient;
|
|
pRS->CursorType = adOpenStatic;
|
|
pRS->LockType = adLockBatchOptimistic;
|
|
// append fields
|
|
pRS->Fields->Append(_bstr_t("charfield"), adVarChar, 99,adFldFixed);
|
|
pRS->Fields->Append(_bstr_t("boolfield"), adBoolean, 0,adFldFixed);
|
|
pRS->Fields->Append(_bstr_t("currencyfield"), adCurrency, 0,adFldFixed);
|
|
pRS->Fields->Append(_bstr_t("datefield"), adDate, 0,adFldFixed);
|
|
pRS->Open(vtMissing, vtMissing, adOpenStatic,adLockBatchOptimistic,-1);
|
|
pRS->AddNew(vtMissing, vtMissing);
|
|
pRS->Fields->Item["charfield"]->Value = vtTEST;
|
|
pRS->Fields->Item["datefield"]->Value = vtDate;
|
|
|
|
pRS->Update();
|
|
pRS->Save(vt,adPersistXML);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//rs.RecordSetPointer()->Fields->Append(bsName,adVarChar,25,adFldUnspecified,vt);
|
|
}
|
|
catch (_com_error &e)
|
|
{
|
|
|
|
CString cstrErrMsg;
|
|
// get info from com error
|
|
_bstr_t bstrSource(e.Source());
|
|
_bstr_t bstrDescription(e.Description());
|
|
TRACE("*************************************************\n");
|
|
TRACE("Exception thrown for classes generated by #import\n");
|
|
TRACE("\tCode = %081x\n", e.Error);
|
|
TRACE("\tCode Meaning = %s\n", e.ErrorMessage());
|
|
TRACE("\tSource = %s\n", (LPCTSTR) bstrSource);
|
|
TRACE("Description = %s\n", (LPCTSTR) bstrDescription);
|
|
TRACE("*************************************************\n");
|
|
cstrErrMsg.Format("at in created rset\r\n: %s,\r\n%s\r\n", e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
//cstrErrMsg.Format("%s: %s,\r\n%s",m_strErrMsg, e.ErrorMessage(), (LPCTSTR) bstrDescription);
|
|
AfxMessageBox(cstrErrMsg);
|
|
return false;
|
|
}
|
|
catch (...)
|
|
{
|
|
|
|
TRACE("*** Unhandled exception ***");
|
|
AfxMessageBox("Created rset - unhandled exception");
|
|
//PostQuitMessage(-1);//exit now before anything worse happens
|
|
return false;
|
|
|
|
}
|
|
//rs.RecordSetPointer()->Fields->"TEST",adVarChar,20
|
|
return true;
|
|
|
|
|
|
}
|
|
*/
|
|
//*************************************************************************
|