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.

Context

This tutorial shows you:

  • how to create a user defined table

  • how to create a user defined record and store that record in the table

Prerequisites

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

Steps

  1. Make sure that you have created a session.

  2. Define a schema for the new table.

    Create an array of [[[ERROR: [NOKX000E] Unable to find definition for key reference 'CommsDat']]]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)
            };
  3. Define a name for the table.

    _LIT(KGenericTable,"MyGenericTable");
  4. Create a [[[ERROR: [NOKX000E] Unable to find definition for key reference 'CommsDat']]]CMDBGenericRecord object.

    A [[[ERROR: [NOKX000E] Unable to find definition for key reference 'CommsDat']]]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);
    ...
  5. Access fields in the record.

    The code uses GetFieldByNameL() and GetFieldByIdL().
    ...
    TInt valueType;
    
    CMDBElement* LanType = ptrNewTable-> GetFieldByNameL(KNameWLANType, valueType);
    CMDBElement* RecordName = ptrNewTable->GetFieldByIdL(KCDTIdRecordName);
    ...
  6. 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);
    ...

Related concepts