Newsgroup: it.comp.lang.delphi
Titolo: Conversione report

Salve a tutti!
Sto convertendo (o meglio, cercando di convertire) dei report da
Delphi1 a Delphi5.
Queste si appoggiano su tabbelle Paradox.
Lavorando sulla stampa di un totlizzatore ho riscontrato il seguente
problema:
In delphi1 era presente un componente chiamato TQRDBCalc in cui veniva
calcolato e visualizzato il totale dei vari record di un campo della
tabella.
Nel codice veniva così impostato:
{ Carica intestazione e nomeCampo}
TQRDBCalc(FindComponent('DBC_tot'+IntToStr(i))).DataField := NomeCampo;
e l'evento OnPrint dello stesso oggetto era il seguente:
Procedure TRPT_REPTOT.DecodTotali(sender: TObject; var Value:
OpenString);
var
  i: integer;
begin
  if Value <> '' then
    begin
        i := EstraiNumDaStr(TQRDBText(Sender).DataField); {Ritorna
Numero Totalizzatore}
        if i <> -1 then begin
            Value := IntToStr(Tot[i].TotValori);
            Value := Minuti_Time(StrToInt(Value) ,
Tot[i].CalcOreGiorni);
        end;
        if Value = '0' then Value := '';
    end;
end;
 { End Decodifica Valori campi}
In delphi5, non esiste più il componente TQRDBCalc ed è stato
sostituito con un TQRExpr.
L'errore che mi segnala è un' "Access violation" e mi segnala la
seguente riga dell'evento OnPrint:
       i := EstraiNumDaStr(TQRDBText(Sender).DataField);
questo perchè il nuovo componente non contiene la proprietà
DataField.
Esso però possiede la proprietà Expression che è valorizzata nel
seguente modo :
   SUM('NOMETABELLA'.)
Lanciando la stampa non viene visualizzato (ovviamente) nessun valore.
E' giusto il valore della proprietà Expression?
Quali modifiche bisogna fare nel codice?
insomma...come uscire da questo pasticcio?? :)
Spero di essere stato chiaro!
Saluti!
  Stefano




Ciao,
considera la possibilità di riscrivere i report da capo utilizzando 
strumenti più moderni.
Come nel tuo caso, quando le differenze di versione sono troppo grandi è 
molto meglio
riscrivere tutto da zero con strumenti, tecnologie ed approcci più moderni 
ed efficienti...
... alla fine secondo me, risparmierai notevolmente anche un bel po' di 
tempo.
Ciao,
Riccardo
-- 
* Immolo - Motore di ricerca per annunci immobiliari
* web: 
http://www.immolo.it

Come mi piacerebbe.......se l'azienda fosse la mia !!!
Grazie! ;-)
Bye
  Stefano

>  SUM('NOMETABELLA'.)
Forse come parametro al sum sarebbe opportuno passare il nome di un
campo numerico.....Quella espressione non significa un vero.. TUBO con
la "c" maiuscola.... :-/
AS

Problema Risolto!
Era necessario sostituire la riga
    TQRDBCalc(FindComponent('DBC_tot'+IntToStr(i))).DataField :=
NomeCampo;
con
   TQRExpr(FindComponent('NOMETQRExpr'+IntToStr(i))).Expression :=
'SUM('+ TB.Name +'.'+ NomeCampo+')';
e nell'evento OnPrint sostituire
   i := EstraiNumDaStr(TQRDBText(Sender).DataField);
con
   i := EstraiNumDaStr(TQRExpr(Sender).Expression);
Tutto questo perchè, come avevo già detto, il componente TQRDBCalc
non esiste più in Delphi5 ed è stato sostituito con un TQRExpr, il
quale non possiede la proprietà DataField ma la proprietà Expression
in cui possono essere inseriti espressioni aritmetiche oppure, appunto,
campi di tabelle. 
Saluti!
  Stefano