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 :

TADOQuery et requete avec fonction CONCAT et/ou LEFT


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 70
    Points : 77
    Points
    77
    Par défaut TADOQuery et requete avec fonction CONCAT et/ou LEFT
    Bonjour tout le monde,

    J'utilise pour la première fois les composants ADO, et je me heurte à un problème un peu bizarre. J'utilise dans mes requêtes des fonctions permettant de manipuler les strings, par exemple ce genre de requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT LEFT(CHAR(monchamps),2) AS resultat
    FROM matable
    WHERE ligne=5678
    J'arrive à me connecter à la base de données (AS400 UDB), mais lorsque j'active mon query, j'obtiens une erreur du type

    Pas de colonne définie dans l'ensemble de lignes


    Il suffit d'enlever la fonction SQL LEFT(...,2) pour que la requête fonctionne. Quelqu'un aurait-il une idée concernant la source du problème ?

    J'utilise D2009, et voici la connexion string du composant de TADOConnection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Provider=IBMDA400.DataSource.1;Persist Security Info=False;User ID=XX;Data Source=XXX.XXX.XXX.XXX;Protection Level=None;Extended Properties="";Initial Catalog=MonCatalogue;Transport Product=Client Access;SSL=DEFAULT;Force Translate=65535;Default Collection=XX;Convert Date Time To Char=TRUE;Catalog Library List="";Cursor Sensitivity=3;Use SQL Packages=False;SQL Package Library Name="";SQL Package Name="";Add Statements To SQL Package=True;Unusable SQL Package Action=1;Block Fetch=True;Data Compression=True;Sort Sequence=0;Sort Table="";Sort Language ID="";Query Options File Library="";Trace=0;Hex Parser Option=0;Maximum Decimal Precision=31;Maximum Decimal Scale=31;Minimum Divide Scale=0;Library List="";Naming Convention=0;Query Optimize Goal=0;Block Size=0
    (les X remplacent des valeurs ).

    J'ajoute que la syntaxe de la requête SQL est parfaitement valide puisque testé avec succès sur la base de données.

    D'avance merci et bonne journée.

  2. #2
    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
    Dis, est ce que ton champs MonChamps est alphanumérique.
    Car si c'est le cas il suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select LEFT(MonChamps,2) as Result from LaTable
    Sinon, je pense qu'il faut caster dabord avant de faire LEFT ou bien utilise SUBSTRING.

    A+
    On progresse .....

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 70
    Points : 77
    Points
    77
    Par défaut Hélas....
    Et non monchamps est numérique, et représente une date sous la forme SAAMMJJ, laquelle je doit traduire en langage humain JJ/MM/AAAA. Je suis donc obligé de transformé ceci en caractères, soit par la fonction CAST soit par CHAR, mais de toute façon, même sur un champs de type char ou varchar, à partir du moment où j'utilise la fonction LEFT, j'obtiens l'erreur.

    Je pense que cela à voir avec la configuration du composant ADO, mais où exactement je ne sais pas.

    Je continue de chercher....

    Merci.

  4. #4
    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
    Je viens de faire un test dont voici les éléments :
    - Base Acces 2003 MDB avec une table contenant un champs TBL_DATENUM numérique.
    - Sous Delphi 7, utilisation de
    1°ADOConnection avec la chaine de connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=bdd.mdb;Mode=ReadWrite;Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=0
    2° ADOQuery avec comme SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT
      LEFT(TBL_DATENUM,2) as [Siecle]
    from TBLTEST
    Et bien, il marche impeccablement.
    On progresse .....

Discussions similaires

  1. requete avec fonction "comme"
    Par popofpopof dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 11/04/2008, 23h32
  2. Réponses: 5
    Dernier message: 25/01/2008, 11h15
  3. [Report 6i] requete avec fonction decode
    Par Herveg dans le forum SQL
    Réponses: 1
    Dernier message: 05/10/2007, 15h18
  4. Requete avec fonction VBA
    Par alaingui dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/01/2007, 14h07
  5. VBA requete avec fonction sous access
    Par vanima dans le forum VBA Access
    Réponses: 4
    Dernier message: 21/06/2006, 15h18

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