Article ID: 148805
Article Last Modified on 11/21/2006
if (!fieldinfo.m_bAllowZeroLength)
DAO_CHECK(pDAOField->put_AllowZeroLength(AFX_DAO_FALSE));
Because the default in Microsoft Access is FALSE (does not allow zero
length), the above code doesn't set it to TRUE.
void MyCreateField()
{
CDaoDatabase db;
db.Open("c:\\msdev\\projects\\daoenrol\\stdreg32.mdb",
FALSE, FALSE);
// create a tabledef
CDaoTableDef td ( &db );
td.Create(_T("Table1"),0,_T("Table1"), NULL);
// create a FieldInfo structure
struct CDaoFieldInfo m_FI;
m_FI.m_nOrdinalPosition = 0;
// always initialize the rest
m_FI.m_strName = _T("MyField");
m_FI.m_nType = dbText ;
m_FI.m_lSize = 20;
m_FI.m_bAllowZeroLength = TRUE; // To set "Allow Zero Length"
m_FI.m_strDefaultValue = _T("");
m_FI.m_bRequired = FALSE;
m_FI.m_lAttributes = dbUpdatableField;
m_FI.m_strValidationRule = _T("");
m_FI.m_strValidationText = _T("");
// Copy code from CDaoTableDef::CreateField()
DAOField* pDAOField;
// Create the DAO field object (setting basic properties)
// DAO_CHECK(m_pDAOTableDef->CreateField(
DAO_CHECK(td.m_pDAOTableDef->CreateField(
COleVariant(m_FI.m_strName, VT_BSTRT),
COleVariant(m_FI.m_nType),
COleVariant(m_FI.m_lSize), &pDAOField));
TRY
{
// Basic properties already set, so set the rest
MyAfxSetFieldInfo(pDAOField, m_FI);
// Append the field object to the fields collection
if (td.m_pDAOFields == NULL)
// cannot call private member function
//td.InitFieldsCollection();
DAO_CHECK(td.m_pDAOTableDef->get_Fields (&(td.m_pDAOFields)));
DAO_CHECK(td.m_pDAOFields->Append(pDAOField));
}
CATCH_ALL(e)
{
pDAOField->Release();
THROW_LAST();
}
END_CATCH_ALL
pDAOField->Release();
td.Append();
}
Keywords: kbbug kbdatabase kbfix kbprogramming KB148805