Icon View Thread

The following is the text of the current message along with any replies.
Messages 1 to 5 of 5 total
Thread DBISAM Error #8710
Wed, May 31 2006 1:49 AMPermanent Link

Praveen A B
Hi All,

I'm having a 'Record not Found' problem when trying to use the 'Locate' function. Attached is the stack trace obtained from madExcept.
I have a table TABLE_LOOKUP which is used as a general lookup table. A TdxDBLookupEdit in a screen uses TABLE_LOOKUP as its LookupDataset.
The DBLookupEdit works like the IE's address bar.. i.e. it has an OnFilter event that filters the content of TABLE_LOOKUP based on the chars entered in the edit box.
Ex: if typed 'ad' then the OnFilter event filters all records beginning with 'ad'. This effectively also filters TABLE_LOOKUP, if I'm right ?
I'm trying to implement a functionality wherein if user presses the ESC key, when partially modifying the lookupedit, the previously entered value should be shown.
Ex: I type 'abcd' then I type 'efg' then press ESC..it should revert back to 'abcd'.

The problem now is that when I type 'efg' the TABLE_LOOKUP will get filtered to show values starting with 'efg'. When I press ESC I can get the prev value and try to do
TABLE_LOOKUP.Locate and get the #8710 error.

Can someone please help me solve this. ?

TIA
Praveen



Attachments: bugreport.txt
Wed, May 31 2006 1:31 PMPermanent Link

Tim Young [Elevate Software]

Elevate Software, Inc.

Avatar

Email timyoung@elevatesoft.com

Praveen,

<< I'm having a 'Record not Found' problem when trying to use the 'Locate'
function. Attached is the stack trace obtained from madExcept. >>

The attachment didn't make it through correctly - try just putting it in
your post as text instead.

<< The problem now is that when I type 'efg' the TABLE_LOOKUP will get
filtered to show values starting with 'efg'. When I press ESC I can get the
prev value and try to do TABLE_LOOKUP.Locate and get the #8710 error. >>

What version of DBISAM are you using ?  Also, is this occurring in the IDE
or at runtime outside of the IDE ?

--
Tim Young
Elevate Software
www.elevatesoft.com

Fri, Jun 2 2006 5:06 AMPermanent Link

Praveen A B
Hi Tim,

<<What version of DBISAM are you using ?  Also, is this occurring in the IDE
or at runtime outside of the IDE ? >>
DBISAM 3.17 and Yes, it happens in IDE and also in runtime.

But, I might have found a solution. I trapped the 'ESCAPE' key event and set TABLE_LOOKUP.Filtered := False, before calling the Locate() function and it worked.

I still want an answer as to why I'm getting the 'Record not found' error in a filtered dataset.

The stack trace is as below:

exception class   : EDBISAMEngineError
exception message : DBISAM Engine Error # 8710 Record not found in the table 'MKT_QUOTE_DEFINITION'.

main thread ($5b4):
007e6411 +011 ThresherClient.exe DBISAMTb                     DbiError
007b2ce3 +03f ThresherClient.exe dbisamen                     RaiseError
007c7bf6 +03a ThresherClient.exe dbisamen                     TDataCursor.CheckStatus
007ebbd1 +22d ThresherClient.exe DBISAMTb                     TDBISAMDataSet.LocateRecord
007ebd52 +022 ThresherClient.exe DBISAMTb                     TDBISAMDataSet.Locate
00ac571b +04f ThresherClient.exe LookupData          2701  +2 TdmLookup.GetPublishedIndFromQuote  ---> DataModule contains TABLE_LOOKUP. Doing general lookup.
00c7b640 +044 ThresherClient.exe FinancialOptCapture  293  +8 TfrmFinancialOptCapture.frHeaderTermeMTMCurveCloseUp
0098b190 +134 ThresherClient.exe tpDBLookupEdit       492 +26 TtpDBLookupEdit.InternalOnCloseUp
0060c1ac +018 ThresherClient.exe dxDBEdtr                     TdxInplaceLookupEdit.DoCloseUp
0060c0fa +0be ThresherClient.exe dxDBEdtr                     TdxInplaceLookupEdit.CloseUp
0098b247 +067 ThresherClient.exe tpDBLookupEdit       503  +7 TtpDBLookupEdit.CloseUp     ----> TtpDBLookupEdit is my derived component.
                                                                                                                                               TtpDBLookupEdit.Field.LookupLookupDataset := TABLE_LOOKUP
005f16f4 +07c ThresherClient.exe dxExEdtr                     TdxInplaceDropDownEdit.DoDropDownKeys
005f1145 +059 ThresherClient.exe dxExEdtr                     TdxInplaceDropDownEdit.WndProc
004f4e08 +02c ThresherClient.exe Controls                     TWinControl.MainWndProc
00479c04 +014 ThresherClient.exe Classes                      StdWndProc
77e27ed1 +006 user32.dll                                      DispatchMessageA
004e194f +083 ThresherClient.exe Forms                        TApplication.ProcessMessage
004e1986 +00a ThresherClient.exe Forms                        TApplication.HandleMessage
004e1ba6 +096 ThresherClient.exe Forms                        TApplication.Run
01298ebc +148 ThresherClient.exe ThresherClient      1815  +8 initialization

Thanks
Praveen


"Tim Young [Elevate Software]" <timyoung@elevatesoft.com> wrote:

Praveen,

<< I'm having a 'Record not Found' problem when trying to use the 'Locate'
function. Attached is the stack trace obtained from madExcept. >>

The attachment didn't make it through correctly - try just putting it in
your post as text instead.

<< The problem now is that when I type 'efg' the TABLE_LOOKUP will get
filtered to show values starting with 'efg'. When I press ESC I can get the
prev value and try to do TABLE_LOOKUP.Locate and get the #8710 error. >>

What version of DBISAM are you using ?  Also, is this occurring in the IDE
or at runtime outside of the IDE ?

--
Tim Young
Elevate Software
www.elevatesoft.com

Fri, Jun 2 2006 11:20 AMPermanent Link

Tim Young [Elevate Software]

Elevate Software, Inc.

Avatar

Email timyoung@elevatesoft.com

Praveen,

<< DBISAM 3.17 and Yes, it happens in IDE and also in runtime. >>

That explains it.  In 4.x we trap for this condition and just return False.
It is basically caused by the filter resulting in zero records in the
dataset.  The way Locate works is that it does the search and then tries to
resync the found record with the current dataset, which in this case is
filtered.  If it can't resync because the located record falls out of the
filtered dataset, then it can cause this exception.  The exception is raised
in db.pas, so we can't simply remove it.

--
Tim Young
Elevate Software
www.elevatesoft.com



Sat, Jun 3 2006 4:57 AMPermanent Link

Praveen
Thanks Tim.. Help is much appreciated.
Praveen

"Tim Young [Elevate Software]" <timyoung@elevatesoft.com> wrote:

Praveen,

<< DBISAM 3.17 and Yes, it happens in IDE and also in runtime. >>

That explains it.  In 4.x we trap for this condition and just return False.
It is basically caused by the filter resulting in zero records in the
dataset.  The way Locate works is that it does the search and then tries to
resync the found record with the current dataset, which in this case is
filtered.  If it can't resync because the located record falls out of the
filtered dataset, then it can cause this exception.  The exception is raised
in db.pas, so we can't simply remove it.

--
Tim Young
Elevate Software
www.elevatesoft.com



Image