Hi there
Im having this problem. In the first form of my application i enter a Car
Registration number in a field, in all other other forms i enter car details
associated with that Car Registration number, and when i enter all the Car
Details i save it to the database on the PalmPilot. When it saves it, it
puts the Car Registration number in a list on a viewDatabase form, so when
i want to view the database, i see the the first registration number in the
list, i click it and it shows me all the details to do with that
registration number. The problem is that when i start again, ie put in a
registration number, and all the associated details, and save etc, it
overwrites the registration number that i previously entered, instead of
putting it below the Registration Number, and i entered previously.
My email address is [EMAIL PROTECTED]
I think that its a problem with my Index, when i write to the database.
Here is some of code below
This first of all puts the Location on top of the list, ina nother form
Boolean ViewOffencesFormHandleEvent(EventType * eventP)
{
Boolean handled = false;
FormType * frmP;
Char *choices;
ListPtr lst;
UInt16 itemIndex, textLen, choicesOffset = 0, i;
UInt16 NumRecords = 1;
Err error;
FYPDB *RecordPointer2;
//UInt16 index = 0;
switch (eventP->eType)
{
LstSetSelection(GetObjectPtr(ViewOffencesRegNumbersList), -1);
case frmOpenEvent:
// Get a pointer to the main form.
frmP = FrmGetActiveForm();
// Get the number of records currently in the application's
database.
NumRecords = DmNumRecords(gDatabase);
if (NumRecords)
{
// Prepare to setup the contents of the list for the
main form.
// Get a pointer to the list object.
lst = GetObjectPtr(ViewOffencesRegNumbersList);
//itemIndex = FrmGetObjectIndex(frmP,
ViewOffencesRegNumbersList);
//lst = FrmGetObjectPtr(frmP, itemIndex);
// Allocate an initial block for the list choices.
ChoicesHandle = MemHandleNew(sizeof(char));
// Lock down the block and set it's initial value to
an empty string.
choices = MemHandleLock(ChoicesHandle);
*choices = 0;
// Build up the choices.
// A sequence of strings packed one after another,
one for each record.
for (itemIndex = 0; itemIndex < NumRecords;
itemIndex++)
{
// Retrieve the record from the
database and lock it down.
RecHandle = DmGetRecord(gDatabase,
itemIndex);
RecordPointer2 =
MemHandleLock(RecHandle);
textLen =
StrLen(RecordPointer2->Location);
// Grow the choices buffer to
accomodate the new string. We must unlock
// the chunk so that the Memory
Manager can move the chunk if neccessary to
// grow it.
MemHandleUnlock(ChoicesHandle);
error =
MemHandleResize(ChoicesHandle, textLen + choicesOffset + sizeof('\0'));
choices =
MemHandleLock(ChoicesHandle);
// Check for fatal error.
ErrFatalDisplayIf(error, "Could not
grow choices for list.");
// Copy the text from the record to
the choices buffer.
for (i = 0; i < textLen; i++)
{
choices[choicesOffset + i] =
RecordPointer2->Location[i];
}
// Update the end of choices offset
and set a zero terminator
// on the string in the choices
buffer.
choicesOffset += textLen;
choices[choicesOffset++] = 0;
// Unlock the handle to the record.
MemHandleUnlock(RecHandle);
// Release the record, not dirty.
DmReleaseRecord(gDatabase,
itemIndex, false);
}
// Create an array of pointers from the choices
strings.
ChoicesPtrsHandle =
SysFormPointerArrayToStrings(choices, NumRecords);
// Set the list choices from the array of pointers.
LstSetListChoices(lst,
MemHandleLock(ChoicesPtrsHandle), NumRecords);
}
FrmDrawForm(frmP);
handled = true;
break;
case frmCloseEvent: // The form was told to close.
// Free the memory blocks allocated for the list.
if (ChoicesHandle)
{
MemHandleFree(ChoicesHandle);
ChoicesHandle = 0;
MemHandleFree(ChoicesPtrsHandle);
}
break;
case ctlSelectEvent:
return
ViewOffencesFormDoCommand(eventP->data.ctlSelect.controlID);
default:
break;
}
return handled;
}
This is the form where i write the details to the database, when i go back
and enter more details it seems to put the index back to 0 again, so it
dosent seem to increment ??
Boolean FinalFormDoCommand(UInt16 command)
{
Boolean handled = false;
FYPDB CarDetails[2];
MemHandle RecordHandle;
char *RecordPointer1;
FormType * frmP;
switch (command)
{
case FinalBackButton:
FrmGotoForm(MainForm);
break;
case FinalSaveButton:
frmP = FrmGetActiveForm();
CarDetails[Index].RegNum = outputString;
CarDetails[Index].Location = outputString2;
CarDetails[Index].Colour = outputString3;
CarDetails[Index].CarType = outputString4;
CarDetails[Index].Offence = outputString5;
RecordHandle = DmNewRecord(gDatabase, &Index, 64);
RecordPointer1 = MemHandleLock(RecordHandle);
DmWrite(RecordPointer1, 0, &CarDetails[Index],
sizeof(CarDetails[Index]));
MemHandleUnlock(RecordHandle);
DmReleaseRecord(gDatabase, Index, true);
//Index++;
FrmAlert(SavedAlert);
FrmGotoForm(ViewOffencesForm);
handled = true;
break;
}
return handled;
}
Please help me, im really stuck....
Thanking you
Tim
--
For information on using the Palm Developer Forums, or to unsubscribe, please see
http://www.palmos.com/dev/support/forums/