Subject | TIB_Query.IsEmpty bug |
---|---|
Author | tomjanczkadao |
Post date | 2012-11-05T11:57:45Z |
Hi
Upgrading IBO from 4_9_14_34 to 4_9_14_52 introduced bug in TIB_Query.IsEmpty method. Under some circumstances it falls into infinite <while> loop.
Bug is easy to reproduce (isolating this problem took 4 days however):
Start New Appliacation, drop on form IB_Connection, IB_Query, IB_DataSource, IB_Grid and fill 3 events as below. Closing dataset in FormClose calls internally Grid.GetDispalyText, where IsEmpty function hangs!
procedure TForm1.FormCreate(Sender: TObject);
begin
IB_Connection1.Username := 'SYSDBA';
IB_Connection1.Password := 'masterkey';
IB_Connection1.Path := 'C:\Program Files\Firebird\Firebird_2_1\examples\empbuild\EMPLOYEE.FDB';
IB_Connection1.Connect;
IB_Query1.IB_Connection := IB_Connection1;
IB_DataSource1.DataSet := IB_Query1;
IB_Grid1.DataSource := IB_DataSource1;
IB_Grid1.Align := alClient;
IB_Grid1.TrackGridRow := True;
IB_Grid1.ListBoxStyle := True;
IB_Query1.FieldsVisible.Add('EMP_NO=F');
IB_Query1.SQL.Text := 'select EMP_NO, FIRST_NAME, LAST_NAME from EMPLOYEE';
IB_Query1.Open;
IB_Query1.SelectAll(False);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
IB_Query1.Close;
IB_Connection1.Disconnect;
end;
procedure TForm1.IB_Grid1GetDisplayText(Sender: TObject; ACol,
ARow: Integer; var AString: String);
begin
if not IB_Query1.IsEmpty then
begin
end;
end;
Regards, Tomek
Upgrading IBO from 4_9_14_34 to 4_9_14_52 introduced bug in TIB_Query.IsEmpty method. Under some circumstances it falls into infinite <while> loop.
Bug is easy to reproduce (isolating this problem took 4 days however):
Start New Appliacation, drop on form IB_Connection, IB_Query, IB_DataSource, IB_Grid and fill 3 events as below. Closing dataset in FormClose calls internally Grid.GetDispalyText, where IsEmpty function hangs!
procedure TForm1.FormCreate(Sender: TObject);
begin
IB_Connection1.Username := 'SYSDBA';
IB_Connection1.Password := 'masterkey';
IB_Connection1.Path := 'C:\Program Files\Firebird\Firebird_2_1\examples\empbuild\EMPLOYEE.FDB';
IB_Connection1.Connect;
IB_Query1.IB_Connection := IB_Connection1;
IB_DataSource1.DataSet := IB_Query1;
IB_Grid1.DataSource := IB_DataSource1;
IB_Grid1.Align := alClient;
IB_Grid1.TrackGridRow := True;
IB_Grid1.ListBoxStyle := True;
IB_Query1.FieldsVisible.Add('EMP_NO=F');
IB_Query1.SQL.Text := 'select EMP_NO, FIRST_NAME, LAST_NAME from EMPLOYEE';
IB_Query1.Open;
IB_Query1.SelectAll(False);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
IB_Query1.Close;
IB_Connection1.Disconnect;
end;
procedure TForm1.IB_Grid1GetDisplayText(Sender: TObject; ACol,
ARow: Integer; var AString: String);
begin
if not IB_Query1.IsEmpty then
begin
end;
end;
Regards, Tomek