![]() |
RaveReport Error #40 Boolean expression expected
So ich hoffe jemand von euch weiß woran das liegen kann das wenn ich folgende Routine ein
weiteres mal aufrufe das dann ein Fehler gemeldet wird. "Error #40 - Boolean expression expected". Der erste Durchlauf funktioniert einwandfrei und dann war es das, ich muss die Anwendung beenden und kann dann die Routine erst dann wieder benutzen. Ich bekomme den Fehler weg wenn ich die Zeile RvProject.ProjMan.Compile weglasse nur dann werden auch die Ereignisse nicht erzeugt. Und bei google findet sich nur ein Eintrag mit der gleichen Fehlermeldung, hier aus dem Forum, nur ohne eine Lösung.
Delphi-Quellcode:
procedure PrintReport;
var Report: TRaveReport; Page: TRavePage; DataBandTabData: TRaveDataBand; DV_TabData: TRaveDataView; Event: TRaveSimpleEvent; begin //Report öffnen & Komponenten ermitteln RvProject.ProjectFile := glLocalAppDir+FILE_REPORT_GENERAL; RvProject.Open; Report := RvProject.ProjMan.FindRaveComponent('MyReport', nil) as TRaveReport; Page := RvProject.ProjMan.FindRaveComponent('Page1', Report) as TRavePage; DataBandTabData := RvProject.ProjMan.FindRaveComponent('DataBandTabData', Page) as TRaveDataBand; DV_TabData := RvProject.ProjMan.FindRaveComponent('DV_TabData', Page) as TRaveDataView; CreateFields(DV_TabData, nil, nil, True); //Feld erstellen DataText := DataBandTabData.CreateChild(TRaveDataText, 'dt_DynamischerFeldName') as TRaveDataText; DataText.DataField := 'DynamischerFeldName'; DataText.DataView := DV_TabData; //Event erzeugen Event := TRaveSimpleEvent.Create; Event.Name := TableLayout.Tabs[Idx].Key+'OnBeforePrint'; Event.ModuleOwner := Page; Event.Sender := DataText; Event.Owner := DataText; Event.Body := 'Self.Color := '+IntToStr(clRed)+';'; //Event zuweisen DataText.OnBeforePrint := Event; //Event kompilieren RvProject.ProjMan.Compile; //Report ausführen und schließen RvProject.ExecuteReport('MyReport'); RvProject.Close; end; |
AW: RaveReport Error #40 Boolean expression expected
Hast du es mal mit dem Debugger versucht und geschaut wo er stehen bleibt? :?:
Edit: Vielleicht liegt es ja an der CreateFields() Prozedur. |
AW: RaveReport Error #40 Boolean expression expected
Du createst einiges in dieser procedure, das du nicht wieder frei gibst, evtl. liegt es daran.
|
AW: RaveReport Error #40 Boolean expression expected
Zitat:
Und da bei der Delphi Version keine Quelltexte von Rave dabei sind kann man auch nicht sehen wo genau der Fehler ausgelöst wird. Zitat:
In den Beispielen von Nevrona, wo es darum geht Felder etc. zuerzeugen wird auch nichts explizit freigegeben am Ende. Die Beispiele enthalten leider nicht die Erzeugung von Ereignissen bzw. die Ausführung des Kompiler. |
AW: RaveReport Error #40 Boolean expression expected
Bevor du das Event freigeben kannst, musst du die Zuordnung DataText.OnBeforePrint auf NIL setzen. Aber muss Datatext nicht ebenfalls freigegeben werden? Ist DataText global deklariert?
|
AW: RaveReport Error #40 Boolean expression expected
Zitat:
ist es aber da. Ich habe keinen Schimmer was ich noch ausprobieren soll, in allen Beispielen sowohl mit als auch ohne Ereignis Erzeugung wird nach RvProject.ProjMan.Compile nichts freigegeben oder durch weitere Befehle zurückgesetzt. |
AW: RaveReport Error #40 Boolean expression expected
Ich würde an deiner Stelle versuchen den Report vor dem Compile auf Festplatte zu speichern und ihn mir dann anschauen.
|
AW: RaveReport Error #40 Boolean expression expected
Zitat:
Beim zweiten versuch kommt die Fehlermeldung und mache ich dann im Report Designer ein Refresh des DataView sehe ich nur noch ein Feld mit der Bezeichnung "DV_TabHeaderFieldName". Das DataView heißt "DV_TabHeader" aber ein Feld "FieldName" erzeuge ich nicht, für mich deutet das darauf hin das er beim versuch das erste Feld zu erzeugen crasht. Aber warum und wieso zum Teufel eine so nichts sagende Meldung kommt "Boolean expression expected" verstehe ich nicht. Langsam verzweifel ich an dem Teil. :evil: |
AW: RaveReport Error #40 Boolean expression expected
Liste der Anhänge anzeigen (Anzahl: 1)
So ich habe jetzt noch mal ein kleines Tool gebastelt um alles andere von dem eigentlichen Projekt auszuschließen.
Ich habe einen einfachen Report erstellt, eine Region mit einem Databand auf den wird dann zur Laufzeit ein DataText Objekt plaziert. Und mit Hilfe eines Ereignis welches ebenfalls zur Laufzeit erstellt wird soll der Text eingefärbt werden. Durch den Klick auf den Button wird der Report aufgerufen und als PDF Datei exportiert und anschließend wird das PDF geöffnet. Und wieder kann ich dieses nur einmal machen, beim zweiten Versuch erhalte ich eine Fehlermeldung dies mal ist es jedoch "General Compiler Error". Das liegt aber wohl nur daran das ich Integer an den Report übergebe und keine Strings mehr, bei Strings würde ich wieder die ursprüngliche Fehlermeldung "Error #40 Boolean expression expected" erhalten.
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var Report: TRaveReport; Page: TRavePage; DataBand: TRaveDataBand; DataView: TRaveDataView; DataText: TRaveDataText; Event: TRaveSimpleEvent; begin //Rave für PDF Export vorbereiten... RvSystem.DefaultDest := rdFile; RvSystem.DoNativeOutput := False; RvSystem.RenderObject := RvRenderPDF; RvSystem.OutputFileName := '.\test.pdf'; RvSystem.SystemSetups := RvSystem.SystemSetups - [ssAllowSetup]; RvSystem.SystemOptions := RvSystem.SystemOptions - [soShowStatus]; //Report öffnen RvProject.ProjectFile := '.\test.rav'; RvProject.Open; //Komponenten ermitteln Report := RvProject.ProjMan.FindRaveComponent('Test', nil) as TRaveReport; Page := RvProject.ProjMan.FindRaveComponent('Page1', Report) as TRavePage; DataBand := RvProject.ProjMan.FindRaveComponent('DataBand1', Page) as TRaveDataBand; DataView := RvProject.ProjMan.FindRaveComponent('DataView1', Page) as TRaveDataView; CreateFields(DataView, nil, nil, True); //Feld erstellen DataText := DataBand.CreateChild(TRaveDataText, 'dtData') as TRaveDataText; DataText.DataField := 'DataFeld'; DataText.DataView := DataView; DataText.Top := 0; DataText.Left := 0 / RvProject.ProjMan.UnitsFactor; DataText.Width := 15 / RvProject.ProjMan.UnitsFactor; //Ereignis erstellen Event := TRaveSimpleEvent.Create; Event.Name := 'DataFeldOnBeforePrint'; Event.ModuleOwner := Page; Event.Sender := DataText; Event.Owner := DataText; Event.Body := 'if DataView1Color.AsInteger <> '+IntToStr(clBlack)+' then'+ ' Self.Color := DataView1Color.AsInteger;'+ 'end;'; DataText.OnBeforePrint := Event; //Events kompilieren.. RvProject.ProjMan.Compile; //Report ausführen... RvProject.ExecuteReport('Test'); //Report schließen... RvProject.Close; ShellExecute(Application.Handle, 'open', PWideChar('.\test.pdf'), nil, nil, SW_NORMAL); end; Der Quellcode, kompilierte Exe und die Report Datei habe ich angehängt. |
AW: RaveReport Error #40 Boolean expression expected
Du solltest das
Delphi-Quellcode:
nach dem Schliesen des Reports mit
TRaveSimpleEvent
Delphi-Quellcode:
freigeben; ansonsten hast du ein Speicherleck.
Free
Es könnte sogar sein, dass das alte Event irgendwie noch gecached wird und sich deshalb der Compiler beschwert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz