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/