My apologies, here's the FULL function I've been working on:
********************************************************************************************************
static Err DisplayFirstRecord(DmOpenRef testDB, Char *searchKey)
{
Err err = 0;
Int32 len = 0;
Char fieldCount = 9;
Char fieldCounter = 0;
Char i = 0;
Int32 startCoord = 0;
Int16 palmRecIndex = 0;
MemHandle myRecord;
Char data[64];
Char someString[31];
for(i=0;myRecord = DmQueryRecord(testDB, i);i++)
{
Char *s = (Char *) MemHandleLock(myRecord);
Char number[64];
Int16 start=0;
Int16 end=0;
Int16 field=0;
Char key[12];
for(i=0;s[i];i++)
{
if(s[i]=='|')
{
field++;
if(field == 1)
{
end = i;
StrNCopy(key,&s[start],end);
key[end]='\0';
if(!StrCompare(key,searchKey))
{
FrmCustomAlert(MyAlert,"FOUND!
->",key,NULL);
return(true);
}
}
else
{
StrIToA(number,field);
FrmCustomAlert(MyAlert,"FIELD:
",number,NULL);
start = i+1;
}
if(field == 9)
{
field = 0;
}
}
}
palmRecIndex++;
}
if(!myRecord)
{
err = DmGetLastErr();
FrmCustomAlert(MyAlert,"No record found!",NULL,NULL);
}
return 0;
}
********************************************************************************************************
********************************************************************************************************
********************************************************************************************************
********************************************************************************************************
********************************************************************************************************
Here's what I've got so far... (still working out the kinks)
I've got it finding the first record, but anything thereafter is choking.
If anyone can suggest a better way, I'm all ears....
for(i=0;s[i];i++)
{
if(s[i]=='\0')
{
field++;
if(field == 1)
{
end = i;
StrNCopy(key,&s[start],end);
key[end]='\0';
if(!StrCompare(key,searchKey))
{
FrmCustomAlert(MyAlert,"FOUND! ->",key,NULL);
return(true);
}
}
else
{
start = i+1;
}
if(field == 9)
{
field = 0;
}
}
}
Nole Mailey
[EMAIL PROTECTED]
Sent by: To: "Palm Developer
Forum" <[EMAIL PROTECTED]>
[EMAIL PROTECTED] cc: (bcc: Nole Mailey/pmc)
palmos.com Subject: Re: Multiple
Text Records per PalmOS Record
07/08/2003 09:07 AM
Please respond to "Palm Developer
Forum"
Thanks Nick. I'm actually looking to store in excess of 60,000+ records not
to mention an indexing database along with another large database with it's
own indexing that works interdependantly with the first. I'm also using C
straight
up for this and can't afford the time to learn C++ and become comfortable
with OO programming.
To save space, I'm currently storing all values as variable length strings
as follows:
prodno\0description\0cost\0retail\0unitofmeasure\0prodno\0description\0cost\0retail\0unitofmeasure\0.......up
to 64k limit (including header info)
I'm a relatively new programmer, so I'm having difficulty figuring out an
efficient method
for accessing this information.
Any and all suggestions would be greatly, greatly appreciated.
"Nick"
<[EMAIL PROTECTED] To: "Palm
Developer Forum" <[EMAIL PROTECTED]>
com> cc:
Sent by: Subject:
Re: Multiple Text Records per PalmOS Record
[EMAIL PROTECTED]
palmos.com
07/08/2003 08:31 AM
Please respond to "Palm Developer
Forum"
Nole,
For me, I used POL and its associated CDatabase, CDBStream, etc. classes to
efficently search every record based on any value in the record. This is
very fast and I can search 5000 records (DB is 580KB) in very little time.
In my example, when a record is found that matches the required criteria, I
either return the record index or fill in a tree (or other) control with
some of the record content. Which method I use depends on why I am
searching the database.
For example, each record contains a struct similar to this. This struct
holds automobile make, model, color, stock number, mileage, VIN, etc. Each
record is constructed such that the fixed data is first, followed by any
variable (length) data.
struct x {
int16 year
int16 color
int16 offsetstring4
int16 offsetstring5
int16
int16
int16
int16
int16
int32
int32
...
int32
string1
string2
string3
string4
string5
}
Sample code that searches for all vehicles of a certain color and year.
// note that m_pCarDatabase is a pointer to a an instance of a
// CDatabase object declared in the main application. See
// the POL documentation for more information.
UInt16 numRecords = m_pCarDatabase->NumRecords();
for(int i = 0; i < numRecords; )
{
CDBStream dbs(m_pCarDatabase->QueryRecord(i), 0);
dbs >> year;
dbs >> color;
// collect the offsets to the other strings.
dbs >> off4;
dbs >> off5;
// if the year and color for this record match the selected year
// and color, then add this record to the tree control.
if((year == m_currentYear) && (color == m_currentColor))
{
// the offset to the manufacturer string is always at offset 80. The
// binary data at the start of the record is a fixed length.
// extract the information from the strings.
dbs.Seek(80, fileOriginBeginning);
// mfg, make, model, vin, and stock are CStrings
dbs >> mfg >> make >> model >> vin >> stock;
// add items to a UI control or return the index or return one of the
// strings...
...
}
...
}
Nick.
<[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]
>
>
> Does anyone have any good resources that show an efficient
> method of searching and retrieving multiple records from a single
> packed, PalmOS record? Books? Website? Suggestions? Anything?
>
> All I've seen so far is searching single packed records per
> PalmOS record (PalmOS Programming Bible) which isn't quite what
> I need.
>
> Thanks.
> Nole
>
>
>
--
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/
--
For information on using the Palm Developer Forums, or to unsubscribe, please see
http://www.palmos.com/dev/support/forums/