Hi,

This one is a challenge for me but I am sure it's a breeze for the more
experienced Palm developers out there.

Got a database full of tests as per below:
-----------------------------------------------------------------------

typedef struct {
        long test_id;
        long sort_id;
        char name[1]; // might be longer but is null-terminated
} PackedTest;

typedef struct {
        long test_id;
        long sort_id;
        char *name; // might be longer but is null-terminated
        char *status;
        char *exec_time;
        char *exec_date;
} Test;
----------------------------------------------------------------------

User works on the Palm, presses a button and I need to update the execution
date and time. Hence the following routine:
----------------------------------------------------------------------
static void UpdateTestTimeDate()
{

        Handle                  TestRecHandle;
        Test                    *TestRec_write;
        UInt32                  curr_time_in_secs;
        DateTimePtr             curr_time_date;
        char                    curr_date[10], curr_time[10];
        
        // call PalmOs system function for getting number of secs since
midnight Jan 1st 1904!!!
        curr_time_in_secs=TimGetSeconds();
        // convert into date/time structure
        TimSecondsToDateTime (curr_time_in_secs, curr_time_date);
        
        // copy relevant fields: time and date
        StrPrintF(curr_time, "%02d:%02d:%02d", 
                        curr_time_date->hour, curr_time_date->minute,
curr_time_date->second);
        StrPrintF(curr_date, "%02d/%02d/%02d", 
                        curr_time_date->month, curr_time_date->day,
(curr_time_date->year)%1000);
                        
        TestRecHandle = DmGetRecord(TestDB, CurrentTestRecord);
        UnpackTest( TestRec_write, MemHandleLock(TestRecHandle));

        TestRec_write->exec_date = curr_date;
        TestRec_write->exec_time = curr_time;
// *1                                                                   
        MemHandleUnlock(TestRecHandle); 
        PackTest(TestRec_write, TestRecHandle);
        DmReleaseRecord(TestDB, CurrentTestRecord, true);
}
----------------------------------------------------------------------

Up to line marked *1, the record contains the right info according to
CodeWarrior. I then pack the unpacked record into the database using a
routine successfully used elsewhere in the program (see below). When I
release the newly time/date stamped record using DmReleaseRecord, and return
to access the time and date fields, they are empty. ANY IDEAS????

IMPORTANT:  I have no direct access to this newsgroup at the moment so could
you cc any replies please to [EMAIL PROTECTED]

Cheers,

Gary Wilson

----------------------------------------------------------------------
static void PackTest(Test *test, VoidHand testDBentry)
{
        // figure out necessary size
        UInt length = 0;
        CharPtr s;
        UInt offset = 0;
        
        length = sizeof(test->test_id)          + sizeof(test->sort_id)
+ 
                         StrLen(test->status)           + StrLen(test->name)
+
                         StrLen(test->exec_time)        +
StrLen(test->exec_date)         + 4 ; // 2 extra for 2 string terminators
                 
        // resize the handle for the step record
        if (MemHandleResize(testDBentry, length) == 0) {
                // copy the fields      
                s = MemHandleLock(testDBentry);
// LOCK
                offset = 0;
                // step_id and test_id fields
                DmWrite(s, offset, (CharPtr) &test->test_id,
sizeof(test->test_id)); offset += sizeof(test->test_id);
                DmWrite(s, offset, (CharPtr) &test->sort_id,
sizeof(test->sort_id)); offset += sizeof(test->sort_id);
                // test name field
                DmStrCopy(s, offset, (CharPtr) test->name);

                offset += StrLen(test->name) + 1;
                // status field
                DmStrCopy(s, offset, (CharPtr) test->status);

                offset += StrLen(test->status) + 1;
                // exec time field
                DmStrCopy(s, offset, (CharPtr) test->exec_time);

                offset += StrLen(test->exec_time) + 1;
                // exec date field
                DmStrCopy(s, offset, (CharPtr) test->exec_date);        
                offset += StrLen(test->exec_date) + 1;
                
                MemHandleUnlock(testDBentry);
// UNLOCK
        }

----------------------------------------------------------------------












*******************************************************************************************************
This document is intended for, and should only be read by, those persons to 
whom it is
addressed. Its contents are confidential and if you have received this message 
in error,
please delete it and notify us immediately, e-mail "[EMAIL PROTECTED]". Any 
form of
reproduction, dissemination, copying, disclosure, modification, distribution 
and / or
publication of this message without our prior written consent is strictly 
prohibited. 

Any views expressed in this message are those of the individual sender, and do 
not 
necessarily represent the position of CTSL. Furthermore CTSL does not authorise 
or use
e-mail for official contractual correspondence. Nothing received in e-mail has 
any
contractual validity.

CTSL and each legal entity in Cubic Corporation reserve the right to monitor 
all e-mail
communications through its networks.

This footnote also confirms that this email message has been checked for known 
computer viruses.
*******************************************************************************************************


-- 
For information on using the ACCESS Developer Forums, or to unsubscribe, please 
see http://www.access-company.com/developers/forums/

Reply via email to