Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Crystal Reports VCL XI und Delphi 2009 (https://www.delphipraxis.net/120819-crystal-reports-vcl-xi-und-delphi-2009-a.html)

Samashy 17. Sep 2008 08:08


Crystal Reports VCL XI und Delphi 2009
 
Hallo Ihr Lieben,

habe heute Delphi 2009 installiert und stehe nun vor einem mittelschweren Problem...
Die VCL von CR läuft nicht mehr. :roll: Die UCrpe32 kann nicht kompiliert werden.

Delphi-Quellcode:
...
  case ReportOptions.convertDateTimeType of
    PE_RPTOPT_CVTDATETIMETOSTR : FConvertDateTimeType := ToString;  
    PE_RPTOPT_CVTDATETIMETODATE: FConvertDateTimeType := ToDate;
    PE_RPTOPT_KEEPDATETIMETYPE : FConvertDateTimeType := ToDateTime;
    else
      FConvertDateTimeType := ToDateTime;
  end;
...
PE_RPTOPT_CVTDATETIMETOSTR : FConvertDateTimeType := ToString;
Fehler: Inkompatible Typen: 'TCrDateTimeType' und 'string' :gruebel:

Hat jemand einen Rat für mich?

Danke, Romy

Bernhard Geyer 17. Sep 2008 08:18

Re: Crystal Reports VCL XI und Delphi 2009
 
Was steckt hinter TCrDateTimeType?

Samashy 17. Sep 2008 08:48

Re: Crystal Reports VCL XI und Delphi 2009
 
Delphi-Quellcode:
TCrDateTimeType = (ToString, ToDate, ToDateTime);

DeddyH 17. Sep 2008 08:51

Re: Crystal Reports VCL XI und Delphi 2009
 
Und FConvertDateTimeType ist vom Typ TCrDateTimeType?

Bernhard Geyer 17. Sep 2008 08:51

Re: Crystal Reports VCL XI und Delphi 2009
 
TObject hat jetzt eine ToString-Methode und diese versucht der Compiler zu ziehen.

Schreib mal:

Delphi-Quellcode:
E_RPTOPT_CVTDATETIMETOSTR : FConvertDateTimeType := TCrDateTimeType.ToString;

Samashy 17. Sep 2008 08:57

Re: Crystal Reports VCL XI und Delphi 2009
 
Vielen Dank!!! Das hat funktioniert.
Gibt es eine Übersicht über diese Funktionen?
Haben nämlich schon ein neues Problem in der Pas QRExpr (von QuickReport)

Delphi-Quellcode:
if result.Kind = resDouble then
    begin
      if DecimalSeparator <> '.' then
      begin
        while pos('.', aString) > 0 do
          aString[pos('.', aString)] := DecimalSeparator;
      end;
      try
        result.dblResult := StrToFloat(aString);
      except
        result := ErrorCreate(Format(SqrExpIllegalCharInNumeric, [aString]))
      end;
    end;
aString[pos('.', aString)] := DecimalSeparator;
Inkompatible Typen: 'AnsiChar' und 'Char'

Dafür sollte ich wohl besser einen neuen Thread eröffnen, da es ja nicht zu Crystal gehört.

Romy

Bernhard Geyer 17. Sep 2008 09:06

Re: Crystal Reports VCL XI und Delphi 2009
 
Zitat:

Zitat von Samashy
Vielen Dank!!! Das hat funktioniert.
Gibt es eine Übersicht über diese Funktionen?

Online-Hilfe? Und auf dn.codegear.com gibt es auch genug zu lesen bezüglich neuigkeiten D2007 und Unicode-Umstellung.

Zitat:

Zitat von Samashy
Haben nämlich schon ein neues Problem in der Pas QRExpr (von QuickReport)
...aString[pos('.', aString)] := DecimalSeparator;
Inkompatible Typen: 'AnsiChar' und 'Char'

Als was ist aString definiert?

Gibt nicht evtl. schon ein D2009-Update von CR?

Samashy 17. Sep 2008 09:17

Re: Crystal Reports VCL XI und Delphi 2009
 
Zitat:

Online-Hilfe? Und auf dn.codegear.com gibt es auch genug zu lesen bezüglich neuigkeiten D2007 und Unicode-Umstellung.
Das ist auch noch ein Problem. Die OnlineHilfe geht auch nicht... aber damit muss ich mich später befassen.

Zitat:

Als was ist aString definiert?
Delphi-Quellcode:
aString : string[255];

Zitat:

Zitat von Bernhard Geyer
Gibt nicht evtl. schon ein D2009-Update von CR?

Leider nein. Sieht auch nicht so aus, als wenn es da eine in naher Zukunft gibt. Ich habe fast 90% meiner Reports mit CR erstellt. Ist für mich der beste ReportDesigner.

Romy

Bernhard Geyer 17. Sep 2008 09:58

Re: Crystal Reports VCL XI und Delphi 2009
 
Zitat:

Zitat von Samashy
Delphi-Quellcode:
aString : string[255];

Muß es ein kurzer String sein? diese bleiben nämlich Ansi-String.
geht auch
Delphi-Quellcode:
aString: String
...
SetLength(aString, 255);

Samashy 17. Sep 2008 10:17

Re: Crystal Reports VCL XI und Delphi 2009
 
Du hast mir sehr geholfen! Hab vielen Dank.
Ich habe mir die Erläuterung zu Ansi und Unicode runtergeladen...
und wurschtel mich da jetzt durch. Mein Programm funktioniert erst mal.

Also nochmal Danke!

Romy

toms 17. Sep 2008 11:01

Re: Crystal Reports VCL XI und Delphi 2009
 
Delphi-Quellcode:
aString : string[255];
=

Delphi-Quellcode:
aString : ShortString

Samashy 17. Sep 2008 15:58

Re: Crystal Reports VCL XI und Delphi 2009
 
:wall: Compilieren geht mit CR aber kein Report kann erzeugt werden.
Ändere ich alles AnsiChar und AnsiString, kann die Version nicht mehr ermittelt werden.
Ich bin kurz vor dem Verzweifeln.
Delphi2007 arbeitet nicht mehr. :wall:

Romy

toms 17. Sep 2008 16:09

Re: Crystal Reports VCL XI und Delphi 2009
 
Zitat:

Zitat von Samashy
Ändere ich alles AnsiChar und AnsiString, kann die Version nicht mehr ermittelt werden.

Hallo Romy, was meinst du damit? Wie wird die Version ermittelt?

Samashy 17. Sep 2008 16:19

Re: Crystal Reports VCL XI und Delphi 2009
 
Zitat:

Zitat von toms
Zitat:

Zitat von Samashy
Ändere ich alles AnsiChar und AnsiString, kann die Version nicht mehr ermittelt werden.

Hallo Romy, was meinst du damit? Wie wird die Version ermittelt?

Ich hänge beim Umschreiben der VCL doch an einer anderen Stelle.

Es kann kein Printjob gefunden werden. Die Fehlermeldung ist witzig... bestand erst aus chinesischen Zeichen und nun nach AnsiStringnutzung aus ??????? :wall:

Egal...

Delphi-Quellcode:
{Open the Main PrintJob}
    FPrintJob := FCrpeEngine.PEOpenPrintJob(PChar(FReportName));
    FPrintJobs[0] := IntToStr(FPrintJob);
    {If PrintJob is zero, generate error}
    if FPrintJob = 0 then
    begin
      Result := False;
      case GetErrorMsg(0,errNoOption,errEngine,'','OpenPrintJob <PEOpenPrintJob>') of
        errIgnore : Exit;
        errAbort : Abort;
        errRaise : raise ECrpeError.Create(FLastErrorNumber, FLastErrorString);
      end;
    end;
Hier kommt für FPrintJOb 0 raus.


Delphi-Quellcode:
function TCrpeEngine.PEOpenPrintJob (reportFilePath : PChar): Smallint;
var
  CrpeOpenPrintJob : TFarProc;
begin
  CRDEngineError('');
  Result := -1;
  {Check if Engine is loaded}
  if CRDEngine = 0 then
  begin
    CRDEngineError(CRD_ENGINE_NOT_LOADED);
    Exit;
  end;
  CrpeOpenPrintJob := GetProcAddress(CRDEngine, 'PEOpenPrintJob');
  if CrpeOpenPrintJob = nil then
    CRDEngineError('PEOpenPrintJob')
  else
    Result := TPEOpenPrintJob(CrpeOpenPrintJob)(reportFilePath);
end;
GetProcAddress ermittelt eine Adresse. Ich verstehe aber nicht wie der Aufruf für das Result funktioniert.
Delphi-Quellcode:
TPEOpenPrintJob = function (reportFilePath: PChar): SmallInt; stdcall;

Bitte bitte helft. :?

mkinzler 17. Sep 2008 18:13

Re: Crystal Reports VCL XI und Delphi 2009
 
Zitat:

Das ist auch noch ein Problem. Die OnlineHilfe geht auch nicht... aber damit muss ich mich später befassen.
http://docs.codegear.com/docs/radstu.../contents.html
Versuch mal
Delphi-Quellcode:
FPrintJob := FCrpeEngine.PEOpenPrintJob(PAnsiChar(FReportName));

Samashy 18. Sep 2008 07:25

Re: Crystal Reports VCL XI und Delphi 2009
 
Ich habe noch ewig gefummelt und bekomme einen Report ohne Datenbankanbindung zum Laufen. (Zwar mit nicht wirklich hübschen Daten, aber wenigstens schon mal was :? )

Inzwischen hänge ich also an der DB-Verbindung und dort jetzt wirklich im absoluten "IchverstehegarnichtsLand" :gruebel:

Ich brauche also dringend Hilfe von Euch, wie ich die VCL von Crystal unter Delphi 2009 zum Laufen bekomme.

Hier die Procedure, welche ich nicht verstehe und damit keinen Ansatz zum Ändern auf UNiCode habe.


Delphi-Quellcode:
function TCrpeEngine.PETestNthTableConnectivity (printJob: Smallint; tableN: Smallint): Bool;
var
  CrpeTestNthTableConnectivity : TFarProc;
begin
  CRDEngineError('');
  Result := False;
  {Check if Engine is loaded}
  if CRDEngine = 0 then
  begin
    CRDEngineError(CRD_ENGINE_NOT_LOADED);
    Exit;
  end;
  CrpeTestNthTableConnectivity := GetProcAddress(CRDEngine, 'PETestNthTableConnectivity');
  if CrpeTestNthTableConnectivity = nil then
    CRDEngineError('PETestNthTableConnectivity')
  else
    Result := TPETestNthTableConnectivity(CrpeTestNthTableConnectivity)
      (printJob, tableN);
end;
Bei GetProcAdress kommt eine Adresse raus. printJob=1 und tableN=0

Vielleicht ist es ja schon das Fatale, dass TableN=0 ist.

In einer Procedure davor werden diese ermittelt
Delphi-Quellcode:
{Get the number of tables}

    nTables := Cr.FCrpeEngine.PEGetNTables(Cr.FPrintJob);
    if nTables = -1 then
    begin
      Result := False;
      Cr.GetErrorMsg(Cr.FPrintJob,errNoOption,errEngine,'',
        'Connect.Test <PEGetNTables>');
      Exit;
    end;
Da kommt 1 raus.


Delphi-Quellcode:
{Loop through the tables}
    for nIndex := 0 to (nTables - 1) do
    begin

      {Set LogOnInfo and propagate through other tables}
      if not Cr.FCrpeEngine.PESetNthTableLogOnInfo(Cr.FPrintJob, nIndex, LogInfo, True) then
      begin
        Result := False;
        Cr.GetErrorMsg(Cr.FPrintJob,errNoOption,errEngine,'',
          'Connect.Test <PESetNthTableLogOnInfo>');
        Exit;
      end;

      {Test Connect}
      Result := Cr.FCrpeEngine.PETestNthTableConnectivity(Cr.FPrintJob, nIndex);
      {If if failed, store the resulting error}
      if Result = False then
      begin
        Cr.GetErrorMsg(Cr.FPrintJob,errNoOption,errEngine,'',
          'Connect.Test <PETestNthTableConnectivity>');
        Exit;
      end;
    end;
  end;
Bei "Set LogOnINfo" kommt auch TRUE raus... was dann scheitert ist der "Test Connect".


Bitte bitte helft.

Romy

rwachtel 18. Sep 2008 08:30

Re: Crystal Reports VCL XI und Delphi 2009
 
Zitat:

Zitat von Bernhard Geyer
[...] Gibt nicht evtl. schon ein D2009-Update von CR?

Wird es auch nicht geben, da das VCL-Interface seit Delphi 7 (nicht 2007!) als "deprecated" gilt.

Samashy 18. Sep 2008 09:01

Re: Crystal Reports VCL XI und Delphi 2009
 
Zitat:

Zitat von rwachtel
Zitat:

Zitat von Bernhard Geyer
[...] Gibt nicht evtl. schon ein D2009-Update von CR?

Wird es auch nicht geben, da das VCL-Interface seit Delphi 7 (nicht 2007!) als "deprecated" gilt.

Was wäre die Alternative?

Romy

rwachtel 18. Sep 2008 09:12

Re: Crystal Reports VCL XI und Delphi 2009
 
Lt. Business Objects/SAP: weg von Win32, hin zu .NET

https://boc.sdn.sap.com/files/Updati...20XI%20VCL.pdf

mkinzler 18. Sep 2008 09:22

Re: Crystal Reports VCL XI und Delphi 2009
 
Oder einer anderen Repoting-Bibliothek

Samashy 18. Sep 2008 10:19

Re: Crystal Reports VCL XI und Delphi 2009
 
Zitat:

Zitat von mkinzler
Oder einer anderen Repoting-Bibliothek

Der Horror pur. Ich habe 276 CR-Reports.
In Delphi 2007 läuft ja alles, aber ich wollte halt gerne hin zu Delphi 2009.

Kann mir irgendjemand helfen die VCL umzuschreiben?

Romy

MaBuSE 31. Mär 2010 17:55

Re: Crystal Reports VCL XI und Delphi 2009
 
Zitat:

Zitat von Samashy
Kann mir irgendjemand helfen die VCL umzuschreiben?

Hallo Romy,
ich stehe nun vor dem selben Problem. :-(

Wie ist denn der Stand der Dinge ?
  • Bist Du auf Delphi 2007 geblieben, oder nun doch zu Delphi 2009 / Delphi 2010 gewechselt?
  • Hast du die VCL (ucrpe32) angepasst?
  • Oder verwendest Du nun einen anderen Report Generator?
  • Wenn ja, konntest Du die Reports (halb)automatisch in das neue System konvertieren?
  • ...oder musstest Du alle Reps neu designen?
So viele Fragen :mrgreen:

Ich hoffe Du beobachtest diesen Thread noch.

Viele Grüße
MaBuSE

ps: Deine Fotos sind der Hammer :love:

cs_jens 28. Okt 2010 10:00

AW: Crystal Reports VCL XI und Delphi 2009
 
Hi,

sorry für das Ausgraben, aber gibt es eigentlich hierzu neue Erkenntnisse?

MaBuSE 28. Okt 2010 10:50

AW: Crystal Reports VCL XI und Delphi 2009
 
Zitat:

Zitat von cs_jens (Beitrag 1058298)
aber gibt es eigentlich hierzu neue Erkenntnisse?

Vor drei Wochen hatte mich das jemand per PN gefragt. Ich hätte gleich öffentlich antworten sollen ;)

Zitat:

Zitat von MaBuSE
Zitat:

Zitat von bmartini
Habt ihr evtl. das Problem gelöst mit der Crystal VCL. Wir würden auch auf eine aktuelle Crystalversion updaten, aber das Problem scheint ja die VCL für Delphi zu sein.

Hallo Benjamin,
um es kurz zu machen: Wir haben das Problem nicht gelöst.

SAP (der Besitzer von CR) unterstützt kein Delphi mehr. Die von SAP vorgeschlagene Lösung ist, dotNet zu benutzen.

Wir haben für uns folgende Lösung gefunden, die gerade in der Umsetzung ist:

* Server auf dem alle Reports lagern
* WebService (dotNet), der von Delphi eine Anfrage bekommt Report xy mit folgenden Parameter bzw. SQL, ...
* Der WebService führt den Report aus und erstellt eine *.pdf Datei
* WebService gibt URL der Pdf Datei an Delphi Client zurück
* Delphi Client zeigt PDF Datei an.

In Delphi werden also die CR-Aufrufe durch eine Anfrage an einen DotNet WebService gestellt und als Antwort erhalten Sie eine Url zu dem fertigen PDF. Das Pdf wird dann angezeigt fertig.

Das war die Kurzfassung.
Die Pdf-Dateien sind z.B. passwortgeschützt, das Passwort wird auch über den WebService übertragen.
Es existiert ein unter der URL "Bitte warten"-Fenster, das automatisch durch die PDF ersetzt wird, sobald diese fertig ist, ...


Wir hatten erst überlegt, die VCL-Komponente auf Unicode zu portieren. Aber das wäre mit relativ viel Arbeit verbunden. Zumal die dll-Datei die von der Komponente verwendet wird von SAP als veraltet beschrieben ist und wahrscheinlich in zukünftigen Versionen nicht mehr enthalten ist. Damit wäre die Portierungsarbeit umsonst.

Unsere Lösung funktioniert auch in der Zukunft.


Ein weiterer Lösungsvorschlag wäre in C# ein Konsolenprogramm zu schreiben, dass als Parameter eine XML-Datei bekommt.
In der XML-Datei definierst Du welchen Report mit welchen Parametern Du aufrufen möchtest.
Es wird ein PDF erstellt, das dann nur noch angezeigt werden muss.

Alternativ könnte man auch ein C# Programm mit einer GUI schreiben, der den Report dann im CR direkt anzeigt. Parameter könnte dann auch wieder eine XML-Datei sein.

Ein anderes Programm ist ja von Delphi mit ShellExecute schnell aufgerufen.

Ich hoffe diese Info hilft Dir.
Viele Grüße
MaBuSE



Alle Zeitangaben in WEZ +1. Es ist jetzt 14:15 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