Search the web
Sign In
New User? Sign Up
palm-dev-forum
? Already a member? Sign in to Yahoo!

Yahoo! Groups Tips

Did you know...
Real people. Real stories. See how Yahoo! Groups impacts members worldwide.

Best of Y! Groups

   Check them out and nominate your group.
Having problems with message search? Fill out this form to ensure your group is one of the first to be migrated to the new message search system.

Messages

  Messages Help
Advanced
Re: PrimaryKey --> Secondary Key Linkage Questions (part #2)   Message List  
Reply | Forward Message #68861 of 92429 |
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" <samuelwford@...> 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" <bahillel@...> 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/



Sat Feb 23, 2002 2:30 am

samuelwford@...
Send Email Send Email

Forward
Message #68861 of 92429 |
Expand Messages Author Sort by Date

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: ...
CausticMango
samuelwford@...
Send Email
Feb 23, 2002
2:31 am
Advanced

Copyright © 2009 Yahoo! Inc. All rights reserved.
Privacy Policy - Terms of Service - Guidelines - Help