I'm kind of glad I posted that method since it made me take another look at
it. Turns out there's a much better way to do it. Here's the new
implementation:

Err PktLibGetRecordByID(DmOpenRef dbP, UInt32 id,
    PktLibDBRecordPtr recordP, MemHandle *recordH)
{
UInt16  index = 0;

    if (DmFindRecordByID(dbP, id, &index) == 0)
        return PktLibGetRecord(dbP, index, recordP, recordH);
    else
        return 1;
}

Boy, that was kind of embarrassing. :-)

"CausticMango" <[EMAIL PROTECTED]> wrote in message
news:77615@palm-dev-forum...
>
> I use UniqueID to link records within the same DB and it works fine (so
> far). I use the following, admittedly inefficient, method to locate a
record
> by it's ID:
>
> /************************************************************
>  *
>  * FUNCTION:    PktLibGetRecordByID
>  *
>  * DESCRIPTION: Get a record from the Database by its UniqueID
>  *
>  * PARAMETERS:  database pointer - open db pointer
>  *              uniqueid - localid of record to lock
>  *              record pointer - pointer structure
>  *              record - MemHandle to unlock when done
>  *
>  * RETURNS:     ##0 if successful, errorcode if not
>  *
>  * The record's MemHandle is locked so that the pointer to
>  * strings within the record remain pointing to valid chunk
>  * versus the record randomly moving.  Unlock the MemHandle when
>  * PktLibDBRecord is destroyed.
>  *
>  *************************************************************/
> Err PktLibGetRecordByID(DmOpenRef dbP, UInt32 id,
>     PktLibDBRecordPtr recordP, MemHandle *recordH)
> {
> UInt16  index = 0;
> UInt16  num, attr;
> UInt32  rid;
>
>     num = DmNumRecords(dbP);
>     while (index < num) {
>         DmRecordInfo(dbP, index, &attr, &rid, NULL);
>         if (id == rid && !(attr & dmRecAttrDelete))
>             break;
>         index++;
>     }
>
>     if (index < num)
>         return PktLibGetRecord(dbP, index, recordP, recordH);
>     else
>         return 1;
> }
>
> It MAY be possible to use the memory manager to get a direct handle to the
> record by ID using MemLocalIDToLockedPtr, but I'm not sure, I haven't
tried
> it out.
>
> "Ben A. HiLLeLi" <[EMAIL PROTECTED]> wrote in message
> news:77587@palm-dev-forum...
> >
> > After too much deliberation I've decided on using the PalmOS assigned
> > UniqueID as a "primary key" and as the lookup attribute that will "link"
> two
> > related databases:
> > i.e. AllergyRecord.PatientIDLink=Patient.UniqueID...
> >
> > to get patient referenced in AllergyRecord:
> > DmFindRecordByID(gPatientDB, AllergyRecord.PatientIDLink, &index_out)
> > DmQueryRecord(gPatientDB, index_out)
> > or something like that...
> >
> > I have not invested that much time in the conduit yet and want to know
if
> > there is sample code on importing record UniqueID's and/or the entire
> record
> > headers and using these as attributes in a desktop database... I think
> once
> > I get the UniqueID onto the PC (and into PC Endian) it won't be a
problem
> > assigning as a value to a dbase attribute...
> >
> > SideQ: When working with alphabetically sorted databases, what other
> > efficient methods are there of doing a quick key lookup. Binary Searches
> > would seem rather inefficient for they would require resorting by key,
> then
> > sorting back alphabetically. I'm looking for a backup (insurance :-O) to
> the
> > above method as I've heard experienced Palm developers say "USE the
> > uniqueID, works for me" and "Don't Use uniqueID, it can change and/or
not
> be
> > unique"... I was thinking of a two part key, one part Char: the letter
the
> > name starts with (used only for quicker searches as names can change)
and
> a
> > permanent ID (iterative, last used stored in preferences)... Hopefully
the
> > first method workz (no insurance premiums...missed deadlines)
> >
> > Ben
> > p.s. from what I've read in the documentation (briefly skimmed),
> UniqueID's
> > should stay constant during synchronization using more current versions
of
> > HotSynch... I'm a beginner looking for answers though, do NOT take my
word
> > on it AND/OR/PLEASE correct me...
> >
> >
> >
> >
> >
> >
>
>
>
>



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

Reply via email to