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

Delphi Discussion :

"Unknown Column" pour un champ dans le code de Delphi 10


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 10
    Points : 14
    Points
    14
    Par défaut "Unknown Column" pour un champ dans le code de Delphi 10
    Bonjour!
    Je viens vers vous parce que j'ai un problème assez étrange sur DELPHI 10
    en effet, je dois faire en sorte de remplir une TDBGRID en fonction du texte de trois Edit(qui sont ici mis en paramètres)
    J'ai réussi à comprendre comment marchais le fonctionnement des paramètres(enfin je crois, non parce que il ne me met plus de erreur XSQLDA donc peut être que...)
    Bref, quand j'ai enregistré ma requête SQL dans le code de Delphi, j'ai eu l'erreur Unknown Column sur "U" et quand je met la ligne avec "U" en commentaire il me met l'erreur sur C,
    Ce que j'ai du mal à comprendre car c'est un champ et non une colonne, même avec un like a la place du = il persiste à croire que c'est une colonne.

    De plus:
    La même requête marche sur Firebird parfaitement
    La requête(avec les champs à la place des paramètres, depuis j'ai changé pour la même requête que vous voyez dans le code) marche parfaitement via l'inspecteur d'objet et l'affiche dans la TDBGRID
    Voila le code(IBQuery1 étant... Bah le Query):

    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
    19
    20
     
    IBQuery1.SQL.Clear;
    IBQuery1.Params.Clear;
    IBQuery1.Params.CreateParam(FtString,'paramNm',ptUnknown);
    IBQuery1.Params.CreateParam(FtString,'paramRef',ptUnknown);
    IBQuery1.Params.CreateParam(FtString,'paramLibel',ptUnknown);
    IBQuery1.SQL.Add('select REFXART,LIBXART,ARC1.QTEXARC AS DIMUNIT, ARC2.QTEXARC AS QTECDT');
    IBQuery1.SQL.Add('from ARTXRES, ARCXRES as ARC1, ARCXRES as ARC2');
    IBQuery1.SQL.Add('where ARTXRES.ARTXRES=ARC1.ART_ARC');
    IBQuery1.SQL.Add('and ARTXRES.ARTXRES=ARC2.ART_ARC');
    IBQuery1.SQL.Add('and ARC1.TYPXARC = "U"');
    IBQuery1.SQL.Add('and ARC2.TYPXARC = "C"');
    IBQuery1.SQL.Add('and DEPXART like "%:paramNm%"');
    IBQuery1.SQL.Add('and REFXART like "%:paramRef%"');
    IBQuery1.SQL.Add('and LIBXART like "%:paramLibel%"');
    IBQuery1.ParamByName('paramNm').AsString:=nmDeposant.Text;
    IBQuery1.ParamByName('paramRef').AsString:=refArticles.Text;
    IBQuery1.ParamByName('paramLibel').AsString:=libelArticles.Text;
    IBQuery1.Open;
    IBQuery1.Close;
    J'ai quelque hypothèse selon quoi "" n'est pas reconnu comme une quote par Delphi mais je ne vois vraiment pas par quoi le remplacer...

    Merci de vos futurs réponses
    Kneukar

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    tu n'aurais pas déjà ouvert la requette pour récupérer les champs persistant ?
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    les paramètres sont calculés par Delphi pas besoin de les déclarer, ensuite les "%" sont dans la valeur du paramètre, par dans le SQL où le paramètre est déclaré par un :nom

    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
     
    begin
    IBQuery1.SQL.Clear;
    IBQuery1.SQL.Add('select REFXART,LIBXART,ARC1.QTEXARC AS DIMUNIT, ARC2.QTEXARC AS QTECDT');
    IBQuery1.SQL.Add('from ARTXRES, ARCXRES as ARC1, ARCXRES as ARC2');
    IBQuery1.SQL.Add('where ARTXRES.ARTXRES=ARC1.ART_ARC');
    IBQuery1.SQL.Add('and ARTXRES.ARTXRES=ARC2.ART_ARC');
    IBQuery1.SQL.Add('and ARC1.TYPXARC = "U"');
    IBQuery1.SQL.Add('and ARC2.TYPXARC = "C"');
    IBQuery1.SQL.Add('and DEPXART like :paramNm');
    IBQuery1.SQL.Add('and REFXART like :paramRef');
    IBQuery1.SQL.Add('and LIBXART like :paramLibel');
    IBQuery1.ParamByName('paramNm').AsString:='%' + nmDeposant.Text + '%';
    IBQuery1.ParamByName('paramRef').AsString:='%' + refArticles.Text + '%';
    IBQuery1.ParamByName('paramLibel').AsString:= '%' + libelArticles.Text + '%';
    IBQuery1.Open;
    IBQuery1.Close;
    end
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Bonsoir,
    si tu penses qu'il s'agit des encore guillemets alors tu peux toujours écrire ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IBQuery1.SQL.Add('and ARC1.TYPXARC = '+QuotedStr('U'));
    IBQuery1.SQL.Add('and ARC2.TYPXARC = '+QuotedStr('C'));
    ou encore les passer en paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IBQuery1.SQL.Add('and ARC1.TYPXARC = :U');
    IBQuery1.SQL.Add('and ARC2.TYPXARC = :C');
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 10
    Points : 14
    Points
    14
    Par défaut
    Merci pour vos réponses!
    J'ai résolu mes problèmes grâce à vous! (et même un problème dont je me doutais pas, merci Paul TOTH)
    Par contre, j'ai eu une autre erreur lié à paramNm
    Quand je rempli mon edit lié à paramNm(nmDeposant), j'ai 5 caractères + les deux '%' et il me marque que je ne peux pas stocké 7 caractères parce qu'il y a une limite de 5 caractères!
    J'ai modifié les propriétés NumericScale, Precision, Size à 20 pour voir ce que ça a donné dans l'inspecteur d'objet et dans le code, mais il a l'air d'être toujours limité à 5 caractères.

    En attente de vos réponses.
    Kneukar

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Kneukar Voir le message
    J'ai modifié les propriétés NumericScale, Precision, Size à 20 pour voir ce que ça a donné dans l'inspecteur d'objet et dans le code, mais il a l'air d'être toujours limité à 5 caractères.
    toutes choses que de toute façon tu écrases allégrement avec un Params.Clearceci étant n'étant pas très familier avec les IBQuery (et les IBxxxxx tout court d'ailleurs) j'ai envie d'utiliser mon joker

    [Edit] j'ai bien lu Delphi 10 ? pourquoi utiliser les IBxxxxx plutôt que Firedac ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 10
    Points : 14
    Points
    14
    Par défaut
    tout simplement, car j'ai suivi le tutoriel pour interbase/firebird

    celui-là: http://teamb-fr.developpez.com/jjm/interbase/

    vu que c'était sur Delphi 7(et que je n'avais pas vu de tutoriel sur Delphi 10), je connaissais pas Firedac.

    Du coup là j'ai mis mes requêtes sur des Firedac(IBQuery1 devient FDQuery1) pour voir et sa me met la même erreur: impossible de changer le maximum des caractéres de mes paramètres.
    Même en retirant le Param.Clear.

  8. #8
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Là , je suis plus qu'étonné aussi vais-je tenté de faire un essai (la suite prochaine intervention)

    [EDIT]
    effectivement, pour en avoir le cœur net j'ai fait un test avec les moyens du bord. Je dois avouer que je n'avais jamais passé de valeur de LIKE en paramètre et au grand jamais du style %VALEUR% ou la longueur de valeur faisait la taille du champ
    avec Firedac voilà ma solution ,sur une table plus que bidon d'une base de données test, le champ TT fait 3 caractères (passer B en paramètre donne une erreur de taille)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    FDQuery1.Active:=False;
    FDQuery1.SQL.Clear;
    FDQuery1.SQL.Add('SELECT a.ID, a.TT, a.NCC, a.NCT, a.TOT');
    FDQuery1.SQL.Add('FROM TESTM a');
    FDQuery1.SQL.Add('WHERE a.TT like &B'); // je n'utilise pas un paramètre mais une macro
    fdQuery1.MacroByName('B').AsRaw:=QuotedStr('%TT2%'); 
    // on peut aussi écrire
    // fdQuery1.MacroByName('B').AsString:='%TT2%';
    FdQuery1.Active:=True;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 10
    Points : 14
    Points
    14
    Par défaut
    Merci SergioMaster!
    J'ai fini par résoudre mon problème grâce à toi!

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

Discussions similaires

  1. [MySQL] ADDTIME pour un champ specifique dans une boucle while
    Par juju03 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 18/06/2008, 16h35
  2. Champs uniques dans mysql
    Par RasDataMan dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 13/09/2007, 16h33
  3. [phpMyAdmin] problème pour un champ 'heure' dans phpMyAdmin
    Par leclone dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 19/03/2007, 10h41
  4. champ unique dans fenêtre indépendante
    Par burnout69 dans le forum Access
    Réponses: 12
    Dernier message: 07/09/2006, 21h37

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