Pb avec requête paramétrée

Signaler
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
-
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
-
Bonjour,
quelqu'un peut m'expliquer ce qui ne va pas dans cette requête paramétrée:

   DM.SqlTemp.SQL.Clear;
  DM.SqlTemp.SQL.Add('SELECT tbl_Contact_Pro.id_Contact_Pro, tbl_Contact_Pro.id_Pro, tbl_Contact_Pro.Nom_Contact ');
  DM.SqlTemp.SQL.Add('FROM tbl_PRO INNER JOIN tbl_Contact_Pro ON tbl_PRO.id_PRO = tbl_Contact_Pro.id_Pro ');
  DM.SqlTemp.SQL.Add('WHERE tbl_Contact_Pro.id_Pro = :no_pro');
  DM.SqlTemp.ParamCheck := True;
  DM.SqlTemp.Parameters.ParamByName('no_Pro').Value:=DM.tblPROid_PRO.Value;  
   là j'ai le message: 'sqlTemp:Paramètres 'no_Pro' non trouvés'  
  DM.SqlTemp.Open;

Si à la place je mets:
DM.SqlTemp.Parameters[0].Value: =DM.tblPROid_PRO.Value;
j'ai le message: 'Indice de liste hors limites(0)

D'avance merci

Codial

5 réponses

Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Bonjour

Avant de récupérer la valeur, il me semble qu'il faut faire au préalable deux choses :
  Vérifier le nombre de paramètres existant avec ParamCount, au cas où la requète ne renverrait rien 
  Spécifier son type avant d'y accéder :
      DM.SqlTemp.Parameters[0].DataType:=ftInteger; // ftString ftBoolean, ...
   DM.SqlTemp.Parameters[0].Value:=DM.tblPROid_PRO.Value;
  Ou en accès direct avec
      DM.SqlTemp.Parameters[0].AsInteger := DM.tblPROid_PRO.Value ;

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
1
Bonjour,

Merci pour la réponse, mais sur:
DM.SqlTemp.Parameters[0].DataType:=ftInteger;
j'ai un message d'erreur: Identificateur non déclaré: ftInteger

et sur:
DM.SqlTemp.Parameters[0].AsInteger
Identificateur non déclaré:AsInteger
 
Cordialement
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Oups c'était valable pour le Params d'un TQuery (C'est la dure sanction de la réponse de mémoire ) il faut utiliser Parameters.Count et pour ftInteger, vérifie que tu ais bien l'unité DB définie dans le uses.

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
1
Bonsoir,

oui, c'était ça  ça fonctionne maintenant. Oublier le DB dans les uses !!!
Maintenant, j'ai essayé de mettre ma requête dans le SQL de l'inspecteur d'objet, juste ma requete Select...etc...

Comment je peux paramétrer ma requête dans le Paraméters de l'inspecteur d'objet? J'avoue que j'ai pas encore compris cette manip.

Cordialement


 
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
1
Re,

Apparemment, j'ai trouvé je viens de faire la manip:
j'ai écrite, dans le Parameters de l'inspecteur d'objet: Name :id_pro et value id_pro

et j'ai laissé ton code dans la procédure:
   DM.SqlTemp.Parameters[0].DataType:=ftInteger;
  DM.SqlTemp.Parameters.Count;
  DM.SqlTemp.Parameters[0].Value:=DM.tblPROid_PRO.Value;
  DM.SqlTemp.Open;

c'est ça ?

Cordialement