Locate in report Script

Hello all,

Is it possible to do a locate in report's script ?
I have a dataset : DS.
I initialize it with that line of code :
DS:=Report.GetDataset('Data');

And tried to do my locate with that code :
if DS.DataSet.Locate('CodeRubrique;mois', VarArrayOf([rub,i])) then
            begin
              ShowMessage('Msg : ' + VartoStr(DS.Value('valeur')));
              ShowMessage('Msg : Valeur n''est pas vide :' + VartoStr(DS.Value('valeur')));
              memo8a.Lines[0] := formatFloat('### ### ##0', DS.Value('valeur'));
              memo8b.Lines[0] := formatFloat('### ### ##0', DS.Value('ssvaleur'));

              DS.NEXT; // Enregistrement suivant
            end

I've tried to make my if statement like in the previous code but getting an error message :
" 'Dataset' is not declared. " (Probably not the exact message because I use it in French and translate it just for you [img]style_emoticons/<#EMO_DIR#>/wink.gif" style="vertical-align:middle" emoid=";)" border="0" alt="wink.gif" /> ) Then I've tried the same without .DataSet :[/img]
if DS.Locate('CodeRubrique;mois', VarArrayOf([rub,i])) then

I get the same error message for 'Locate'.



FYI, here is the entire code of the report :
// Parcours de la liste des champs d'une query Delphi
// Ne pas affecter de Dataset ?  la MasterDataBand
procedure Page1OnManualBuild(Sender: TfrxComponent);                                               
var DS: TfrxDataSet;
    i, lig, col : integer;
    rub : string;
begin
  //Chargement du DataSet en provenance de Delphi
  DS.First;      
end;

procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin

end;

procedure DetailData1OnBeforePrint(Sender: TfrxComponent);
var DS: TfrxDataSet;
    i, lig, col : integer;
    rub : string;                                  
begin
                                                          
  //Chargement du DataSet en provenance de Delphi                                                                                                                                                        
  DS:=Report.GetDataset('Data');  
  //MasterData1.RowCount := DS.RecordCount;        
  i := 0;    
                                   
  while not DS.Eof do
  begin
    rub := DS.Value('CodeRubrique');                              
    MemoCode.Lines[0] := DS.Value('CodeRubrique');
    MemoDesign.Lines[0] := DS.Value('LibelleRubrique');
    MemoUnit.Lines[0] := DS.Value('Unite');        

    for i := 1 to 12 do
    begin
      if rub = DS.Value('CodeRubrique') then
      begin
        case i of
          1:
          begin
            if DS.Value('mois') = i then
            begin                        
              memo1a.Lines[0] := formatFloat('### ### ##0', DS.Value('valeur'));
              memo1b.Lines[0] := formatFloat('### ### ##0', DS.Value('ssvaleur'));                 
              DS.NEXT; // Enregistrement suivant
            end;                                      
          end;                                   
          2:
          begin                      
            if DS.Value('mois') = i then
            begin
              memo2a.Lines[0] := formatFloat('### ### ##0', DS.Value('valeur'));
              memo2b.Lines[0] := formatFloat('### ### ##0', DS.Value('ssvaleur'));                 
              DS.NEXT; // Enregistrement suivant
            end;                               
          end;                                   
          3:
          begin                      
            if DS.Value('mois') = i then
            begin
              memo3a.Lines[0] := formatFloat('### ### ##0', DS.Value('valeur'));
              memo3b.Lines[0] := formatFloat('### ### ##0', DS.Value('ssvaleur'));                 
              DS.NEXT; // Enregistrement suivant
            end;                                
          end;                                   
          4:  
          begin                      
            if DS.Value('mois') = i then
            begin
              memo4a.Lines[0] := formatFloat('### ### ##0', DS.Value('valeur'));
              memo4b.Lines[0] := formatFloat('### ### ##0', DS.Value('ssvaleur'));                 
              DS.NEXT; // Enregistrement suivant
            end;                               
          end;                                   
          5:  
          begin                      
            if DS.Value('mois') = i then
            begin
              memo5a.Lines[0] := formatFloat('### ### ##0', DS.Value('valeur'));
              memo5b.Lines[0] := formatFloat('### ### ##0', DS.Value('ssvaleur'));                 
              DS.NEXT; // Enregistrement suivant
            end;                                
          end;                                   
          6:  
          begin                      
            if DS.Value('mois') = i then
            begin
              memo6a.Lines[0] := formatFloat('### ### ##0', DS.Value('valeur'));
              memo6b.Lines[0] := formatFloat('### ### ##0', DS.Value('ssvaleur'));                 
              DS.NEXT; // Enregistrement suivant
            end;                       
          end;                                   
          7:  
          begin                      
            if DS.Value('mois') = i then
            begin
              memo7a.Lines[0] := formatFloat('### ### ##0', DS.Value('valeur'));
              memo7b.Lines[0] := formatFloat('### ### ##0', DS.Value('ssvaleur'));                 
              DS.NEXT; // Enregistrement suivant
            end;                 
          end;                                   
          8:  
          begin                        
            if DS.DataSet.Locate('CodeRubrique;mois', VarArrayOf([rub,i])) then
            begin
              ShowMessage('Msg : ' + VartoStr(DS.Value('valeur')));
              ShowMessage('Msg : Valeur n''est pas vide :' + VartoStr(DS.Value('valeur')));
              memo8a.Lines[0] := formatFloat('### ### ##0', DS.Value('valeur'));
              memo8b.Lines[0] := formatFloat('### ### ##0', DS.Value('ssvaleur'));

              DS.NEXT; // Enregistrement suivant
            end
            else
            begin
              ShowMessage('Msg : Valeur EST VIDE !');  
            end;                        
                
          end;
          9:  
          begin
            if DS.Value('mois') = i then
            begin
              if DS.Value('valeur') <> '' then
              begin              
                memo9a.Lines[0] := formatFloat('### ### ##0', DS.Value('valeur'));
                memo9b.Lines[0] := formatFloat('### ### ##0', DS.Value('ssvaleur'));                  
                DS.NEXT; // Enregistrement suivant
              end;
            end;                                
//            else
//              memo9a.Lines[0] := '0';                                                                                                                              
          end;                                   
          10:  
          begin                      
            if DS.Value('mois') = i then
            begin
              memo10a.Lines[0] := formatFloat('### ### ##0', DS.Value('valeur'));
              memo10b.Lines[0] := formatFloat('### ### ##0', DS.Value('ssvaleur'));                 
              DS.NEXT; // Enregistrement suivant
            end;                 
          end;                                   
          11:    
          begin                      
            if DS.Value('mois') = i then
            begin
              memo11a.Lines[0] := formatFloat('### ### ##0', DS.Value('valeur'));
              memo11b.Lines[0] := formatFloat('### ### ##0', DS.Value('ssvaleur'));                 
              DS.NEXT; // Enregistrement suivant
            end;                               
          end;                                   
          12:  
          begin                      
            if DS.Value('mois') = i then
            begin
              memo12a.Lines[0] := formatFloat('### ### ##0', DS.Value('valeur'));
              memo12b.Lines[0] := formatFloat('### ### ##0', DS.Value('ssvaleur'));                 
              DS.NEXT; // Enregistrement suivant
            end;                       
          end;                                   
        end;                              
        //Memo3.Lines[0] := DS.Value('valeur');                                                                                                                                                                                                                                                                                                                       
      end
      else
        exit;                 

    end;        
    Engine.ShowBand(DetailData1);    //On force l'affichage du detailBand sinon, affichage de X ligne avec les donn?©es du dernier r?©sultat du DS

    DS.NEXT; // Enregistrement suivant
    //end;              
    //Memo3.Lines[0] := Memo3.Lines[0] + IntToStr(i);  
    //inc(i);
    // Acc??s aux donn?©es                                                      
    // Affectation des donn?©es au M?©mo3
    
//    MemoDesign.Lines[0] := DS.Value('LibelleRubrique');        
    //MemoCode.Text := DS.Value('CodeRubrique');
    //MemoDesign.Text := DS.Value('LibelleRubrique');              
         
//    DS.NEXT; // Enregistrement suivant                                                                                                                                           
  end;
end;

begin
      
end.

Comments

  • edited 1:41AM
    I've made a mistake on the locate's code part. I've tried to make the locate with these 2 lines of code (one after the other) :
    if DS.Locate('CodeRubrique;mois', VarArrayOf([rub,i], 0)) then
    ---------------------------------------------------------------------------------------------
    if DS.DataSet.Locate('CodeRubrique;mois', VarArrayOf([rub,i], 0)) then
    
  • For those interested :


    procedure chSDRMsupportOnBeforePrint(Sender: TfrxComponent);

    var sdrm:TfrxDBDataset;                                            

    begin

     sdrm:=TfrxDBDataset(Report.GetDataset('frxSDRM'));

     sdrm.Open;                       

     sdrm.Locate('uniqueobjectid',<frxMVEN."uniqueobjectid">,0);                                                                                                

    end;

    See : http://www.bytemaster.ru/?page_id=2026

Leave a Comment