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 :

[D2010] Utilisation de paramètres dans une requête SQL Oracle avec DBExpress


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 703
    Détails du profil
    Informations personnelles :
    Âge : 45
    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 703
    Par défaut [D2010] Utilisation de paramètres dans une requête SQL Oracle avec DBExpress
    Mon problème :
    - 1ère 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
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SimpleDataSetLangueColis.DataSet.Close;
    SimpleDataSetLangueColis.DataSet.CommandText := 'select * from UneTable ';
    SimpleDataSetLangueColis.DataSet.CommandText := SimpleDataSetLangueColis.DataSet.CommandText + 'where UnChamp = :Param1 ';
    try
       SimpleDataSetLangueColis.DataSet.ParamByName('Param1').AsInteger := StrToInt(LabeledEditNumCC.Text);
       SimpleDataSetLangueColis.Open;
    except
       on E: Exception do
       begin
          ShowMessage(E.Message);
       end;
    end;
    - 2ème requête avec un paramètre (ou sans) exécutée avec le même TSimpleDataSet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SimpleDataSetLangueColis.DataSet.Close;
    SimpleDataSetLangueColis.DataSet.CommandText := 'select * from UneTable ';
    SimpleDataSetLangueColis.DataSet.CommandText := SimpleDataSetLangueColis.DataSet.CommandText + 'where UnChamp = :Param1 ';
    try
       SimpleDataSetLangueColis.DataSet.ParamByName('Param1').AsInteger := StrToInt(LabeledEditNumCC.Text);    // <-- ici la valeur du paramètre a changée.
       SimpleDataSetLangueColis.Open;
    except
       on E: Exception do
       begin
          ShowMessage(E.Message);
       end;
    end;
    Après avoir exécuté la requête (la deuxième), la DBGrid affiche toujours le résultat de la première requête. Quoi qu'on fasse, le Open n'a aucun effet.

    Ca ressemble beaucoup au problème que j'avais rencontré lors de mes tests de Delphi 2009 (http://www.developpez.net/forums/d65...cle-dbexpress/).

    Une idée ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  2. #2
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 703
    Détails du profil
    Informations personnelles :
    Âge : 45
    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 703
    Par défaut
    Question subsidiaire :
    Quelle est la différence entre SimpleDataSet.Open et SimpleDataSet.DataSet.Open ?
    Quelle est la différence entre SimpleDataSet.Close et SimpleDataSet.DataSet.Close ?

    (Dommage qu'il n'y ait d'aide dans Delphi 2010).
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  3. #3
    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
    Si je me souviens bien les composants DbExpress sont unidirectionnels (et le SimpleDataSet aussi non ?) si oui, alors il te faut aussi rafraichir le DatasetProvider ou le ClientDataset qui fait tampon avec ta grille et le SimpleDataSet.
    Modérateur Delphi

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

  4. #4
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 703
    Détails du profil
    Informations personnelles :
    Âge : 45
    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 703
    Par défaut
    Citation Envoyé par Rayek Voir le message
    Si je me souviens bien les composants DbExpress sont unidirectionnels (et le SimpleDataSet aussi non ?)
    Justement. Le SimpleDataSet est le seul a être bi-directionnel.
    C'est pour ça qu'on cherche à l'utiliser.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  5. #5
    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
    Ok, alors essai comme çà

    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
     
    With SimpleDataSetLangueColis do
    begin
      DataSet.Close;
      DataSet.Params.clear;// suppression des paramètres déjà créés
      DataSet.CommandText := 'select * from UneTable ';
      DataSet.CommandText := DataSet.CommandText + 'where UnChamp = :Param1 ';
      DataSet.ParamCheck := True; // On force la recréation de nouveaux paramètres
      try
         DataSet.ParamByName('Param1').AsInteger := StrToInt(LabeledEditNumCC.Text);    // <-- ici la valeur du paramètre a changée.
         Open;
      except
         on E: Exception do
         begin
            ShowMessage(E.Message);
         end;
      end;
    End;
    Modérateur Delphi

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

  6. #6
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 703
    Détails du profil
    Informations personnelles :
    Âge : 45
    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 703
    Par défaut
    Citation Envoyé par Rayek Voir le message
    Ok, alors essai comme çà

    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
     
    With SimpleDataSetLangueColis do
    begin
      DataSet.Close;
      DataSet.Params.clear;// suppression des paramètres déjà créés
      DataSet.CommandText := 'select * from UneTable ';
      DataSet.CommandText := DataSet.CommandText + 'where UnChamp = :Param1 ';
      DataSet.ParamCheck := True; // On force la recréation de nouveaux paramètres
      try
         DataSet.ParamByName('Param1').AsInteger := StrToInt(LabeledEditNumCC.Text);    // <-- ici la valeur du paramètre a changée.
         Open;
      except
         on E: Exception do
         begin
            ShowMessage(E.Message);
         end;
      end;
    End;
    Ca ne change rien.

    J'ai un collègue qui a trouvé quelque chose d'intéressant :
    Il faut mettre PacketRecords à sa valeur par défaut (-1) pour obtenir un fonctionnement normal.
    Mais, c'est pas une solution, parce que pour des grosses tables, ca ne va pas être possible.

    Je creuse ...
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/12/2008, 08h05
  2. Comment utiliser des variables dans une requête SQL ?
    Par Ragnarok85 dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 12/02/2007, 16h23
  3. [SQL] Utilisation de variables dans une requête SQL
    Par heteroclite dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 07/09/2006, 22h38
  4. [SQL] Utilisation de variables dans une requête SQL
    Par heteroclite dans le forum Langage
    Réponses: 8
    Dernier message: 07/09/2006, 22h38
  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, 18h38

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