if you try to DmQueryRecord on a deleted record, that is a fatal error.

first, the obvious stuff:
- where does it crash?
- how many iterations thru the loop before it crashes?
- what exactly are you doing in the "Do something here" part?
- are you sure ImportDB is really pointing at the memopad database?
- did you verify under the debugger that DmNumRecords really returned 535,
or could there be an error in your popup debugging code?

now, something interesting:
    i've seen databases that have somehow become corrupted, where the
specific effect of the corruption is that the database claims to have many
many many more records than it actually has.  trying to install the database
onto POSE yields a "database corrupt" error.  however, the database for the
most part seems to work (and if i tweak POSE to load the database anyway, it
basically works, too).  your symptoms sound identical to this problem.
everyone for whom i've seen this kind of corruption happen has been using
MacPac v2.  (i've seen it happen to 7 different users, one of whom claims
every time he does a HotSync it corrupts his database, even if he is
starting fresh from a hard reset).



----- Original Message -----
From: Mike Davis <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, August 23, 1999 6:14 PM
Subject: Re: Reading/Writing MemoPad DBs ???


> more info on problem #1 -- DmNumRecords will tell you total records
> including deleted records.  DmNumRecordsInCategory will tell you how many
> live records there are (to get all live records, specify dmAllCategories).

First, I sync several times a day.  Shouldn't that get rid of any
deleted records?  I find it hard to believe that I can have almost
400 deleted records since I hardly ever use MemoPad.

Second, when I execute this code within the 'for' statement, the
system gives me a fatal error and resets.  If I comment out the:
    RecHandle = DmQueryRecord(ImportDB, i);
    RecPointer = MemHandleLock(RecHandle);
    // Do something here
    // to access specific data
    MemPtrUnlock(RecPointer);
lines, it does not crash.  So it has something to do with this.
Now, since I suspect that the numRec is higher than it should be,
maybe that is causing access to areas that do not exist.

But why does it not return the correct number of records?  Like
I say, I hardly ever use MemoPad and hot-sync daily.

Any other ideas?  BTW, the code below is exactly what I execute after
opening the DB.  There are no other routines associated with this
DB.  I open it then execute GetImportNames, as written.

Mike


> ----- Original Message -----
> From: S�rgio Carvalho <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Monday, August 23, 1999 4:09 PM
> Subject: Re: Reading/Writing MemoPad DBs ???
>
>
> > Hi,
> >
> > Problem 1: Make sure you're not getting confused by deleted records.
> > Deleted records stay in the DB until the next sincronization, so the
> > total record count, and the 'live' record count may be different.
> >
> > Problem 2: If you try to write to the record, in the Do Something here
> > section, you must use DmSet. Other than that, I guess your code is
> > correct.
> >
> > Problem 3: Yes. A Memopad record is only a null terminated string. I've
> > successfully read from it, with no problems. The pointer obtained by the
> > record handle lock points to the first char. The best source of info
> > about the MemPad database is the application source code (headers,
> > mainly).
> >
> > Sergio
> >
> > Mike Davis wrote:
> >
> > > I am having a problem understanding how to read and write
> > > a MemoPad record.
> > >
> > > I have looked at MemoPad application but is not really helping
> > > me on this.  I have three problems (probably more).
> > >
> > > Problem 1:  I have placed a Custom Alert to tell me how many
> > > records are in the DB.  The popup reports 535 records.  But
> > > there are only 144 records.  I have verified the real number of
> > > records by the count in MemoPad and by looking at the DB with
> > > RsrcEdit app.  Both show 144 records.  Why the discrepancy?
> > >
> > > Problem 2:  I get a fatal error when I use this code.  I have
> > > removed everything down to the bare minimum that causes the
> > > crash.  The problem is with what is inside the 'for' block.  I
> > > use this code to access another of my own DBs.  What is wrong
> > > with this code?  Why does it crash?
> > >
> > > Problem 3:  I have looked at the MemoDB with RsrcEdit and it is
> > > just a null terminated string for each record.  Doesn't RecPointer
> > > point to the first char of the MemoPad data?  If not, what is the
> > > format of the record pointed to by RecPointer?
> > >
> > > Where is the best source of documentation on a MemoPad record?
> > > A simple app would help.
> > >
> > > Thanks
> > >
> > > void GetImportNames(void) {
> > >     VoidHand    RecHandle;
> > >     Ptr         RecPointer;
> > >     int         i, numRecs;
> > >     char        buffer[10];
> > >
> > >     numRecs = DmNumRecords(ImportDB);
> > >         StrIToA(buffer, numRecs);
> > >         FrmCustomAlert(altNotice, buffer, "", "");
> > >
> > >     for(i=0; i<numRecs; i++) {      // get names
> > >         RecHandle = DmQueryRecord(ImportDB, i);
> > >         RecPointer = MemHandleLock(RecHandle);
> > >         // Do something here
> > >                 // to access specific data
> > >         MemPtrUnlock(RecPointer);
> > >     }
> > > }
> > > --
> > > -----------------------------------------------------------------
> > > Discussion Group:        http://www.halcyon.com/ipscone/wwwboard/
> > >
> > > Protect your constitutional rights. Your favorite one may be next!
> > > -----------------------------------------------------------------
> >
> > --
> > Sergio Carvalho
> > ---------------
> > [EMAIL PROTECTED]
> >
> >
> >
>
>


--
-----------------------------------------------------------------
Discussion Group:        http://www.halcyon.com/ipscone/wwwboard/

Protect your constitutional rights. Your favorite one may be next!
-----------------------------------------------------------------


Reply via email to