Important to remember when using O'Reilly's Pack&Unpack pattern:
When you unpack your data, it all still points to the packed item.
So you cannot unlock the handle on the packed data until you
are through using the unpacked data.
So:
void foo (void)
{
UnpackedData d;
VoidHand record = DmGetRecord (....);
PackedData * p = MemHandleLock (record);
unpackData (p, &d);
// This line will unlock the memory that unpacked d points into, so
// d becomes useless after this executes!
// Make sure you copy out what you want before calling this
MemHandleUnlock (record);
}
----- Original Message -----
From: Timothy Astle <[EMAIL PROTECTED]>
Newsgroups: palm-dev-forum
To: Palm Developer Forum <[EMAIL PROTECTED]>
Sent: Thursday, April 13, 2000 9:31 AM
Subject: Re: Simple example needed
> I'm assuming the problem is in GetValue, because I really wrote that off
the
> top of my head because I didn't know how to grab a piece of data from the
> database. I used the packValue function to add data to the database, and
> that seems to run okay. (can't completely test it because I can't get the
> info I put into it to display.... which is what I'm trying to do now :-)
>
> Now, I based this whole packing and unpacking off the O'Reilly Sales
> example. Assuming that one works... it should work for my scenario :-)
>
>
>
>
> void UnpackValue(tblValuePtr value, const tblPackedValuePtr packedValue)
> {
> const char *s = packedValue->Strings;
> value->ValueID = packedValue->ValueID;
> value->BeginningValue = packedValue->BeginningValue;
> value->EndingValue = packedValue->EndingValue;
> value->TotalValue = packedValue->TotalValue;
> value->Number = s;
> s += StrLen(s) + 1;
> value->VNumber = s;
> s += StrLen(s) + 1;
> value->Driver = s;
> s += StrLen(s) + 1;
> value->StartDate = s;
> s += StrLen(s) + 1;
> value->EndDate = s;
> s += StrLen(s) + 1;
> value->Origin = s;
> s += StrLen(s) + 1;
> value->Destination = s;
> s += StrLen(s) + 1;
> }
>
>
> ValueID is a UInt
> BeginningValue, EndingValue, TotalValue are floats
> The rest are Strings
>
> Basically, my methodology was that I'd create a function that called my
> "Unpack" function, get the value of the field I needed, returned it so
that
> I could display it in a Field. However, I'm not certain of a way to
display
> floats in the Field box, so I tried to convert the float into a CharPtr
for
> display purposes.
>
> --
>
> Timothy Astle
>
>
> McMicken, Steven <[EMAIL PROTECTED]> wrote in message
> news:8146@palm-dev-forum...
> >
> > Have you localized the problem to the GetValue function? The problem
> could
> > be in the UnpackValue code. Are you allocating memory for the CharPtr
in
> > the program that calls GetValue? These are just guesses, without more
> code,
> > I can't suggest much more.
> >
> > Regards,
> >
> > Steve
> >
> > -----Original Message-----
> > From: Timothy Astle [mailto:[EMAIL PROTECTED]]
> > Sent: Thursday, April 13, 2000 10:08 AM
> > To: Palm Developer Forum
> > Subject: Re: Simple example needed
> >
> >
> > This is something I tried so that I could just Get a value from the
> database
> > so that I could display it.
> >
> > theValue.BeginningValue is a floating point number.
> > UniqueID is just the record's ID tag
> >
> > CharPtr GetValue(UInt UniqueID)
> > {
> > tblValue theValue;
> >
> > VoidHand valueHandle = DmGetRecord(gValueDB, UniqueID);
> > UnpackValue(&theValue, MemHandleLock(valueHandle));
> > MemHandleUnlock(valueHandle);
> >
> > return ((CharPtr)&theValue.BeginningValue);
> > }
> >
> > What I'm using to display the information is:
> > SetFieldTextFromStr(NfoStartofValueValueField, GetValue(1));
> >
> > Where it takes the CharPtr and places it in the Field.
> >
> > It compiles, etc, but when I run it, I get a DataManager error. My best
> > guess is that it has to do with the way I'm attempting to get the value
> from
> > the database... I dunno. I figure I'm probably going about this all the
> > wrong way, but if someone could please help, I'd appreciate it.
> >
> > --
> >
> > Timothy Astle
> >
> >
> >
> >
> >
> >
> >
> >
> > Timothy Astle <[EMAIL PROTECTED]> wrote in message
> > news:8137@palm-dev-forum...
> > >
> > > I have 3 databases set up, and 6 structures (packed and unpacked
> > versions).
> > > I also have packing and unpacking funcitons set up.
> > >
> > > I was wondering if anyone had a "stripped down" piece of code that
> allowed
> > > me to simply ADD and DELETE records.
> > >
> > > Any small example would be great, because I could take it from there
and
> > > expand upon it.
> > >
> > > Sincerely,
> > >
> > > Timothy Astle
> > >
> > >
> > >
> > >
> >
> >
> >
> > --
> > For information on using the Palm Developer Forums, or to unsubscribe,
> > please see http://www.palm.com/devzone/mailinglists.html
> >
> >
>
>
>
> --
> For information on using the Palm Developer Forums, or to unsubscribe,
please see http://www.palm.com/devzone/mailinglists.html
>
>
--
For information on using the Palm Developer Forums, or to unsubscribe, please see
http://www.palm.com/devzone/mailinglists.html