PRB: DAO SetParamValue Limited to 255 Characters (168447)



The information in this article applies to:

  • The Microsoft Foundation Classes (MFC), when used with:
    • Microsoft Visual C++, 32-bit Editions 4.0
    • Microsoft Visual C++, 32-bit Editions 4.1
    • Microsoft Visual C++, 32-bit Enterprise Edition 4.2
    • Microsoft Visual C++, 32-bit Professional Edition 4.2
    • Microsoft Visual C++, 32-bit Enterprise Edition 5.0
    • Microsoft Visual C++, 32-bit Professional Edition 5.0
    • Microsoft Visual C++, 32-bit Enterprise Edition 6.0
    • Microsoft Visual C++, 32-bit Professional Edition 6.0
    • Microsoft Visual C++, 32-bit Learning Edition 6.0

This article was previously published under Q168447

SYMPTOMS

The execution of a query following a call to CDaoQueryDef::SetParamValue() results in an error similar to the following:
   DAO Call Failed.
       m_pDAOQueryDef->Execute(COleVariant((long)nOptions))
       In file daocore.cpp on line 2880
       scode = 800A0BC9

   Error Code = 3017
   Source = DAO.QueryDef
   Description = The size of a field is too long.
					

CAUSE

Parameter values are limited to 255 characters.

RESOLUTION

Do not call SetParamValue with a value that contains more than 255 characters. If you need to update or insert a record that does contain long data, use a recordset rather than a querydef.

MORE INFORMATION

DAO and the Jet Engine restrict parameter values to 255 characters or less; this is not a limitation of the MFC DAO classes.

Sample Code

/* Compile options needed: none
*/ 
    CDaoDatabase db;
    CDaoQueryDef query( &db );
    int idx;
    CByteArray blob;
    const int SIZE = 255;    // Execute will succeed if 255, fail if 256
    try
    {
        db.Open( "C:\\DB1.mdb" );
        query.Open( "Query1" );
        query.SetParamValue( "theID", COleVariant( (long)1, VT_I4 ) );

        blob.SetSize( SIZE );
        for( idx = 0; idx < SIZE; ++idx )
            blob.SetAt( idx, (BYTE)idx );
        query.SetParamValue( "theBlob", COleVariant( blob ) );
        query.Execute();
    }
    catch( CDaoException* e )
    {
        AfxMessageBox( e->m_pErrorInfo->m_strDescription,
            MB_ICONEXCLAMATION );
        e->Delete();
    }
    query.Close();
    db.Close();
				

Modification Type:MajorLast Reviewed:12/10/2003
Keywords:kbcode kbDatabase kberrmsg kbprb KB168447