IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Problème de déclaration


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut Problème de déclaration
    Bonjour à tous,

    J'ai un petit problème de déclaration... Voilà j'ai un DBGrid qui m'affiche des cases à cocher soit cochées soit non cochées en fonction d'un paramètre... A la base j'avais mis cette procédure dans mon évènement double clic de mon DBGrid. Cependant suite à des traitements de modification j'aimerai pouvoir rappeler cette procédure pour rafraichir mon affichage je l'ai donc mise dans une nouvelle unité. Mais je n'arrive pas à utiliser ma variable imgCheck je ne sais pas ce que j'ai oublié de déclarer voici mon appel de fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TMainForm.DBGridScanDrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
    
    AfficheCaseSav(Rect,Column, DBGridScan, DmImages, imgCheck)
    ...
    Et voici mon unité où mon imgCheck est un identificateur non déclaré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    unit UnitCaseCoche;
    
    interface
    
    Uses
      Windows,
      Messages,
      SysUtils,
      Classes,
      Graphics,
      Controls,
      Forms,
      Dialogs,
      OleCtrls,
      REMOTEPWCTRLLib_TLB,
      StdCtrls,
      ExtCtrls,
      ComCtrls,
      DBTables,
      Math,
      Menus,
      ScktComp,
      Oracle,
      DB,
      OracleData,
      ImgList,
      Grids,
      DBGrids,
      Buttons;
    
    procedure AfficheCaseSav(const Rect: TRect; Column : TColumn; DBGridScan : TDBGrid; DmImages: TDataModule; imgCheck : TImageList);
    
    implementation
    
    uses
    UnitMonDataModule;
    
    
    procedure AfficheCaseSav(const Rect: TRect; Column : TColumn; DBGridScan : TDBGrid; DmImages:TDataModule; imgCheck : TImageList);
    begin
    if sameText(Column.FieldName, 'SAV') then
      begin
      { On efface la cellule }
      DBGridScan.Canvas.FillRect(Rect);
      { Si Cochée}
      if DBGridScan.Fields[3].AsString = '0' then
      begin
        DmImages.imgCheck.Draw(DBGridScan.Canvas,
        rect.Left + ((rect.Right - rect.Left - DmImages.imgCheck.Width) div 2),
        rect.Top,
        1);
      end
      { sinon pas coché }
      else
      begin
        DmImages.imgCheck.Draw(DBGridScan.Canvas,
        rect.Left + ((rect.Right - rect.Left - DmImages.imgCheck.Width) div 2),
        rect.Top,
        0);
      end;
    end
    { si column ne correspond pas à une case à cocher, }
    { on ne s'occupe pas du dessin de la cellule, on }
    { transmet donc à DefaultDrawColumnCell }
    else
    begin
      DBGridScan.DefaultDrawColumnCell(rect, datacol, column, state);
    end;
    
    
    end.
    Sachant que mon imgCheck est déclarée dans un data module que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    unit UnitMonDataModule;
    
    interface
    
    uses
      SysUtils, Classes, ImgList, Controls;
    
    type
      TDmImages = class(TDataModule)
        imgCheck: TImageList;
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    
    var
      DmImages: TDmImages;
    
    implementation
    
    {$R *.dfm}
    
    end.
    SVP qu'ai-je pu oublier ??

    Merci d'avance

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    1- Très mais très mauvaise idée d'avoir une variable "globale" et une variable de fonction qui ont le même nom. Ne serait ce que pour la personne qui pourrait passer derrière.

    2-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AfficheCaseSav(Rect,Column, DBGridScan, DmImages, DmImages.imgCheck)
    [edit]
    Et, en regardant ton code, en fait, elle ne sert strictement à rien ta variable de procédure ImgCheck, vu que tu fais appels tout le temps à
    DmImages.imgCheck
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    Tu veux dire changer el nom de mes variables dans ma nouvelle unité dans la déclaration de ma procédure c'est ça ?

    Ok pour l'appel de la procédure et je les déclare comment dans ma procédure ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure AfficheCaseSav(const Rect: TRect; Column : TColumn; DBGridScan : TDBGrid; DmImages.imgCheck: TDataModule);
    Est ce qu'il n'existerait pas sinon une sorte de ExecuteTraitement(DBGrid.DblClick...) ???

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Citation Envoyé par juju1988 Voir le message
    Tu veux dire changer el nom de mes variables dans ma nouvelle unité dans la déclaration de ma procédure c'est ça ?
    En général on évite d'avoir des noms identiques ça évite la confusion

    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procedure AfficheCaseSav(const ARect: TRect; AColumn : TColumn; ADBGridScan : TDBGrid; ADmImages:TDataModule; AimgCheck : TImageList);

    Citation Envoyé par juju1988 Voir le message
    Ok pour l'appel de la procédure et je les déclare comment dans ma procédure ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure AfficheCaseSav(const Rect: TRect; Column : TColumn; DBGridScan : TDBGrid; DmImages.imgCheck: TDataModule);
    En fait, tu as beaucoup de chose inutile dans ta procédure

    soit tu veux du générique et donc passer le DM ne sert plus à rien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    proocedure AfficheCaseSav(const ARect: TRect; AColumn : TColumn; ADBGridScan : TDBGrid; AimgCheck : TImageList);
    begin
    if sameText(AColumn.FieldName, 'SAV') then
      begin
      { On efface la cellule }
      ADBGridScan.Canvas.FillRect(Rect);
      { Si Cochée}
      if ADBGridScan.Fields[3].AsString = '0' then
      begin
        AimgCheck.Draw(ADBGridScan.Canvas,
        Arect.Left + ((Arect.Right - Arect.Left - AimgCheck.Width) div 2),
        Arect.Top,
        1);
      end
      { sinon pas coché }
      else
      begin
        AimgCheck.Draw(ADBGridScan.Canvas,
        Arect.Left + ((Arect.Right - Arect.Left - AimgCheck.Width) div 2),
        Arect.Top,
        0);
      end;
    end
    { si column ne correspond pas à une case à cocher, }
    { on ne s'occupe pas du dessin de la cellule, on }
    { transmet donc à DefaultDrawColumnCell }
    else
    begin
      ADBGridScan.DefaultDrawColumnCell(Arect, datacol, Acolumn, state);
    end;
    Soit tu n'as pas besoin d'être générique et l'utilisation du paramètres ImgCheck ne sert à rien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    procedure AfficheCaseSav(const Rect: TRect; Column : TColumn; DBGridScan : TDBGrid; DmImages:TDataModule);
    begin
    if sameText(Column.FieldName, 'SAV') then
      begin
      { On efface la cellule }
      DBGridScan.Canvas.FillRect(Rect);
      { Si Cochée}
      if DBGridScan.Fields[3].AsString = '0' then
      begin
        DmImages.imgCheck.Draw(DBGridScan.Canvas,
        rect.Left + ((rect.Right - rect.Left - DmImages.imgCheck.Width) div 2),
        rect.Top,
        1);
      end
      { sinon pas coché }
      else
      begin
        DmImages.imgCheck.Draw(DBGridScan.Canvas,
        rect.Left + ((rect.Right - rect.Left - DmImages.imgCheck.Width) div 2),
        rect.Top,
        0);
      end;
    end
    { si column ne correspond pas à une case à cocher, }
    { on ne s'occupe pas du dessin de la cellule, on }
    { transmet donc à DefaultDrawColumnCell }
    else
    begin
      DBGridScan.DefaultDrawColumnCell(rect, datacol, column, state);
    end;

    Citation Envoyé par juju1988 Voir le message
    Est ce qu'il n'existerait pas sinon une sorte de ExecuteTraitement(DBGrid.DblClick...) ???
    Si, il te suffit d'appeler directement la fonction DbGridDblClick(...[Remplir les paramètres] ...) directement
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    C'est bon j'ai tout repris bien comme il faut et normalement c'est nickel en tout cas le code passe
    Merci pour ton aide.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    unit UnitCaseCoche;
     
    interface
     
    Uses
      Windows,
      Messages,
      SysUtils,
      Classes,
      Graphics,
      Controls,
      Forms,
      Dialogs,
      OleCtrls,
      REMOTEPWCTRLLib_TLB,
      StdCtrls,
      ExtCtrls,
      ComCtrls,
      DBTables,
      Math,
      Menus,
      ScktComp,
      Oracle,
      DB,
      OracleData,
      ImgList,
      Grids,
      DBGrids,
      Buttons;
     
    procedure AfficheCaseSav(const Rectangle: TRect; maCol : TColumn; monDB : TDBGrid; monJeuDImages : TImageList; colData : Integer; monEtat : TGridDrawState);
     
    implementation
     
    uses
    UnitMonDataModule;
     
     
     
    procedure AfficheCaseSav(const Rectangle: TRect; maCol : TColumn; monDB : TDBGrid; monJeuDImages : TImageList; colData : Integer; monEtat : TGridDrawState);
    begin
    if sameText(maCol.FieldName, 'SAV') then
      begin
      { On efface la cellule }
      monDB.Canvas.FillRect(Rectangle);
      { Si Cochée}
        if monDB.Fields[3].AsString = '0' then
          begin
          monJeuDImages.Draw(monDB.Canvas,
          Rectangle.Left + ((Rectangle.Right - Rectangle.Left - monJeuDImages.Width) div 2),
          Rectangle.Top,
          1);
          end
          { sinon pas coché }
        else
          begin
          monJeuDImages.Draw(monDB.Canvas,
          Rectangle.Left + ((Rectangle.Right - Rectangle.Left - monJeuDImages.Width) div 2),
          Rectangle.Top,
          0);
        end;
      end
      { si column ne correspond pas à une case à cocher, }
      { on ne s'occupe pas du dessin de la cellule, on }
      { transmet donc à DefaultDrawColumnCell }
    else
      begin
        monDB.DefaultDrawColumnCell(Rectangle, colData, maCol, monEtat);
      end;
    end;
    end.

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 096
    Par défaut
    Quelques propositions de Reduction du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    procedure AfficheCaseSav(const Rectangle: TRect; maCol : TColumn; monDB : TDBGrid; monJeuDImages : TImageList; colData : Integer; monEtat : TGridDrawState);
    begin
      if sameText(maCol.FieldName, 'SAV') then
      begin
        { On efface la cellule }
        ADBGrid.Canvas.FillRect(Rectangle);
        { Cochée ou Pas ?}
        monJeuDImages.Draw(monDB.Canvas,
          Rectangle.Left + ((Rectangle.Right - Rectangle.Left - monJeuDImages.Width) div 2),
          Rectangle.Top,
          Ord(monDB.Fields[3].AsString = '0')
        );
      end
      { si column ne correspond pas à une case à cocher, }
      { on ne s'occupe pas du dessin de la cellule, on }
      { transmet donc à DefaultDrawColumnCell }
      else
      begin
        monDB.DefaultDrawColumnCell(Rectangle, colData, maCol, monEtat);
      end;
    end;
    note l'utilisation de Ord, pour éviter la duplication de code, Ord(True) = 1 et Ord(False) = 0
    tu peux aussi replacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ord(monDB.Fields[3].AsString = '0')
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IfThen(monDB.Fields[3].AsString = '0', 1, 0)
    Enfin pour dessiner des cases à cocher, tu n'as même pas besoin d'avoir une ImageList, un DrawFrameControl suffit



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    procedure AfficheCaseSav(const Rectangle: TRect; maCol : TColumn; monDB : TDBGrid; colData : Integer; monEtat : TGridDrawState);
    var
      FrameRect: TRect;
    begin
      if sameText(maCol.FieldName, 'SAV') then
      begin
        { On efface la cellule }
        monDB.Canvas.FillRect(Rectangle);
        { Centrage }
        FrameRect.Left := Rectangle.Right - Rect.Left - 13) div 2;
        FrameRect.Top := Rectangle.Bottom - Rect.Top - 13) div 2;
        FrameRect.Right := FrameRect.Left + 13;
        FrameRect.Bottom := FrameRect.Top + 13;
        { Cochée ou Pas ?}
        if monDB.Fields[3].AsString = '0' then
          DrawFrameControl(monDB.Canvas.Handle, FrameRect, DFC_BUTTON,
            DFCS_BUTTONCHECK or DFCS_CHECKED)
        else
          DrawFrameControl(monDB.Canvas.Handle, FrameRect, DFC_BUTTON,
            DFCS_BUTTONCHECK);
      end
      { si column ne correspond pas à une case à cocher, }
      { on ne s'occupe pas du dessin de la cellule, on }
      { transmet donc à DefaultDrawColumnCell }
      else
      begin
        monDB.DefaultDrawColumnCell(Rectangle, colData, maCol, monEtat);
      end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    Super Shai pour la réduction de code c'est nickel !!
    Tu crois qu'il vaut mieux que je passe par le DrawFrameControl ? Parce que du coup le code est plus long non ?

  8. #8
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 096
    Par défaut
    Si tu utilises des images avec un design particulier, reste en ImageList
    Si tes images ne sont ni plus ni moins que l'aspect d'une CheckBox, autant utiliser DrawFrameControl qui dessinera la CheckBox en fonction du Theme 2K, XP ou Vista
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    Ce sont des images .bmp une cochée et une décochée rien de plus. Ok je regarderai le Frame alors
    Merci

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    J'ai encore une question je ne pense pas être dans la bonne démarche. Je veux donc appeler ma procédure AfficheCaseCoche pour mettre à jour mon DBGrid après une mise à jour cependant cela veut dire qu'il faut sans cesse que je déclare les variables donc a besoin ma procédure comme Column, Rect... je ne trouve pas ça correct si on peut dire. Ma démarche n'est peut être pas la bonne... Comment puis-je faire ?

    Voici mon code où j'appelle la procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    // Ajout ou Modif d'un SAV pour un scan donné
    procedure TFrmAjoutSAV.btnOkClick(Sender: TObject);
    var
      nomDuScan : String;
      nextval : integer;
      Rect : TRect;
      Column : TColumn;
      DataCol : Integer;
      state : TGridDrawState;
    begin
    nomDuScan := '';
    nomDuScan := lblNomScan.Caption;
    //nextval := RechercheValSuivante(oqRechercheNextVal);
    
    //Ajout d'un SAV
    if typeModif = 'Ajout' then
      begin
      oqAjoutSav.Close;
      oqAjoutSav.SQL.Clear;                                                                                             // SEQ_NUMSUIVI permet de récupérer le numéro de suivi suivant relatif à la table SUIVISAV
                                                                                                                       // mais possible grâce à une séquence Oracle SEQ_NUMSUIVI qui s'auto-incrémente
      oqAjoutSav.SQL.Add('INSERT INTO suivisav (numsuivi, numrma, datedepart, dateretour, nomscan, commentaire) VALUES (SEQ_NUMSUIVI.NEXTVAL, :numerorma, :datededepart, :datederetour, :lenomscan, :com)');
      //oqAjoutSav.DeclareAndSet('numerosuivi', otInteger, nextval);
      oqAjoutSav.DeclareAndSet('numerorma', otString, zsNumRma.Text);
      oqAjoutSav.DeclareAndSet('datededepart', otString, zsDateDep.Text);
      oqAjoutSav.DeclareAndSet('datederetour', otString, zsDateRetour.Text);
      oqAjoutSav.DeclareAndSet('lenomscan', otString, nomDuScan);
      oqAjoutSav.DeclareAndSet('com', otString, zsCommentaires.Text);
      oqAjoutSav.Execute;
      oqAjoutSav.Session.Commit;
    
    
      FrmHistoSav.OracleDataSetHisto.Close;
      FrmHistoSav.OracleDataSetHisto.SQL.Clear;
      FrmHistoSav.OracleDataSetHisto.SQL.Text := 'SELECT numsuivi, nomscan, numrma, datedepart, dateretour, commentaire FROM suivisav WHERE nomscan = :nomduscan';
      FrmHistoSav.OracleDataSetHisto.DeclareAndSet('nomduscan', otString, nomDuScan);
      FrmHistoSav.DataSourceHisto.DataSet := FrmHistoSav.OracleDataSetHisto;
      FrmHistoSav.DBGridHisto.DataSource := FrmHistoSav.DataSourceHisto;
      FrmHistoSav.OracleDataSetHisto.Open;
    
      zsNumRma.Text := '';
      zsCommentaires.Text := '';
      zsDateDep.Text := '  /  /    ';
      zsDateRetour.Text := '  /  /    ';
      end
      //Modif d'un SAV, saisie d'une date de retour...
    else if typeModif = 'Modif' then
      begin
      oqModifSav.Close;
      oqModifSav.SQL.Clear;
                       //   'UPDATE adresseip SET adrip = :nvAddIP, nomscan = :lenomduscan WHERE adrip = :adrIP');
      oqModifSav.SQL.Add('UPDATE suivisav SET numrma = :nvrma, datedepart = :nvdepart, dateretour = : nvretour, commentaire = :nvcommentaire WHERE nomscan = :nvscan');
      oqModifSav.DeclareAndSet('nvrma', otString, zsNumRma.Text);
      oqModifSav.DeclareAndSet('nvdepart', otString, zsDateDep.Text);
      oqModifSav.DeclareAndSet('nvretour', otString, zsDateRetour.Text);
      oqModifSav.DeclareAndSet('nvcommentaire', otString, zsCommentaires.Text);
      oqModifSav.DeclareAndSet('nvscan', otString, nomDuScan);
      oqModifSav.Execute;
      oqModifSav.Session.Commit;
    
    
        FrmHistoSav.OracleDataSetHisto.Close;
      FrmHistoSav.OracleDataSetHisto.SQL.Clear;
      FrmHistoSav.OracleDataSetHisto.SQL.Text := 'SELECT numsuivi, nomscan, numrma, datedepart, dateretour, commentaire FROM suivisav WHERE nomscan = :nomduscan';
      FrmHistoSav.OracleDataSetHisto.DeclareAndSet('nomduscan', otString, nomDuScan);
      FrmHistoSav.DataSourceHisto.DataSet := FrmHistoSav.OracleDataSetHisto;
      FrmHistoSav.DBGridHisto.DataSource := FrmHistoSav.DataSourceHisto;
      FrmHistoSav.OracleDataSetHisto.Open;
    
      zsNumRma.Text := '';
      zsCommentaires.Text := '';
      zsDateDep.Text := '  /  /    ';
      zsDateRetour.Text := '  /  /    ';
    
    
      AfficheCaseSav(Rect,Column, MainForm.DBGridScan, DmImages.imgCheck, DataCol, state);
      end;
    end;
    En effet sans déclaration avec un uses UnitCaseCoche cela me met des erreurs :
    - Aucune version surchargée de Rect ne peut être appelée avec ces arguments
    - Identificateur non déclaré DataCol

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Inclusion de classes / problème de déclaration
    Par scal-80 dans le forum C++
    Réponses: 5
    Dernier message: 21/06/2006, 16h28
  2. Réponses: 2
    Dernier message: 27/05/2006, 12h13
  3. problème de déclaration
    Par dirty_boy dans le forum C
    Réponses: 2
    Dernier message: 16/09/2005, 11h56
  4. Réponses: 11
    Dernier message: 29/04/2005, 19h45
  5. Problème de déclaration de segment avec use32
    Par le mage tophinus dans le forum Assembleur
    Réponses: 2
    Dernier message: 10/01/2003, 10h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo