Home > Archive > MS SQL Server ODBC > May 2005 > CRecordset.Close() causes exception









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author CRecordset.Close() causes exception
Jezzer

2005-05-12, 7:23 am

Hi,

I'm having problems with VC++ 6.0 reading an Access 2000 database.
CRecordset::Close() throws an exception. I've created a simple test
dialog which does an open and close of a CRecordset. The database has
one table called 'Addresses' in it. The CAddressSet was created by the
Class Wizard.

void CDatabaseDlg::OnOK()

{
CDatabase db;

db. Open(NULL,FALSE,FALS
E,"DSN=c:\\dev\\db1.mdb");

// Construct the snapshot object
CAddressSet rsAddr( NULL );

// Set options if desired, then open the recordset
rsAddr. Open(CRecordset::sna
pshot, NULL, CRecordset::none );


rsAddr.Close( );
db.Close( );


Dialog::OnOK();
}

The Close method throws on the AFX_SQP_SERVER line below:

RETCODE nRetCode;
if (m_hstmt != SQL_NULL_HSTMT)
{
AFX_SQL_SYNC(::SQLFr
eeStmt(m_hstmt, SQL_DROP));
m_hstmt = SQL_NULL_HSTMT;
}

This program just couldn't get any simpler - and yet it doesn't work!
Anybody got any clue as to why????

Many thanks,

Jeremy

Baxter

2005-05-12, 11:23 am

Recordset is not connected to database? Recordset is completely empty?
etc?

--
-------------------------------------------------------------------------
Free software - Baxter Codeworks www.baxcode.com
-------------------------------------------------------------------------


"Jezzer" <Jemtaylor@yahoo.com> wrote in message
news:1115894836.839503.104060@g14g2000cwa.googlegroups.com...
> Hi,
>
> I'm having problems with VC++ 6.0 reading an Access 2000 database.
> CRecordset::Close() throws an exception. I've created a simple test
> dialog which does an open and close of a CRecordset. The database has
> one table called 'Addresses' in it. The CAddressSet was created by the
> Class Wizard.
>
> void CDatabaseDlg::OnOK()

> {
> CDatabase db;
>
> db. Open(NULL,FALSE,FALS
E,"DSN=c:\\dev\\db1.mdb");
>
> // Construct the snapshot object
> CAddressSet rsAddr( NULL );
>
> // Set options if desired, then open the recordset
> rsAddr. Open(CRecordset::sna
pshot, NULL, CRecordset::none );
>
>
> rsAddr.Close( );
> db.Close( );
>
>
> Dialog::OnOK();
> }
>
> The Close method throws on the AFX_SQP_SERVER line below:
>
> RETCODE nRetCode;
> if (m_hstmt != SQL_NULL_HSTMT)
> {
> AFX_SQL_SYNC(::SQLFr
eeStmt(m_hstmt, SQL_DROP));
> m_hstmt = SQL_NULL_HSTMT;
> }
>
> This program just couldn't get any simpler - and yet it doesn't work!
> Anybody got any clue as to why????
>
> Many thanks,
>
> Jeremy
>



Jezzer

2005-05-12, 11:23 am

Yes, I see why it might look like that with the NULL in the CRecordSet
declaration. I've defined my test database using ODBC manager and the
GetDefaultConnect() method looks like this:

CString CAddressSet::GetDefa
ultConnect()
{
return _T("ODBC;DSN=db1");
}

where 'db1' is my database with the Addresses table in it. This was all
put there by the wizard.
I have had this same test retrieving the data succesfully but I took
that stuff out to make the example less cluttered.

It's just the Close that crashes whether you retrieve stuff or not.

cheers anyway....

Jeremy

Jezzer

2005-05-27, 7:23 am

Hi all,

I've made some progress with this problem now. I've discovered that
CRecordSet::Close() only crashes when running under Visual Studio -
when the exe is run stand-alone it works fine. I can remove the 'fudge'
and it loads the DB Ok.

The 'fudge' I use where I set m_hstmnt = SQL_NULL_HSTMT in the
::Close() method means that when debugging the method does not crash -
but it seems to cause the Access interface to run *extremely* slowly.
No CPU being used - just seems to be waiting an awful lot. So I suspect
that whatever is being freed by the 'SQLFreeStmt' call is getting
clogged. My hunch is that Access or ODBC is waiting for a space in some
buffer to open up and eventually decides to remove the oldest 'thing' -
whatever that is.

A search of Google Groups shows that lots of people have had this
problem - is there nobody out there that knows the answer?

cheers

Jeremy

Sponsored Links





Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive | Programming forum archive

Copyright 2009 droptable.com