AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

rave report: onRestore

Offene Frage von "semo"
Ein Thema von semo · begonnen am 10. Nov 2005 · letzter Beitrag vom 14. Nov 2005
Antwort Antwort
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#1

rave report: onRestore

  Alt 10. Nov 2005, 00:58
ich habe mir nen ravereport zusammengebastelt unter verwendung einer rvCustomConnection.
daten werden auch wie gewünscht angezeigt.
nur mein problem ist das folgende:

nach dem aufruf des reports, schließe ich diesen wieder und will einen neuen report mit einem anderen datensatz laden. es werden aber immer noch die daten des ersten reports angezeigt. irgendwie muss ich der connection sagen dass sie die alten daten beim rvProcejt.Close verwerfen soll, habe da was von OnRelease gelesen. Bringt aber auch nix.

hier ein Codeauszug:

Delphi-Quellcode:
procedure TMyForm.RvCustomConnection1Open(Connection: TRvCustomConnection);
begin
  // The OnOpen event is called to initialize a data session. In this event you
  // can open up data files, initialize variables and save the current state of
  // the data for the OnRestore event which will be called to terminate the
  // data session.

  RvCustomConnection1.DataRows := myList.Count;
  iRowIndex := 0;
end;
       
procedure TMyForm.RvCustomConnection1GetCols(Connection: TRvCustomConnection);
begin
  With RvCustomConnection1 do
  begin
    WriteField('lfdNr',dtString,8,'','');
    WriteField('Name',dtString,50,'','');
    WriteField('Kosten',dtString,20,'','');
  end;
end;

procedure TMyForm.RvCustomConnection1GetRow(Connection: TRvCustomConnection);
var
  sName,
  sKosten,
  sTituliert: String;
  aPerson: PPerson;
begin
  // The OnGetRow event is called to retrieve the data for the current row.
  // There are several methods used to write the data to a special buffer used
  // by Rave. The order and types of the fields written must match exactly the
  // field definitions provided in the OnGetCols event.

  aPerson := PPerson(myList[iRowIndex]);
  sName := aPerson.name;
  sKosten := aPerson.kosten;

  with RvCustomConnection1 do
  begin
    WriteStrData('', IntToStr(iRowIndex+1));
    WriteStrData('', sName);
    WriteStrData('', Format('%8.2f', [fKosten]));
  end;
end;
       
procedure TMyForm.RvCustomConnection1Next(Connection: TRvCustomConnection);
begin
  // The OnNext event is called to move the data cursor to the next row of data.

  Inc(iRowIndex);
end;

procedure TMyForm.RvCustomConnection1EOF( Connection: TRvCustomConnection;
                                                  var Eof: Boolean);
begin
  // The OnEOF event is called to return whether the data cursor is beyond the
  // EOF or not. A true value should be returned only if there are no rows or
  // if a call to the OnNext event has moved past the last row.

  EOF := iRowIndex > myList.Count-1;
end;

procedure TMyForm.RvCustomConnection1Restore(
  Connection: TRvCustomConnection);
begin
  // hier steht irgendwas damit diese procedure durchlaufen wird
  Application.ProcessMessages;
end;
jemand nen tip?
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: rave report: onRestore

  Alt 10. Nov 2005, 08:21
Hallo

hab noch nie Probleme gehabt, das ich noch die alten Daten im Report hatte. Aber du machst es dir auch zu kompliziert. Du brauchst nur 3 Ereignisse Onopen, Ongetcols und Ongetrows und dein irowindex brauchst du auch nicht, du kannst Connection.dataindex nutzen.

Delphi-Quellcode:
  aPerson := PPerson(myList[Connection.dataindex]);
  sName := aPerson.name;
  sKosten := aPerson.kosten;

  with RvCustomConnection1 do
  begin
    WriteStrData('', IntToStr(Connection.dataindex+1));
    WriteStrData('', sName);
    WriteStrData('', Format('%8.2f', [fKosten]));
  end;
"Kosten" kannst du auch als dtFloat übergeben und im Rave-Report formatieren. Dazu im treeview rechts im Dataview das Kostenfeld anklicken und dann kannst du bei z.B. Floats ein Displayformat einstellen. Vorteil wäre: du kannst dann in Rave auch mit diesen Werten rechnen und z.B. mit Ravemitteln eine Gesamtsumme erstellen.

ansonsten mal nbeim 2. Durchlauf einen Haltepunkt in die 3 Procs, damit du siehst, welche aufgerufen werden.

Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#3

Re: rave report: onRestore

  Alt 10. Nov 2005, 13:59
beim schließen der software und erneutem starten, dann aufrufen des reports erscheint die meldung: "Unable to gain control of RAVE Data Communikation System."

beim beenden der software verbleibt noch der prozess, das muss wohl am rave report liegen.

ist denn meine vorgehensweise gänzlich verkehrt oder einfach nur umständlich?

werde sicherheitshalber heute abend deinen vorschlag testen.
  Mit Zitat antworten Zitat
merlin17

Registriert seit: 15. Dez 2002
Ort: Mittelfranken
980 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: rave report: onRestore

  Alt 10. Nov 2005, 17:28
QUESTION:
I am getting a "Unable to gain control of Rave Data Communication System" message. What
should I do?
OR
I need to run multiple instances of my application, each of which uses Rave. When I try and do this
I get errors. What do I need to do to enable this to work?
ANSWER:
Direct DataViews are not designed to be thread safe. Therefore, if you are running multiple
instances of an application using Direct Data Views when using Rave you are very likely to get
error messages about gaining control of Rave. Your best solution for threading applications is to
use [Driver DataViews], which are designed to be [threadsafe]. Driver DataViews require Rave
BEX.
Solution to try if you must use Direct DataViews
The most likely reason errors are being generated is because the separate applications' Direct
DataView groups are colliding. If you need to run multiple programs with separate reporting direct
data view groups, set RPDefine.DataID to a unique value and the separate apps will not collide.
Setting the DataID value needs to be done prior to executing any reports. It is recommended that
you do this in the OnCreate event of your main form and use something that will be unique to the
application.
Delphi Example:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
RPDefine.DataID := IntToStr(HInstance);
end;
Multiple Application Instances, Update
There have been a number of reports of problems when using the code provided above. First, it is
critical that the DataID variable be set before any Rave connections have been created. Also, tests
indicate that, for reasons not clear at this time, using the main form HInstance variable does not
necessarily provide a value different for each instance of the application.
The currently recommended way of setting the DataID variable is to place the code in the project's
.DPR file and to use the application handle:
Delphi Example:
Delphi-Quellcode:
begin
RPDefine.DataID := IntToStr(Application.Handle);
Application.Initialize;
{etc...}
end;
You will need to add RPDefine and Sysutils to the DPR file's USES clause.
- TeamNevrona cannot respond to questions received via email -
http://rave-notes.blogspot.com
  Mit Zitat antworten Zitat
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#5

Re: rave report: onRestore

  Alt 10. Nov 2005, 17:42
ich denke das es nicht das problem der identifizierung (id) ist,
da ja beim beenden des formulars von wo aus der report gestartet wurde die connection wohl nicht geschlossen wird.
auch nicht beim beenden der software.

der prozess läuft dann mit 100 % cpu last im hintergrund weiter.
die vorgehensweise von Keldorn habe ich angewandt und komme zum selben ergebnis:

Delphi-Quellcode:
procedure TMyForm.RvCustomConnection1Open(Connection: TRvCustomConnection);
begin
  RvCustomConnection1.DataRows := aMyObject.aMyList.Count;
  RvCustomConnection1.dataindex := 0;
end;

       
procedure TMyForm.RvCustomConnection1GetCols(Connection: TRvCustomConnection);
begin
  With RvCustomConnection1 do
  begin
    WriteField('lfdNr',dtString,8,'','');
    WriteField('Name',dtString,50,'','');
    WriteField('Kosten',dtString,20,'','');
  end;
end;


procedure TMyForm.RvCustomConnection1GetRow(Connection: TRvCustomConnection);
var
  sName,
  sKosten: String;
begin
  aPerson := PPerson(aMyObject.aMyList[RvCustomConnection1.dataindex]);
  sName := aPerson.name;
  sKosten := aPerson.kosten;
  
  with RvCustomConnection1 do
  begin
    WriteStrData('', IntToStr(RvCustomConnection1.dataindex+1));
    WriteStrData('', sName);
    WriteStrData('', Format('%8.2f', [fKosten]));
  end;
end;

procedure TMyForm.RvCustomConnection1Restore(
  Connection: TRvCustomConnection);
begin
  Application.ProcessMessages;
end;
mit oder ohne procedure "RvCustomConnection1Restore" --> bringt beides nix
  Mit Zitat antworten Zitat
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#6

Re: rave report: onRestore

  Alt 13. Nov 2005, 18:25
Ok, habe folgendes Problem gehabt: beim oncreate des Formulars übergebe ich ein Objekt, welches eine Liste mit Daten enthält, die ich in den Report schreiben will.
Beim ersten Mal geht alles gut.

Schließe ich nun das Formular, rufe es erneut auf mit einem anderen Objekt auf, greift die CustomConnection immer noch auf die Daten des ersten objektes zu.

Dies habe ich nun umgangen, indem ich das Objekt vor dem OnCreate des Formulars setze und somit die CustomConnection auch auf das aktuelle Objekt zugreifet.

Nun ist aber immer noch das Problem, dass ich nach dem Beenden des Programms einen Task laufen habe der 100% CPU für sich beansprucht. Und dies liegt eindeutig der 2 oder mehrmaligen Erstellung des Reports mit verschiedenen Objekten.
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

Re: rave report: onRestore

  Alt 14. Nov 2005, 20:27
Hallo,

kannst du einem mal das Projekt (src+rav als PN-Anhang) zukommen lassen? so richtig vorstellen kann ichs mir nicht. Ob ich dir helfen kann, steht auch auf einem anderen Blatt, aber probieren könnte man es ja mal

Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:31 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