I attach the call stack window. I know there's something not right on TrfPage initialization. Still have no idea why & how to resolve it
I've found some errors in my code, referred to 'range check', it was corrected and work ok.
loop: Can you try this? (Sqlite3 database, modify it as you need...) The code works. If it fails, you have a problem with
FreeReports template file or in the database, or some parameter...
procedure TfrmLibrosListadosPorMateria.ButtonRangoSingleClick(Sender: TObject);
var
sQuery: string;
sTableName, sDatabaseFilePath : string;
Sqlite3DatasetA: TSqlite3Dataset;
frDBDataSetA: TfrDBDataSet;
frReportA: TfrReport;
frViewA: TfrView;
frPageA: TfrPage;
begin
sDatabaseFilePath := ; { here Your Database FilePath }
sTableName := 'libros';
Sqlite3DatasetA := TSqlite3Dataset.Create(Self);
frDBDataSetA := TfrDBDataSet.Create(Self);
frReportA := TfrReport.Create(Self);
frReportA.ReportType := rtSimple;
frReportA.ModifyPrepared := False;
Sqlite3DatasetA.FileName := sDatabaseFilePath;
Sqlite3DatasetA.TableName := sTableName;
Sqlite3DatasetA.PrimaryKey := 'id';
sQuery := 'SELECT * FROM ' + sTableName ' WHERE activo=1 AND id_materia=' + QuotedStr(IntToStr(SpinEdit1.Value));
Sqlite3DatasetA.SQL := sQuery;
Sqlite3DatasetA.ExecSQL;
Sqlite3DatasetA.Open;
if Sqlite3DatasetA.RecordCount < 1 then begin
ShowMessage('No records found for "materia" specified...');
end else begin
frReportA.ShowProgress := False;
frDBDataSetA.DataSet := Sqlite3DatasetA;
frReportA.Dataset := frDBDataSetA;
frReportA.loadFromFile(Application.Location + '\reports\libros_por_materia.lrf'); // here myReport.lrf
frPageA := frReportA.Pages[0];
frViewA := frCreateObject(gtMemo, '', frPageA); // create data field
frViewA.SetBounds(900, 25, 100, 80); // Position Right-Up
frViewA.Memo.Add('( ' + IntToStr(SpinEdit1.Value) + ' )');
TfrMemoView(frViewA).Font.Size := 14;
TfrMemoView(frViewA).Font.Bold := True;
TfrMemoView(frViewA).Alignment := taRightJustify;
frPageA.Objects.Add(frViewA);
if not frReportA.PrepareReport then ShowMessage('Not prepared');
Application.ProcessMessages;
frReportA.ShowReport;
Application.ProcessMessages;
FreeAndNil(frViewA);
end;
//----------------------------------- clear memory
frDBDataSetA.Close;
Sqlite3DatasetA.Close;
FreeAndNil(frReportA);
FreeAndNil(frDBDataSetA);
FreeAndNil(Sqlite3DatasetA);
//----------------------------------- clear memory
end;