Paradox BCD fields with Delphi 7 to Delphi XE and Delphi XE3
Editing and saving data in Paradox BCD fields in BDE/Paradox 32-bit applications compiled with Delphi XE3 evokes error [Number is out of range.] making BCD practically inaccessible in Delphi XE3 compiled paradox applications.
Results from test on same simple source code compiled with Delphi 7, Delphi 2009, Delphi XE and Delphi XE3, the compiled applications successively tested on Windows versions as shown.

The single form test application source code for PdxForm.pas:
unit PdxForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Grids, DBGrids, DBCtrls, ExtCtrls, Menus;
type
TForm1 = class(TForm)
Database1: TDatabase;
Table1: TTable;
DataSource1: TDataSource;
Panel1: TPanel;
DBNavigator1: TDBNavigator;
DBGrid1: TDBGrid;
OpenDialog1: TOpenDialog;
MainMenu1: TMainMenu;
mnuFile: TMenuItem;
mnuOpen: TMenuItem;
mnuClose: TMenuItem;
mnuExit: TMenuItem;
mnuHelp: TMenuItem;
mnuAbout: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure mnuOpenClick(Sender: TObject);
procedure mnuCloseClick(Sender: TObject);
procedure mnuExitClick(Sender: TObject);
procedure mnuAboutClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
slDbParams: TStringList;
strDatabase: string;
strTableName: string;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
if Database1.Connected then
Database1.Close;
Database1.DatabaseName := 'DBConnection';
OpenDialog1.Filter := 'Paradox Tables (*.db)|*.db';
OpenDialog1.DefaultExt := '.db';
OpenDialog1.InitialDir := ExtractFileDir(ParamStr(0)) + '\Data';
end;
procedure TForm1.mnuOpenClick(Sender: TObject);
begin
if not OpenDialog1.Execute then
exit;
strDatabase := ExtractFileDir(OpenDialog1.FileName);
strTableName := ExtractFileName(OpenDialog1.FileName);
if Table1.Active then
begin
if Table1.State in [dsInsert, dsEdit] then
Table1.Post;
Table1.Close;
end;
if Database1.Connected then
Database1.Close;
Try
begin
slDbParams := TStringList.Create;
slDbParams.Add('PATH='+strDatabase);
slDbParams.Add('DEFAULT DRIVER=PARADOX');
Database1.Params.Clear;
Database1.Params := slDbParams;
Database1.Open;
slDbParams.Free;
end;
except
begin
ShowMessage('Could not open database.');
exit;
end;
End;
Try
begin
Table1.DatabaseName := Database1.DatabaseName;
Table1.TableName := strTableName;
Table1.Open;
end;
except
begin
ShowMessage('Could not open table:' + #13#10 + strTableName);
exit;
end;
End;
mnuClose.Enabled := True;
OpenDialog1.InitialDir := strDatabase;
OpenDialog1.FileName := '';
end;
procedure TForm1.mnuCloseClick(Sender: TObject);
begin
Table1.Close;
mnuClose.Enabled := False;
end;
procedure TForm1.mnuExitClick(Sender: TObject);
begin
Form1.Close;
end;
procedure TForm1.mnuAboutClick(Sender: TObject);
var
strMsg: string;
begin
strMsg := 'Experimental Paradox Application.';
strMsg := strMsg + #13#10 + 'Compiled with Delphi 7 on Windows XP';
strMsg := strMsg + #13#10 + '2019-08-31, Niels Knabe';
MessageDlg(strMsg,mtInformation,[mbOK],0);
end;
end.