This is a source of the problem ...

newSize += StrLen((Char *) neu_titelText) + 1;   // you are adding
                                                                          
              actual buffer length

when in fact what you mean is ...

newSize += sizeof(char *)   // this is correct since the struct contains
                                                    a pointer, not the 
actual buffer

Another way to think of it is, that the size of the
Veranstaltung structure is actually a constant.

On Sunday, March 17, 2002, at 03:52 AM, Dyk Corman wrote:

> Hi!
>
> Could anybody please help me with this code?
> I've been trying to fix the problem for 2 days, but didn't succeed..
>
> I have a structure defined as follows:
>
> typedef struct {
>   UInt32   id;
>   Boolean selected;
>   VeranstaltungDateTimeType date;
>   const char *titel;
>   const char *location;
> }Veranstaltung;
>
>
> I would like to change the titel which is a text field, but I'm always
> getting error messages: "Error with DmWriteCheck"
>
> That's the code (based on the ToDo-example)
>
> the new titel is saved in new_titelText.
>
>       recordH = DmQueryRecord(db, recordNum);
>       recordP = (Veranstaltung*) MemHandleLock(recordH)
>
>       // Calculate the size of the changed record. First,
>       // find the size of the data used from the old record.
>       newSize = sizeof (UInt32) + 1 + sizeof(Boolean) + 1 +
> sizeof(VeranstaltungDateTimeType) + 1;
>       newSize += StrLen((Char *) neu_titelText) + 1;
>       newSize += StrLen(recordP->location) + 1;
>
>        // If the new description is longer, expand the record.
>       curSize = MemPtrSize (recordP);
>
>       // The interesting part is that even when I'm just adding one
> character to the title,
>       // the newSize is about 94, when the curSize is about 24...
>
>       if (newSize > curSize)
>       {
>            MemPtrUnlock (recordP);
>            err = MemHandleResize (recordH, newSize);
>            recordP = (Veranstaltung*) MemHandleLock (recordH);
>       }
>
>       // Move the location field.
>       offset = sizeof(UInt32) + sizeof(Boolean) +
> sizeof(VeranstaltungDateTimeType)
>        + 1 + StrLen (neu_titelText) + 1;
>       c = recordP->titel;
>       c += StrLen(c) + 1;
>       DmWrite (recordP, offset, c, StrLen(c) + 1);
>
>
>       // Write the new titel field.
>       offset = sizeof(UInt32) + sizeof(Boolean) +
> sizeof(VeranstaltungDateTimeType) + 1;
>       DmStrCopy (recordP, offset, neu_titelText);
>
>       // If the new description is shorter, shrink the record.
>       if (newSize < curSize)
>        MemHandleResize (recordH, newSize);
>
>
> Does anybody have any idea why this code doesn't work and
> why the newSize is much more than the curSize even if I'm just
> changing some characters???
>
> Many many thanks,
>
> Dyk
>
>
>
>
>
>
>
> --
> For information on using the Palm Developer Forums, or to unsubscribe, 
> please see http://www.palmos.com/dev/support/forums/
>


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

Reply via email to