Modifier contenu QRDBText par programmation [Résolu]

CharlEm80 66 Messages postés vendredi 1 septembre 2006Date d'inscription 1 août 2012 Dernière intervention - 8 mai 2012 à 11:49 - Dernière réponse : cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention
- 8 mai 2012 à 14:41
Bonjour les gens,

Encore frustration

Je sais récupérer et afficher un QRDBText dans un ETAT mais si par manque de chance la valeur en DB de ce champ est vide, j'aurais souhaité mettre 0 à la place pour ne pas laisser un trou dans la feuille que j'imprime.

J'ai essayé de jouer avec text (existe pas en Delphi), DataField et Caption.
Avec caption je trouve le nom du champ affiché sur mon ETAT et pas la valeur qui est affichée.

Comment faire?

Autre chose, si je met mon code dans FormCreate j'ai l'impression qu'il passe dedans avant de faire les appels DB et donc avant de garnir mes QRDBText. J'ai vu qu'il existe un FormActivate de mon ETAT mais il ne passe jamais dedans.

Si quelqu'un peut m'aider ça serait super sympa car j'ai l'impression de ramer dans le vide là


unit Unit8;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  QuickRpt, Qrctrls, Db, DBTables, ExtCtrls,IniFiles, uGLOBALE;

type
  TForm4 = class(TForm)
    QuickRep1: TQuickRep;
    DataSource1: TDataSource;
    Table1: TTable;
    DataSource2: TDataSource;
    Table2: TTable;
    QRSubDetail1: TQRSubDetail;
    ColumnHeaderBand1: TQRBand;
    DetailBand1: TQRBand;
    QRDBText1: TQRDBText;
    QRBand1: TQRBand;
    QRDBText2: TQRDBText;
    QRDBText3: TQRDBText;
    QRLabel1: TQRLabel;
    QRSysData1: TQRSysData;
    QRDBText4: TQRDBText;
    QRDBText5: TQRDBText;
    QRLabel2: TQRLabel;
    QRLabel3: TQRLabel;
    Table3: TTable;
    DataSource3: TDataSource;
    QRDBText6: TQRDBText;
    QRDBText7: TQRDBText;
    QRDBText8: TQRDBText;
    procedure FormActivate(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
  index_voulu:longint;
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation
{$R *.DFM}

procedure TForm4.FormActivate(Sender: TObject);
begin
table2.filter:='Index='+inttostr(index_voulu);
table2.filtered:=true;
  {<<< Ajout - 08/05/2012: Bug 4530}
  case zS_Service of
    'A':
         if trim(QRDBText6.Caption) = '' then
           QRDBText6.Caption := 'Non connu';
    'B':
         if trim(QRDBText7.Caption) = '' then
           QRDBText7.Caption := 'Non connu';
    'D':
         if trim(QRDBText8.Caption) = '' then
           QRDBText8.Caption := 'Non connu';
  {>>> Ajout - 08/05/2012: Bug 4530}
end;
end;

procedure TForm4.FormCreate(Sender: TObject);

begin
  {Modification - 22/02/2010: Bug 2634}
  {Modification permettant de s'affranchir d'une variable de type TIniFile}
  {le tout en toute sécurité}
  with Tinifile.Create(ExtractFilePath(Application.ExeName) +  'USI.ini') do
  try
    {Lecture dans fichier ini}
    {et récupération du premier caractère en majuscule}
    zS_Service := UpCase(ReadString('USI_PARAMETRES', 'Unit', '')[1]);
  finally
    {ici on libère l'objet même en cas d'erreur}
    free;
  end;
  if zS_Service <> '' then
    Qrlabel1.caption := 'Relevé contradictoire des quantités de stupéfiants en stock - Service ' + zS_Service
  else
    Qrlabel1.caption := 'Relevé contradictoire des quantités de stupéfiants en stock - ERREUR SERVICE';
  {<<< Ajout - 26/04/2012: Bug 4530}
  case zS_Service of
    'A':
         begin
            QRDBText7.Enabled := False;
            QRDBText8.Enabled := False;
            if trim(QRDBText6.caption) = '' then
            begin
                QRDBText6.caption := 'Non connu';
            end;
         end;
    'B':
         begin
            QRDBText6.Enabled := False;
            QRDBText8.Enabled := False;
            if trim(QRDBText7.Caption) = '' then
            begin
                QRDBText7.Caption := 'Non connu';
            end;
         end;
    'D':
         begin
            QRDBText6.Enabled := False;
            QRDBText7.Enabled := False;
            if trim(QRDBText8.Caption) = '' then
            begin
                QRDBText8.Caption := 'Non connu';
            end;
         end;
  else
    begin
      QRDBText6.Caption := 'Erreur';
    end;
  end;
  {>>> Ajout - 26/04/2012: Bug 4530}
end;
end.

Afficher la suite 

4 réponses

Répondre au sujet
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 8 mai 2012 à 13:21
+3
Utile
Bonjour la Belgique,

si tu es en DB, tu peux que qu'afficher les données de la table et rien d'autres.
à partir de ce postulat, tu peux néanmoins :
traiter les données vides de la table et les remplacer par des zéros (au moment du post par exemple)

soit une petite astuce consistant à poser un champ QRText par dessus le champ QRDB et tester la valeur du DB :

si nulle alors on fait passer au second plan le DB et on affiche le QR avec zéro stocké dedans
si non alors on fait passer devant le DB avec la valeur stockée dans la table

cantador
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_cantador
CharlEm80 66 Messages postés vendredi 1 septembre 2006Date d'inscription 1 août 2012 Dernière intervention - 8 mai 2012 à 13:24
0
Utile
Haaaaa c'est donc pour ça, merci

Bonne idée pour le QRText, je vais essayer tout ça
Commenter la réponse de CharlEm80
CharlEm80 66 Messages postés vendredi 1 septembre 2006Date d'inscription 1 août 2012 Dernière intervention - 8 mai 2012 à 14:15
0
Utile
Bonjour monsieur Hans Langseth

Mon problème est que je passe dans le code ci dessus uniquement au moment où je fais PLAY de mon projet et pas quand j'appuie sur le bouton 'générer mon ETAT' pendant l'exécution du code.

Mais mon code est dans
procedure TForm4.FormCreate(Sender: TObject);

je suppose que tous les FormCreate sont appelé au lancement du projet.

P.S.: j'ai trouvé un champ QRLabel ça devrait faire l'affaire aussi?

Merci
Commenter la réponse de CharlEm80
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 8 mai 2012 à 14:41
0
Utile
Salut,

2 solutions pour le qrDBText:

1. Utiliser l' événement onPrint (variable Value).

2. Utiliser le DisplayFormat (ou le OnGetText) du champ.

A+



Composants Cindy pour Delphi
Faites une donation.
Commenter la réponse de cs_MAURICIO

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.