JVCL338CompleteJCL201-Build3449 (I was unable to install a later version than this, due to an incompabitility with the ThemesManager program by Mike Lishki using D6 Pro. If this below bug has already been fixed, hopefully that other problem has been resolved so I can upgrade to a working version) Using a JVDBGrid w/ BDE in my app, the following code: EscapeKey := (CharCode = VK_ESCAPE); FOldControlWndProc(Message); if EscapeKey then begin CloseControl; if Assigned(SelectedField) and (SelectedField.OldValue <> SelectedField.Value) then SelectedField.Value := SelectedField.OldValue; end; throws an exception in my application when pressing escape to cancel editing on my inplace DBLookup Combobox. editor. It is contained within this larger body of code in JVDBGrid.pas: procedure TJvDBGrid.ControlWndProc(var Message: TMessage); var EscapeKey: Boolean; CurrentEditor: TJvDBGridControl; begin if Message.Msg = WM_CHAR then begin if not DoKeyPress(TWMChar(Message)) then with TWMKey(Message) do begin CurrentEditor := FControls.ControlByName(FCurrentControl.Name); if (CharCode = VK_RETURN) and (PostOnEnterKey or CurrentEditor.LeaveOnEnterKey) then begin CloseControl; if PostOnEnterKey then DataSource.DataSet.CheckBrowseMode; end else if CharCode = VK_TAB then begin CloseControl; PostMessage(Handle, WM_KEYDOWN, VK_TAB, KeyData); end else begin EscapeKey := (CharCode = VK_ESCAPE); FOldControlWndProc(Message); if EscapeKey then begin CloseControl; if Assigned(SelectedField) and (SelectedField.OldValue <> SelectedField.Value) then SelectedField.Value := SelectedField.OldValue; end; end; end; end else if Message.Msg = WM_KEYDOWN then begin the following information was obtained that explains the bug which I have verified as true. from: The Delphi Bug List Borland Database Engine (BDE) http://dnqu.cn/dpj/dpj_470.html Requesting the OldValue property of a Field throws an exception. Description Reported by Quentin Sarafinchan; checked by Arjen Broeze There are two possible exceptions that can be thrown if you try to access the OldValue property of a field: The first is caused when the DataSet's CachedUpdates property is set to False. If this is the case the OldValue property is not available and trying to access it throws the EDatabaseError exception with the message 'Not in cached update mode'. The second is caused when you try to access the OldValue property when adding or inserting a new record. Since there is no old record, trying to access the old value of a field results in the EDBEngineError with the message 'At end of table'. Solution / workaround Enclose the code that utilizes the OldValue property of a field in a try-except block or check if the 'State' property of the DataSet is dsEdit before attempting to get the OldValue of a field.