home *** CD-ROM | disk | FTP | other *** search
- unit Dbexcept;
-
- interface
-
- uses WinTypes, WinProcs, SysUtils, Classes, Graphics, Forms, Controls, Buttons,
- StdCtrls, ExtCtrls, Db;
-
- type
- TDbEngineErrorDlg = class(TForm)
- OKBtn: TBitBtn;
- Prev: TBitBtn;
- Next: TBitBtn;
- BDELabel: TLabel;
- NativeLabel: TLabel;
- ErrorLabel: TLabel;
- DbMessageText: TMemo;
- DbResult: TEdit;
- NativeResult: TEdit;
- DbCatSub: TEdit;
- Label1: TLabel;
- procedure FormShow(Sender: TObject);
- procedure PrevClick(Sender: TObject);
- procedure NextClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- private
- CurItem: Integer;
- DbException: EDbEngineError;
- FPrevOnException: TExceptionEvent;
- procedure ShowError;
- public
- procedure ShowException(Sender: TObject; E: Exception);
- end;
-
- var
- DbEngineErrorDlg: TDbEngineErrorDlg;
-
- implementation
-
- {$R *.DFM}
-
- procedure TDbEngineErrorDlg.ShowException(Sender: TObject; E: Exception);
- begin
- if E is EDbEngineError then
- begin
- DbException := EDbEngineError (E);
- ShowModal;
- end
- else if Assigned (FPrevOnException) then
- FPrevOnException (Sender, E)
- else
- Application.ShowException (E)
- end;
-
- procedure TDbEngineErrorDlg.ShowError;
- var
- BDEError: TDbError;
- begin
- Prev.Enabled := CurItem > 0;
- Next.Enabled := CurItem < DbException.ErrorCount - 1;
- BDEError := DbException.Errors [CurItem];
-
- { The message text is common to both BDE and native errors }
-
- DbMessageText.Text := BDEError.Message;
-
- { Fill BDE error information }
-
- BDELabel.Enabled := True;
- DbResult.Text := IntToStr (BDEError.ErrorCode);
- DbCatSub.Text := Format ('[$%s] [$%s]',
- [IntToHex (BDEError.Category, 2),
- IntToHex (BDEError.SubCode, 2)]);
-
- { Fill native error information }
-
- NativeLabel.Enabled := BDEError.NativeError <> 0;
- if NativeLabel.Enabled then
- NativeResult.Text := IntToStr (BDEError.NativeError)
- else { This entry has no server error }
- NativeResult.Clear
- end;
-
- procedure TDbEngineErrorDlg.FormShow(Sender: TObject);
- begin
- CurItem := 0;
- DbMessageText.Text := DbException.Message;
- ShowError;
- end;
-
- procedure TDbEngineErrorDlg.PrevClick(Sender: TObject);
- begin
- Dec (CurItem);
- ShowError;
- end;
-
- procedure TDbEngineErrorDlg.NextClick(Sender: TObject);
- begin
- Inc (CurItem);
- ShowError;
- end;
-
- procedure TDbEngineErrorDlg.FormCreate(Sender: TObject);
- begin
- FPrevOnException := Application.OnException;
- Application.OnException := ShowException;
- end;
-
- end.
-