AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Werkzeuge RaveReport Error #40 Boolean expression expected
Thema durchsuchen
Ansicht
Themen-Optionen

RaveReport Error #40 Boolean expression expected

Ein Thema von TUX_der_Pinguin · begonnen am 27. Jan 2014 · letzter Beitrag vom 6. Feb 2014
Antwort Antwort
Seite 1 von 2  1 2      
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#1

RaveReport Error #40 Boolean expression expected

  Alt 27. Jan 2014, 15:31
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;
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: RaveReport Error #40 Boolean expression expected

  Alt 27. Jan 2014, 15:50
Hast du es mal mit dem Debugger versucht und geschaut wo er stehen bleibt?

Edit: Vielleicht liegt es ja an der CreateFields() Prozedur.
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: RaveReport Error #40 Boolean expression expected

  Alt 27. Jan 2014, 15:58
Du createst einiges in dieser procedure, das du nicht wieder frei gibst, evtl. liegt es daran.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: RaveReport Error #40 Boolean expression expected

  Alt 27. Jan 2014, 16:48
Hast du es mal mit dem Debugger versucht und geschaut wo er stehen bleibt?
Also Debuggen kann ich da nichts, er bleibt bei RvProject.ExecuteReport(''); hängen da der Fehler irgendwo in den Eingeweiden vom Rave System auftritt.
Und da bei der Delphi Version keine Quelltexte von Rave dabei sind kann man auch nicht sehen wo genau der Fehler ausgelöst wird.

Du createst einiges in dieser procedure, das du nicht wieder frei gibst, evtl. liegt es daran.
Daran habe ich auch schon gedacht nur wenn ich z.b. versuche nach ExecuteReport oder Close z.b. das Ereignis mit Event.Free freizugeben dann bekomme ich einen Zeigerfehler.

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.
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: RaveReport Error #40 Boolean expression expected

  Alt 28. Jan 2014, 07:10
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?
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)

Geändert von baumina (28. Jan 2014 um 07:18 Uhr)
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: RaveReport Error #40 Boolean expression expected

  Alt 28. Jan 2014, 09:01
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?
DataText ist lokal deklariert, ich hatte es nur vergessen in meinem Beispiel anzugeben im echten Code
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.
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: RaveReport Error #40 Boolean expression expected

  Alt 28. Jan 2014, 09:41
Ich würde an deiner Stelle versuchen den Report vor dem Compile auf Festplatte zu speichern und ihn mir dann anschauen.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: RaveReport Error #40 Boolean expression expected

  Alt 28. Jan 2014, 12:35
Ich würde an deiner Stelle versuchen den Report vor dem Compile auf Festplatte zu speichern und ihn mir dann anschauen.
So ich habe das mal ausprobiert, nach dem ersten lauf kann ich mir den Report anschauen und alle Felder wurden so angelegt wie sie es auch sollten. Alles ist in Ordnung.

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.
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: RaveReport Error #40 Boolean expression expected

  Alt 6. Feb 2014, 10:53
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.
Angehängte Dateien
Dateityp: zip Rave Test.zip (744,3 KB, 1x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#10

AW: RaveReport Error #40 Boolean expression expected

  Alt 6. Feb 2014, 11:59
Du solltest das TRaveSimpleEvent nach dem Schliesen des Reports mit Free freigeben; ansonsten hast du ein Speicherleck.
Es könnte sogar sein, dass das alte Event irgendwie noch gecached wird und sich deshalb der Compiler beschwert.
fork me on Github
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz