Right.. it was the first pass at the code (would be cleaned up later)... the FileClose is a good catch.

I guess I am confused on what this should do.. why that error? I haven't even written the header for the database yet, much less the first record. Am I supposed to start at the beginning of the raw db with this function or at the first record? I really don't know anything about this stream (at runtime... the database is put into this stream format in another step) other than I know it is a database.

Jan Slodicka wrote:

Hello,

just some observations to the code:

FileClose() call is missing; i.e. you probably open the DB multiple times.

Unnecessary testing FileEOF() in case of no error

Unnecessary call to FileTell() - the increment for pFile->curPos is known
from the FileRead() call.

By looking into Limited Palm OS sources, dmErrNotValidRecord (I hope you
meant this error code) is produced only in DmWriteCheck(), which is in turn
called from DmWrite() or DmSet(). Strange thing is that there should be an
alert. (I know, Palm OS 4 sources...)

With best regards,
   Jan Slodicka


----- Original Message ----- From: "Bradly J. Barton" <[EMAIL PROTECTED]> To: "Palm Developer Forum" <[EMAIL PROTECTED]> Sent: Saturday, June 05, 2004 1:51 AM Subject: ExgDBRead Trouble




I am having trouble using ExgDBRead... When I make the call (below), the
error that is returned is dmNotValidRecord:

       sTempFile    file;
       file.fname = fname;
       file.curPos = 0;
       err = ExgDBRead(MyReadDBProc, MyDelDBProc, &file, pDBID, 0,
&needReset, true);

Here is the callback:

static Err MyReadDBProc(void *dataP, UInt32 *sizeP, void *userDataP)
{
   Err err = errNone;
   sTempFile    *pFile = (sTempFile*) userDataP;

   FILE_REF frp = FileOpen(0, pFile->fname, sysFileTFileStream,
dOnlineCreatorID, fileModeReadOnly, &err);
   if (err == errNone)
   {
       err = FileSeek(frp, pFile->curPos, fileOriginBeginning);
       if (err == errNone)
       {
           *sizeP = FileRead(frp, dataP, 1, (Int32) (*sizeP), &err);
           pFile->curPos = FileTell(frp, NULL, NULL);
           if (FileEOF(frp)) err = errNone;
       }
   }
   return err;
}

I can trace the first pass into the callback, and it appears to read the
first 72 bytes of the stream (looks like the database header in
memory).. and it returns from the callback with no error.

--
For information on using the Palm Developer Forums, or to unsubscribe,


please see http://www.palmos.com/dev/support/forums/





-- Bradly J. Barton - [EMAIL PROTECTED] Jenies Technologies Incorporated (972) 602-1835 http://www.JTI.net http://HandAble.com


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

Reply via email to