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

  1. #1
    Nouveau membre du Club
    Probleme : message 'Aucune valeur donnée pour un ou plusieurs des paramètres'
    Salut les boss.

    Je suis en train de coder une appli. delphi en ce moment et là ça ne va pas ...
    Explications: J'utilise le fichier ADODB_TLB pour le codage de mon appli. En essayant des insertions ou des mise à jours, je reçois le message 'Aucune valeur donnée pour un ou plusieurs des paramètres requis'. La logique de mon appli est la suivante:
    "avant l'insertion d'un nouveau patient dans la table TPatient, je créé un objet de type TPatient et il est passé en paramètre à une fonction d'un objet de type TPatientBLL qui se charge de de la création de la requête d'insertion. Une fois créée, cette requête est passée en paramètre à un objet de type TManipData spécialisé dans la manipulation des données ..."

    Exemple de code:

    - création du patient à insérer ->

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    m_NewPatient := TPatient.Create;
     
        with m_NewPatient do
        begin
            Id := StrToInt(Self.txtNumero.Text);
            Nom := Self.txtNom.Text;
            Prenom := Self.txtPrenom.Text;
            Sexe := Self.cbxSexe.Text;
            Age := StrToInt(Self.txtAge.Text);
            TypePatient := 'true';
            Profession := TProfessionBLL.Instance.ProfessionHTable.GetKeyByValue(cbxProfession.Text);
            Adresse := Self.txtAdresse.Text;
        end;


    - insertion du patient ->

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    TPatientBLL.Instance.Update(m_NewPatient);


    - céation de la requête d'insertion ->

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
      ReqInsert := 'INSERT INTO TPatient VALUES (' +
                         IntToStr(NewPatient.Id) + ',' +
                         NewPatient.Nom + ',' + NewPatient.Prenom + ',' + NewPatient.Sexe + ',' +
                         IntToStr(NewPatient.Age) + ',' + NewPatient.Adresse + ',' + NewPatient.TypePatient + ',' +                                    IntToStr(NewPatient.Profession) + ')' ;


    - execution de la requête ->

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
      m_ManipData.ExecuteCommand(ReqInsert);


    - définition de TManipData.ExecuteCommand(Req :string) ->

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      procedure TManipData.ExecuteCommand(Req :String);
      var Count :OleVariant;
      begin
     
          Count := 0;
          try
            TConnexionBase.Instance.GetConnexion.Execute(Req,Count,adCmdText);
          except
            on EDataBaseError do ShowMessage('Erreur execution de commande !');
          end;
     
      end;


    Lorsque j'essais des suppressions, cela marche correctement :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    ReqDelete := 'DELETE FROM TPatient WHERE IdPat =' + IntToStr(PatientID);
     
    m_ManipData.ExecuteCommand(ReqDelete);


    J'ai essayer pas mal de code se rapportant à l'utilisation de la fonction Execute de l'objet Connection, mais sans espoir.
    Merci pour votre compréhension.

  2. #2
    Expert confirmé
    J'aurais tendance à quoter les chaines dans la requète...
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    ReqInsert := 'INSERT INTO TPatient VALUES (' +
                         IntToStr(NewPatient.Id) + ',' +
                         QuotedStr(NewPatient.Nom) + ','+etc....
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  3. #3
    Modérateur

    L'erreur est typique en SQL, ton problème vient en fait que tu insères dans ta table un nombre inférieur ou supérieur de paramètres.

    Si le nombre de champs que tu veux insérer dans la table n'est pas le identique à la totalité de la table (vu que tu ne précises pas les champs dans la requete) tu es obligé de les fournir.

    Ex:

    TablePatient
    • Nom : Champ non Null (Doit avoir obligatoirement une valeur)
    • Prenom : Champ Non Null (idem)
    • Age : Champ non Null (idem)
    • UnChampAutre : Champ null (Ne nécessite pas une valeur)


    Soit tu insères l'intégralité des champs, il faut donner une valeur pour chacun et donner les valeurs obligatoirement dans l'ordre de la table

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ReqInsert := 'Insert into TPatient Values(' + 
    QuotedStr(NewPatient.Nom) + ',' +
    QuotedStr(NewPatient.Prenom) + ',' +
    IntToStr(NewPatient.Age) + ',' +
    'NULL' + ')';


    Ou alors, tu peux uniquement indiquer les champs nécessaires.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ReqInsert := 'Insert into TPatient(Nom,Prenom,Age) Values(' + 
    QuotedStr(NewPatient.Nom) + ',' +
    QuotedStr(NewPatient.Prenom) + ',' +
    IntToStr(NewPatient.Age) + ')';


    Attention seul les champs définit avec une valeur par défaut ne sont pas obligatoire.
    Modérateur Delphi

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

  4. #4
    Nouveau membre du Club
    Merci Pour vos réponses... Mon probleme est résolu...