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 :

[D2009] Utilisation de paramètres (ou pas) dans une requête SQL Oracle avec DBExpress


Sujet :

Bases de données Delphi

  1. #1
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 682
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 682
    Points : 7 122
    Points
    7 122
    Par défaut [D2009] Utilisation de paramètres (ou pas) dans une requête SQL Oracle avec DBExpress
    Je suis en train de tester Delphi 2009, en vue d'une migration depuis Delphi 6.
    Jusqu'à présent, j'utilisais le BDE. Je profite de ce changement, pour passer à DBExpress.

    Mon problème :
    - 1ere requête avec un paramètre exécutée avec un TSimpleDataSet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QueryTmp.Dataset.CommandText := 'select DESTINATION from DESTINATAIRES where Code_frs=:CodeFrs';
    QueryTmp.DataSet.ParamByName('CodeFrs').AsString := codeFrs;
    QueryTmp.Open;
    Ok, pas d'erreur.


    - 2eme requête sans paramètre :
    C'est le même composant QueryTmp, il n'est pas détruit entre temps.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QueryTmp.Close;
    QueryTmp.DataSet.CommandText := 'select NO_CAMION from CHARGEMENT_PROD';
    QueryTmp.Open;

    - Erreur :
    ---------------------------
    Notification des exceptions du débogueur
    ---------------------------
    Le projet ProdChrg.exe a déclenché la classe d'exception TDBXError avec le message 'ORA-00904: "CODEFRS" : identificateur non valide'.
    ---------------------------
    Arrêter Continuer Aide
    ---------------------------

    - Extrait du fichier de trace généré : On voit que le paramètre CodeFRS est rajouté à la 2 eme requête.
    {COMMAND } CommandC1_84.RowSetSize := 20;
    {COMMAND } CommandC1_84.CommandType := 'Dbx.SQL';
    {COMMAND } CommandC1_84.Text := 'select NULL from HIST_CHARGEMENT_PROD where NO_CAMION=?'#0'oCamion';
    {PREPARE } CommandC1_84.Prepare;
    {PARAMETER } CommandC1_84.Parameters[0].Value.SetInt32(1);
    {COMMAND } ReaderC1_84_1 := CommandC1_84.ExecuteQuery;
    {READER } {NULL TDBXTypes.WideString }
    {READER } { ReaderC1_84_1 closed. 3 row(s) read }
    {READER } FreeAndNil(ReaderC1_84_1);
    {COMMAND } FreeAndNil(CommandC1_84);
    {METADATA } ConnectionC1.GetDatabaseMetaData;
    {METADATA } ConnectionC1.GetDatabaseMetaData;
    {COMMAND } CommandC1_85 := ConnectionC1.CreateCommand;
    {COMMAND } CommandC1_85.CommandType := 'Dbx.SQL';
    {METADATA } ConnectionC1.GetDatabaseMetaData;
    {COMMAND } CommandC1_85.RowSetSize := 20;
    {COMMAND } CommandC1_85.CommandType := 'Dbx.SQL';
    {COMMAND } CommandC1_85.Text := 'select NO_CAMION from CHARGEMENT_PROD where CodeFrs = ?';
    {PREPARE } CommandC1_85.Prepare;
    {PARAMETER } CommandC1_85.Parameters[0].Value.SetAnsiString('112760');
    {COMMAND } ReaderC1_85_1 := CommandC1_85.ExecuteQuery;
    {ERR
    Est-ce que j'utilise mal ce composant ?

    Merci.

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 798
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 798
    Points : 5 591
    Points
    5 591
    Par défaut
    Il te faut obligatoirement un autre TSimpleDataSet car même si tu ne donne pas de valeur à ton paramètre celui la sera quand meme pris en compte.

    Sinon tu peu enlever dinamyquement le paramètre et l'ajouter uniquement quand tu en as besoin

  3. #3
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Salut.
    C'est qui m'étonne un peu c'est que la liste des paramètres ne se met pas à jour en fonction du SQL. Peut être qu'il faudra aussi supprimer la liste des paramètres.

    A+

  4. #4
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 682
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 682
    Points : 7 122
    Points
    7 122
    Par défaut
    Citation Envoyé par popo Voir le message
    Il te faut obligatoirement un autre TSimpleDataSet car même si tu ne donne pas de valeur à ton paramètre celui la sera quand meme pris en compte.


    Il faut détruire et recréer le composant après chaque requête !!??


Discussions similaires

  1. Réponses: 13
    Dernier message: 21/05/2010, 17h54
  2. utilisation de la fonction Partdate() dans une requête
    Par jm6570 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 01/02/2010, 12h55
  3. Utilise la valeur d'une textbox dans une requête sql
    Par podidoo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 29/03/2006, 10h53
  4. La fonction CurrentDb() ne fonctionne pas dans une requête
    Par Sébastien Le Goyet dans le forum Access
    Réponses: 8
    Dernier message: 24/11/2005, 18h46
  5. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 19h38

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