Hi guys, i'm having a bit of trouble here with writing data to my database.
it writes fine but when i go to make a second entry for the same day (ie
index!==-1), the previous entry is overwritten.  here is my addtodatabase
fn....


Err AddToDatabase (PlannerDBPtr record) {
        Err error = errNone;
        UInt16 newIndex = dmMaxRecordIndex;
        MemHandle recHandle;
        MemPtr recPointer;
        UInt16 index;
        Char *tab = "\t";
                
        recPointer = MemPtrNew(sizeof(PlannerDB));
        ((PlannerDBPtr)recPointer)->day = record->day;
        index = GetFromDatabase((PlannerDBPtr)recPointer);
        MemPtrFree(recPointer);
                
        if (index == -1) {
recHandle = DmNewRecord(gDB, &newIndex,
sizeof(Weekday)+StrLen(record->StartTime)+StrLen(tab)+StrLen(record->Modules
)+3);
if (recHandle) {
recPointer = MemHandleLock(recHandle);
DmWrite(recPointer, 0, &(record->day), sizeof(Weekday));
DmWrite(recPointer, sizeof(Weekday), record->StartTime,
StrLen(record->StartTime)+1);
DmWrite(recPointer, sizeof(Weekday)+StrLen(record->StartTime), tab,
StrLen(tab)+1);
DmWrite(recPointer, sizeof(Weekday)+StrLen(record->StartTime)+StrLen(tab),
record->Modules, StrLen(record->Modules)+1);

error = DmReleaseRecord(gDB, newIndex, true);
MemHandleUnlock(recHandle);
                }
        }
        else {
UInt16 newSize = sizeof(record) +
StrLen(record->StartTime)+StrLen(tab)+StrLen(record->Modules)+3;
recHandle = DmResizeRecord(gDB, index, newSize);
if (recHandle) {
recPointer = MemHandleLock(recHandle);
DmWrite(recPointer, 0, &(record->day), sizeof(Weekday));
DmWrite(recPointer, sizeof(Weekday), record->StartTime,
StrLen(record->StartTime)+1);
DmWrite(recPointer, sizeof(Weekday)+StrLen(record->StartTime), tab,
StrLen(tab)+1);
DmWrite(recPointer, sizeof(Weekday)+StrLen(record->StartTime)+StrLen(tab),
record->Modules, StrLen(record->Modules)+1);


MemHandleUnlock(recHandle);
                }
        }
        
        if (error == errNone)
                return 0;
        else
                return DmGetLastErr();

}


My database is declared as follows...

Err AppStart(void) {
Err error = 0;
/* If the database already exists, open it in read/write mode. */
gDB = DmOpenDatabaseByTypeCreator(kDBType, kCreator, dmModeReadWrite);

/* If it doesn't exist, create it. */
if (!gDB) {
error = DmCreateDatabase(0, kDBName, kCreator, kDBType, false);
if (error)
return error;
/* If there is no error creating the database, open it. */
gDB = DmOpenDatabaseByTypeCreator(kDBType, kCreator, dmModeReadWrite);
if (!gDB)
return DmGetLastErr();
}
        return error;
}

with the data declared as

typedef enum Weekday{Mon, Tues, Wed, Thurs, Fri} Weekday;

typedef struct PlannerDB {
        Weekday day;    /* 0 through 6 for Sun through Sat */
        Char Modules[256];
        } PlannerDB;

i can't see the problem, i'm viewing it as follows...might that have
something to do with it?????


void PutTextForDay (Weekday day, UInt16 field) {
        PlannerDBPtr recPointer;
        FieldType *fldP = GetObjectPtr (field);
        Char *none = "No Modules Specified.", *newline = "\n";
        Char *listTextP;
        UInt16 foundData;
        
        recPointer = MemPtrNew(sizeof(PlannerDB));
        recPointer->day = day;
        FldDelete(fldP, 0, FldGetMaxChars(fldP));
        
        foundData = GetFromDatabase(recPointer);
        if (foundData != -1){ // Then data was found
FldInsert(fldP, recPointer->Modules, StrLen(recPointer->Modules));
FldInsert(fldP, newline, StrLen(newline));
                }
                
        else
                FldInsert(fldP, none, StrLen(none));
   MemPtrFree(recPointer);

}

where field is the field where i'm displaying the info.

Thanks very much and any help would be appreciated
Mark

-- 
For information on using the Palm Developer Forums, or to unsubscribe, please see 
http://www.palmos.com/dev/support/forums/

Reply via email to