Creating
a User Defined Table: Tutorial
This tutorial shows you how to create a user defined table. The
tutorial, then shows you how to store a new record.
Before you start,
you must understand:
the general concept
of the Comms Database
the specific concepts
of fields, records, links and tables
how to write and build
application code to run on Symbian platform
- Make sure that you
have created a session.
- Define a schema
for the new table.
Create an array of SGenericRecordTypeInfo items.
Each SGenericRecordTypeInfo item defines a field in the record.
const SGenericRecordTypeInfo recordInfo[] =
{
SGenericRecordTypeInfo(KCDTIdRecordName,EText,ENotNull,KCDTypeNameRecordName),
SGenericRecordTypeInfo(KCDTIdRecordTag,EUint32,ENoAttrs,KCDTypeNameRecordTag),
SGenericRecordTypeInfo(KCDTIdWLANServiceId,EUint32,ENoAttrs,KNameWLANServiceId),
SGenericRecordTypeInfo(KCDTIdWLANType,EUint32,ENoAttrs,KNameWLANType),
SGenericRecordTypeInfo(KCDTIdWLANEnabled,EBool,ENoAttrs,KNameWLANEnabled),
SGenericRecordTypeInfo(KCDTIdWLANPriority,EUint32,ENoAttrs,KNameWLANPriority),
SGenericRecordTypeInfo(0,0,ENoAttrs,KCDNull)
};
- Define a name for
the table.
_LIT(KGenericTable,"MyGenericTable");
- Create a CMDBGenericRecord object.
A CMDBGenericRecord object represents
a record and a set of records
Give the object the name of the table and the name of the schema.
...
// Record factory creates the CMDBGenericRecord object. The KCDNewTableRequest value
// passed to the record factory allocates a new table Id.
CMDBGenericRecord* ptrNewTable =
static_cast<CMDBGenericRecord*>(CCDRecordBase::RecordFactoryL(KCDNewTableRequest));
// Initialise with the name of the table and the name of the schema.
ptrNewTable->InitialiseL(KGenericTable(),recordInfo);
...
- Access fields in
the record.
The code uses GetFieldByNameL() and GetFieldByIdL().
...
TInt valueType;
CMDBElement* LanType = ptrNewTable-> GetFieldByNameL(KNameWLANType, valueType);
CMDBElement* RecordName = ptrNewTable->GetFieldByIdL(KCDTIdRecordName);
...
- Change the valuie
of the fields and create a new record.
...
// Cast the field objects to the appropriate type
CMDBField<TUint32>* LanTypefield = static_cast<CMDBField<TUint32>*>(LanType);
CMDBField<TDesC>* RecordNamefield = static_cast<CMDBField<TDesC>*>(RecordName);
// Change the field value
*LanTypefield = 100;
// Change the field value
_LIT(KNewName, " NewName ");
RecordNamefield->SetMaxLengthL(KNewName().Length());
*RecordNamefield = KNewName();
// Can also use this format: RecordNamefield->SetL(KNewName());
// Asks for a new record
ptrNewTable->SetRecordId(KCDNewRecordRequest);
// Stores the new record
ptrNewTable->StoreL(*iDb);
...