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

Bases de données Delphi Discussion :

[DELPHI6 | Procedure Stocke] A quoi correspond la syntaxe Param[01-1].Name='@valeur'


Sujet :

Bases de données Delphi

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut [DELPHI6 | Procedure Stocke] A quoi correspond la syntaxe Param[01-1].Name='@valeur'
    Bonjour,

    Actuellement j'effectue l'analyse d'un code sous Delphi 6, et je n'arrive pas à comprendre une syntaxe dans une procedure stocké.

    J'ai la déclaration d'un paramètre

    Ensuite j'ai la création du paramètre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    P1 := TParam.create(Params, PtInput)
    Et la j'ai cette définition dont je ne comprend pas bien la syntaxe et surtout l'utilité???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Param[01-1].name:='@IdtBarFil';
    Je ne sais pas à quoi cela fait référence et à quoi ca sert.

    Si qqn a une idée?

    ++

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 453
    Points : 24 864
    Points
    24 864
    Par défaut
    Params est membre de quel objet ?
    un with ne trainerait pas avant ?

    Param et Params ?
    Deux objets différents ?
    Param est un TParams ?

    01-1 c'est un calcul non ? par de guillemets ?
    Donc si Param est un TParams

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Param[01-1].name:='@IdtBarFil';
    correspond à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Param.Items[01-1].name:='@IdtBarFil';
    Et si 01-1 est un calcul, on peut penser à 01 comme paramètre P1 et -1 pour rétablir l'indice de 0 à n-1 et non un indice en 1 à n, ça donne 0 donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Param.Items[0].name:='@IdtBarFil';
    Et si P1 est le premier item à être créé et donc ajouter à Param, on peut écrire tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    P1.name:='@IdtBarFil';
    L'utilité est très discutable, l'utilisation d'une constante comme "INDEX_PARAM_UN = 0" aurait été plus judicieux si ton prédécesseur voulait faciliter la lecture du code et la gestion des indices
    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

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    bonjour

    et merci pour ta réponse

    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    Function BarreCreer ( Don :StrBar; NumZon, NumLgn, NumCol : Integer ; NomVue, NomUtl, NomPoste : String) : Boolean;
    Var
      I  : Integer;
      CrFin : Integer;
      CrErr : Integer;
      CrRet : Integer;
      P1 : TParam;
      P2 : TParam;
      P3 : TParam;
      P4 : TParam;
      P5 : TParam;
      P6 : TParam;
      P7 : TParam;
      P8 : TParam;
      P9 : TParam;
      P10 : TParam;
      P11 : TParam;
      P12 : TParam;
      P13 : TParam;
      P14 : TParam;
      P15 : TParam;
      P16 : TParam;
      P17 : TParam;
      P18 : TParam;
      P19 : TParam;
      P20 : TParam;
      P21 : TParam;
      P22 : TParam;
      P23 : TParam;
      P24 : TParam;
      P25 : TParam;
      P26 : TParam;
      P27 : TParam;
      P28 : TParam;
      P29 : TParam;
      P30 : TParam;
      P31 : TParam;
      P32 : TParam;
      P33 : TParam;
      P34 : TParam;
      ValSInt : Variant;
    Begin
     
      Result := False;
     
      //------------------------------------
      // Si On n'arrive pas à ouvrir la base
      //------------------------------------
      If Not OuvBdr Then Begin
        ErrSys( NivGra, 'BarreCreer', 'Accès base HS -> BarreCreer !', 0, DstMsg );
        //mémoriser que le lien avec la base n'est pas bon
        FlgAccesBase := False;
        Exit;
      End;
     
     
      with Prc do begin
        StoredProcName := 'PROBarreCreer;1';
        Params.Clear;
        P1  := TParam.Create(Params, ptOutput);
     
        P2  := TParam.Create(Params, ptInput);
        P3  := TParam.Create(Params, ptInput);
        P4  := TParam.Create(Params, ptInput);
        P5  := TParam.Create(Params, ptInput);
        P6  := TParam.Create(Params, ptInput);
        P7  := TParam.Create(Params, ptInput);
        P8  := TParam.Create(Params, ptInput);
        P9  := TParam.Create(Params, ptInput);
        P10 := TParam.Create(Params, ptInput);
        P11 := TParam.Create(Params, ptInput);
        P12 := TParam.Create(Params, ptInput);
        P13 := TParam.Create(Params, ptInput);
        P14 := TParam.Create(Params, ptInput);
        P15 := TParam.Create(Params, ptInput);
        P16 := TParam.Create(Params, ptInput);
        P17 := TParam.Create(Params, ptInput);
        P18 := TParam.Create(Params, ptInput);
        P19 := TParam.Create(Params, ptInput);
        P20 := TParam.Create(Params, ptInput);
     
        //définition des paramètres en sortie au cas où la Fonction RETURN serait utilisée dans la procédure SQL
        P21 := TParam.Create(Params, ptResult);
     
        try
          Params[01-1].Name := '@Err';
          Params[02-1].Name := '@NumCou';
          Params[03-1].Name := '@NumRng';
          Params[04-1].Name := '@LetMcg';
          Params[05-1].Name := '@EtaBar';
          Params[06-1].Name := '@NumInd';
          Params[07-1].Name := '@TypBar';
          Params[08-1].Name := '@PriEch';
          Params[09-1].Name := '@DstBar';
          Params[10-1].Name := '@ComBar';
          Params[11-1].Name := '@NumMtg';
          Params[12-1].Name := '@IdtOL';
          Params[13-1].Name := '@IdtBloom';
     
          Params[14-1].Name := '@NumZone';
          Params[15-1].Name := '@Ligne';
          Params[16-1].Name := '@Colonne';
     
          Params[17-1].Name := '@Mode';
          Params[18-1].Name := '@NomVue';
          Params[19-1].Name := '@NomUtl';
          Params[20-1].Name := '@NomPoste';
     
          //définition des paramètres en sortie au cas où la Fonction RETURN serait utilisée dans la procédure SQL
          Params[21-1].Name := 'Return';
     
          //variables en sortie
          ParamByName( '@Err' ).AsInteger        := 0;
     
          //variables en entrée
          ParamByName( '@NumCou' ).AsString      := Don.NumCou;
          ParamByName( '@NumRng' ).AsInteger     := Don.NumRng;
          ParamByName( '@LetMcg' ).AsString      := Don.LetMcg;
          ParamByName( '@EtaBar' ).AsInteger     := Don.EtaBar;
          ParamByName( '@NumInd' ).AsInteger     := Don.NumInd;
          ParamByName( '@TypBar' ).AsInteger     := Don.Typ;
          ParamByName( '@PriEch' ).AsInteger     := Don.PriEch;
          ParamByName( '@DstBar' ).AsInteger     := 0;
          ParamByName( '@ComBar' ).AsString      := Don.Com;
          ParamByName( '@NumMtg' ).AsString      := Don.NumMtg;
          ParamByName( '@IdtOL' ).AsInteger      := Don.IdtOL;
          ParamByName( '@IdtBloom' ).AsInteger   := Don.IdtBloom;
     
          ParamByName( '@NumZone' ).AsInteger    := NumZon;
          ParamByName( '@Ligne' ).AsInteger      := NumLgn;
          ParamByName( '@Colonne' ).AsInteger    := NumCol;
     
     
          //définition des paramètres non obligatoire
          ParamByName( '@Mode' ).AsInteger       := 0;
          ParamByName( '@NomVue' ).AsString      := NomVue;
          ParamByName( '@NomUtl' ).AsString      := NomUtl;
          ParamByName( '@NomPoste' ).AsString    := NomPoste;
     
          //définition des paramètres en sortie au cas où la Fonction RETURN serait utilisée dans la procédure SQL
          ParamByName( 'Return' ).AsInteger    := 0;
     
          ExecProc;
     
          //récupération des compte rendus
          CrErr := ParamByname('@Err').AsInteger;
          CrRet := ParamByname('Return').AsInteger;
     
          //si une erreur dans le traitement
          If (CrErr <> 0) Then
          Begin
           //tracer le compte rendu
           ErrSys( NivGra, 'BarreCreer', 'ERREUR sur modification des infos d''une barre CrErr = ' + IntToStr(CrErr) + '.', 0, DstMsg );
          End
          Else
          Begin
           //tracer le compte rendu
           ErrSys( NivFil, 'BarreCreer', 'La barre à été créée.', 0, DstMsg );
          End;
     
        Finally
          P1.Free;
          P2.Free;
          P3.Free;
          P4.Free;
          P5.Free;
          P6.Free;
          P7.Free;
          P8.Free;
          P9.Free;
          P10.Free;
          P11.Free;
          P12.Free;
          P13.Free;
          P14.Free;
          P15.Free;
          P16.Free;
          P17.Free;
          P18.Free;
          P19.Free;
          P20.Free;
          P21.Free;
     
    (*
        Except
          on E: Exception do
          Begin
            //tracer l'évènement
            Prc.Close;
            ErrSys( NivGra, 'BarreCreer', 'BarreCreer Except : ' + E.Message , 0, DstMsg );
          End;
    *)
       End;
     
      end;
     
     
      //----------------------
      // On ferme la procedure
      //----------------------
      Prc.Close;
      FerBdr();
     
      Result := True;
     
    End;
    J'ai copié la fonction complète c'est plus simple et ca m'évitera les fautes de frappe.

    En fait ce qui me bloque c la soustraction, et surtout le 0 devant les chiffres ????

    Et je comprend pas bien non plus l'interet de faire ce cheminement pour affecter les paramètres? Surtout que c l'une des seules Procedure stockee qui utilise cette syntaxe bizarre ....

    Merci pour ton aide en tout cas

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 453
    Points : 24 864
    Points
    24 864
    Par défaut
    C'est juste une question de lisibilité !
    Lorsque l'on voit le code dans son ensemble, ce n'est pas si dégueulasse que cela !

    Le 0 permet juste d'aligner, un espace aurait fait aussi bien l'affaire !
    la soustraction, rien de bien compliquer non plus, il a indicé de 1 à n, hors une collection gère ses indices à partir de zéro, il faut retranché 1
    J'ai l'impression de me répéter, j'ai déjà dit cela dans ma précédente réponse, tu ne lit pas ?

    Il me semblait qu'un objet ajouté à une CollectionItem était libéré lors du Clear de la Collection, tous ces .Free pourrait être remplacé par un Params.Clear();

    Tu dois pouvoir simplifier tout ça, supprimer tous ces variables locales inutiles !

    ftUnknown doit fonctionner, tu peux mettre ftInteger ou ftString si tu le souhaites
    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
    78
    79
     
      with Prc do 
      begin
        StoredProcName := 'PROBarreCreer;1';
        Params.Clear;
        try           
          Params.CreateParam(ftUnknown, '@Err'   , ptOutput); 
          Params.CreateParam(ftUnknown, '@NumCou', ptInput);
          Params.CreateParam(ftUnknown, '@NumRng', ptInput);
          Params.CreateParam(ftUnknown, '@LetMcg', ptInput);
          Params.CreateParam(ftUnknown, '@EtaBar', ptInput);
          Params.CreateParam(ftUnknown, '@NumInd', ptInput);
          Params.CreateParam(ftUnknown, '@TypBar', ptInput);
          Params.CreateParam(ftUnknown, '@PriEch', ptInput);
          Params.CreateParam(ftUnknown, '@DstBar', ptInput);
          Params.CreateParam(ftUnknown, '@ComBar', ptInput);
          Params.CreateParam(ftUnknown, '@NumMtg', ptInput);
          Params.CreateParam(ftUnknown, '@IdtOL' , ptInput);
          Params.CreateParam(ftUnknown, '@IdtBloom', ptInput);
          Params.CreateParam(ftUnknown, '@NumZone', ptInput);
          Params.CreateParam(ftUnknown, '@Ligne'  , ptInput);
          Params.CreateParam(ftUnknown, '@Colonne', ptInput);
          Params.CreateParam(ftUnknown, '@Mode'   , ptInput);
          Params.CreateParam(ftUnknown, '@NomVue' , ptInput);
          Params.CreateParam(ftUnknown, '@NomUtl' , ptInput);
          Params.CreateParam(ftUnknown, '@NomPoste', ptInput);    
          Params.CreateParam(ftUnknown, 'Return', ptResult);
     
          //variables en sortie
          ParamByName( '@Err' ).AsInteger        := 0;
     
          //variables en entrée
          ParamByName( '@NumCou' ).AsString      := Don.NumCou;
          ParamByName( '@NumRng' ).AsInteger     := Don.NumRng;
          ParamByName( '@LetMcg' ).AsString      := Don.LetMcg;
          ParamByName( '@EtaBar' ).AsInteger     := Don.EtaBar;
          ParamByName( '@NumInd' ).AsInteger     := Don.NumInd;
          ParamByName( '@TypBar' ).AsInteger     := Don.Typ;
          ParamByName( '@PriEch' ).AsInteger     := Don.PriEch;
          ParamByName( '@DstBar' ).AsInteger     := 0;
          ParamByName( '@ComBar' ).AsString      := Don.Com;
          ParamByName( '@NumMtg' ).AsString      := Don.NumMtg;
          ParamByName( '@IdtOL' ).AsInteger      := Don.IdtOL;
          ParamByName( '@IdtBloom').AsInteger    := Don.IdtBloom;
     
          ParamByName( '@NumZone' ).AsInteger    := NumZon;
          ParamByName( '@Ligne' ).AsInteger      := NumLgn;
          ParamByName( '@Colonne' ).AsInteger    := NumCol;
     
     
          //définition des paramètres non obligatoire
          ParamByName( '@Mode' ).AsInteger       := 0;
          ParamByName( '@NomVue' ).AsString      := NomVue;
          ParamByName( '@NomUtl' ).AsString      := NomUtl;
          ParamByName( '@NomPoste' ).AsString    := NomPoste;
     
          //définition des paramètres en sortie au cas où la Fonction RETURN serait utilisée dans la procédure SQL
          ParamByName( 'Return' ).AsInteger    := 0;
     
          ExecProc;
     
          //récupération des compte rendus
          CrErr := ParamByname('@Err').AsInteger;
          CrRet := ParamByname('Return').AsInteger;
     
          //si une erreur dans le traitement
          If (CrErr <> 0) Then
          Begin
           //tracer le compte rendu
           ErrSys( NivGra, 'BarreCreer', 'ERREUR sur modification des infos d''une barre CrErr = ' + IntToStr(CrErr) + '.', 0, DstMsg );
          End
          Else
          Begin
           //tracer le compte rendu
           ErrSys( NivFil, 'BarreCreer', 'La barre à été créée.', 0, DstMsg );
          End;
        Finally
          Params.Clear;
        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

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    la soustraction, rien de bien compliquer non plus, il a indicé de 1 à n, hors une collection gère ses indices à partir de zéro, il faut retranché 1
    J'ai l'impression de me répéter, j'ai déjà dit cela dans ma précédente réponse, tu ne lit pas ?
    Bonjour,

    Si si j'avais bien lu ce que tu avais mis, mais je voulais avoir confirmation avec le code en copie/collé parce que j'avais mis des boulettes sur mon premier poste.

    Donc il s'agit bien d'une soustraction entre crochet, ct la seule chose qui me bloquait je savait pas que l'on pouvait faire une evaluation pour l'accès à un indice d'une collection

    Je pense que de toute facon à la réécriture du code en Vb.net cette notation ne survivra pas .

    Encore merci pour ton aide

    j'indique le poste comme résolu

    ++

  6. #6
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    C'est juste une question de lisibilité !
    Lorsque l'on voit le code dans son ensemble, ce n'est pas si dégueulasse que cela !
    ShaiLeTroll tu es très gentil là;
    pourquoi pas le dire, il est vraiment super dégueulasse

    [edit] je vois que tu as mis ce topique résolut avant que je poste,
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    plop

    Topic résolu ne veut pas forcément dire que l'on ne peut plus intervenir dessus.


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

Discussions similaires

  1. [POO] A quoi correspond la syntaxe "->" ?
    Par rigel dans le forum Langage
    Réponses: 2
    Dernier message: 22/11/2007, 00h23
  2. Syntaxe valeur discrète procedure stockée oracle
    Par gg2vig dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 14/09/2007, 16h51
  3. A quoi correspond cette syntaxe ?
    Par Loko dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 08/09/2007, 16h02
  4. Pb de syntaxe pour une procedure stockée
    Par mambe74 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/07/2007, 15h45
  5. problème de syntaxe procedure stockée
    Par chti_juanito dans le forum Langage SQL
    Réponses: 1
    Dernier message: 19/04/2007, 15h03

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