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

Composants VCL Delphi Discussion :

Delphi 10 et TIBSQL


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 13
    Par défaut Delphi 10 et TIBSQL
    Bonjour,
    Quelqu'un peut-il m'aider à résoudre mon problème.
    Je suis sous Delphi 10 avec une connexion à une base Firebird.
    Je veux utiliser le composant TIBSQL pour récupérer des enregistrements d'une table.

    Lorsque je définie ma requête directement dans le SQL_pltg.SQL
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT N_LOT , N_PLANT, NB_PIED, ANNEE, SEMAINE, SURFACE from PLANTING WHERE ID_SECT = 'Y2'"
    et que je l'exécute, tout se passe très bien.

    Lorsque j'exécute la même requête dans une unité comme ci-dessous


    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    begin
      sect := s_sect.text;
      SQL_pltg.Close;
      SQL_pltg.sql.clear;
      SQL_pltg.SQL.add('SELECT N_LOT,SURFACE,ANNEE,SEMAINE,NB_PIED FROM PLANTING WHERE ID_SECT = ''Y2''');
      SQL_pltg.ExecQuery;
      surf :=SQL_pltg.fieldbyname('SURFACE').asdouble;
      nbpied :=SQL_pltg.fieldbyname('NB_PIED').asdouble;
      an_fl :=SQL_pltg.fieldbyname('ANNEE').asinteger;
      sem_fl :=SQL_pltg.fieldbyname('SEMAINE').asinteger;

    cela fonctionne parfaitement.

    Mon problème vient du fait que je veux pouvoir changer ma valeur de sélection 'Y2' en la saisissant dans un TEDIT,
    puis de l'introduire dans la requête de sélection sous forme de paramètre.

    J'ai essayé différentes forme, mais aucune ne fonctionne:

    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL_pltg.SQL.add('SELECT N_LOT,SURFACE,ANNEE,SEMAINE,NB_PIED FROM PLANTING WHERE ID_SECT = ' + sect);
    La compilation se déroule normalement, mais j'ai une erreur d'exécution: "SQL error code = -206, column unknown Y2"

    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL_pltg.SQL.add('SELECT N_LOT,SURFACE,ANNEE,SEMAINE,NB_PIED FROM PLANTING WHERE ID_SECT = :sect');
    La compilation se déroule bien, l'exécution également, mais la requête ne renvoie aucunes données.

    Sur les forums, je n'ai pas trouvé grand chose sur TIBSQL et rien qui explique mon problème. Et je ne comprends pas pourquoi dans le 1er test;
    delphi prend la valeur que je lui passe pour le nom d'un colonne.

    Toute aide sera la bienvenue.

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 935
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Utiliser QuotedStr(MyEdit.Text) fonctionne-t-il mieux ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 635
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    La bonne solution est d'utiliser la requête paramétrée (la dernière)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SQL_pltg.Close;
    SQL_pltg.SQL.Text:='SELECT N_LOT,SURFACE,ANNEE,SEMAINE,NB_PIED FROM PLANTING WHERE ID_SECT =:sect';
    SQL_pltg.ParamByName('sect').asstring:=s_sect.text;
    SQL_pltg.Open;
    Si vous avez une erreur
    j'ai une erreur d'exécution: "SQL error code = -206, column unknown Y2"
    c'est normal car, pour l'interpreteur de SQL vous indiquez un colonne et non une valeur, la suggestion de Tourlourou ( QuotedStr(Sect) ) fonctionnera aussi mais ce n'est pas vraiment une forme conseillée

    Quelques remarques :
    les composants IBxxxxx sont de moins en moins succeptibles de fonctionner correctement avec Firebird, de plus il faut que fbclient.dll soit aussi copiée en gds32.dll.
    Si vous en avez la possiblité utilisez plutôt les composants Firedac ainsi le code au dessus pourrait devenir : SQL_pltg.Open('SELECT N_LOT,SURFACE,ANNEE,SEMAINE,NB_PIED FROM PLANTING WHERE ID_SECT =:sect',[s_sect.text]);

  4. #4
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 13
    Par défaut
    Bonjour à tous,

    Merci Tourlourou, mais je n'ai pas testé votre solution. J'ai plutôt testé celle de SergioMaster qui fonctionne très bien. Cela m'a même permit de compendre mon erreur.

    En réalité, je pensais que l'expression ":sect" servait à passer sous forme de paramètre ma variable "sect", mais c'est une grosse erreur.

    Après avoir testé votre proposition qui fonctionnait parfaitement, je pensais que ma première expression après le "Begin"
    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
     sect := s_sect.text;
    faisait double usage avec la nouvelle instruction
    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL_pltg.ParamByName('sect').asstring:=s_sect.text;
    .
    En supprimant ma première expression, la requête s'exécute parfaitement, sauf que dans ma fenêtre de suivi des variables, la variable "sect" reste vide, alors que les autres reçoivent bien les données.
    Conclusion, ":sect" et "sect" sont deux choses complètement différentes.

    Je vais continuer mon programme, et il est fort possible que j'ai à nouveau des problèmes avec les TIBSQL, car maintenant, je dois créer des enregistrement dans une nouvelle table et faire des mises à jour.

    Merci pour tout.

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

Discussions similaires

  1. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 20h09
  2. Réponses: 1
    Dernier message: 13/05/2002, 09h19
  3. [Kylix] Migration delphi -> kylix
    Par Christian dans le forum EDI
    Réponses: 1
    Dernier message: 03/04/2002, 22h50
  4. Réponses: 4
    Dernier message: 27/03/2002, 11h03
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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