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 :

Problème de Query qui ne renvoie rien


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 143
    Points : 59
    Points
    59
    Par défaut Problème de Query qui ne renvoie rien
    Bonjour,
    J'ai un ADOQuery déclaré de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    adoQuery.CursorLocation := clUseServer;
            adoQuery.CursorType := ctOpenForwardOnly;
            adoQuery.LockType := ltReadOnly;
            adoQuery.SQL.Clear;
            adoQuery.SQL.Add('SELECT DISTINCT '+ sNomSchema + '.' + sNomTable + '.' + sNomChamp);
            adoQuery.SQL.Add('FROM '+ sNomSchema + '.' + sNomTable);
            adoQuery.Active:=True;
    Suite à ce code, si la table en question contient plusieurs enregistrements, je n'ai pas de problème, par contre si la table ne contient qu'un seul enregistrement, suite à ce code, adoQuery.RecordCount vaut "-1" alors que si je prend la requête et la lance directement dans Management Studio, j'ai bien mon champ avec sa valeur..... Je ne comprends pas pourquoi, j'ai beau chercher, je ne trouve pas.....

    Help please!!!!!!!!

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    des points pour séparer les champs !?
    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

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 143
    Points : 59
    Points
    59
    Par défaut
    Non, les points sont là pour faire ça:
    SELECT DISTINCT NomDuSchéma.NomDeLaTable.NomDuChamp
    FROM NomDuSchéma.NomDeLaTable

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 143
    Points : 59
    Points
    59
    Par défaut
    Enfin de compte le scénario est plutôt que mon ADOQuery ne renvoie jamais le premier enregistrement et donc quand il n'y en a qu'un... et bien je n'est rien!!!!

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 143
    Points : 59
    Points
    59
    Par défaut
    En fait, sans que je ne comprenne le pourquoi du comment, j'ai trouvé ce qui me fait perdre le premier enregistrement....
    En fait après le code fourni je fais un parcourt comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    adoQuery.First;
    while not dmMain.adoQuery.eof do
    begin
       Mon code
    end;
    Et en fait, c'est le "First" qui me fait passer à l'enregistrement suivant!!!!!!
    Si quelqu'un a une explication pour moi, je suis preneur

  6. #6
    Inactif
    Homme Profil pro
    Analyste-programmeur Delphi
    Inscrit en
    Décembre 2003
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-programmeur Delphi

    Informations forums :
    Inscription : Décembre 2003
    Messages : 490
    Points : 287
    Points
    287
    Par défaut
    Euh...
    sauf erreur de ma part, ton adoQuery.First ne fait rien... s'il est placé juste après ton Open.
    Open déclenche le remplissage de l'ensemble de données,
    créé le curseur, et le place sur le premier enreg.

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par ludogoal Voir le message
    En fait, sans que je ne comprenne le pourquoi du comment, j'ai trouvé ce qui me fait perdre le premier enregistrement....
    En fait après le code fourni je fais un parcourt comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    adoQuery.First;
    while not dmMain.adoQuery.eof do
    begin
       Mon code
    end;
    Et en fait, c'est le "First" qui me fait passer à l'enregistrement suivant!!!!!!
    Si quelqu'un a une explication pour moi, je suis preneur
    Quel version de delphi utilises tu ?
    Delphi 5 ? si oui, il faut patcher delphi 5 car il y avait un soucis avec les composants ADO à une époque
    Modérateur Delphi

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

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 143
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par od.dev Voir le message
    Euh...
    sauf erreur de ma part, ton adoQuery.First ne fait rien... s'il est placé juste après ton Open.
    Open déclenche le remplissage de l'ensemble de données,
    créé le curseur, et le place sur le premier enreg.
    Oui, nous sommes d'accord, mais je met toujours un First avant une boucle pour être certain d'être sur le premier enregistrement avant de boucler sur l'ensemble de données... Et puis en théorie le First ne devrait pas avoir ce comportement......

    Je suis en Delphi 7 donc à priori pas de problème de ce côté là, enfin pas à ma connaissance...

    Merci pour votre aide

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    ADO SQL Server (on devine avec le "Management Studio")

    tu as essayé sans modifier toutes ces prorpriétés ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      adoQuery.CursorLocation := clUseServer;
      adoQuery.CursorType := ctOpenForwardOnly;
      adoQuery.LockType := ltReadOnly;
    Faut être sur de soi pour modifier ça, perso, je ne l'ai jamais fait et en MySQL ou Oracle, je n'ai jamais eu ce problème de ligne manquante !

    OpenForwardOnly, c'est pour passer en mode unidirectionnel, First() et Next() sont les seules méthodes de déplacement autorisés en mode unidirectionnel pour DBExpress , ça serait quand même dommage que cela soit buggé, il faudrait vérifier la doc microsoft au sujet du ctOpenForwardOnly et First, est-ce autorisé en ADO ?

    as-tu une différence de comportement si tu mets First() ou pas ?

    Ta clé primaire est correcte ? elle commence bien à 1 (en tout cas pas zéro)

    En fait, en y reflechissant, je crois qu'après un Open, je mettais rarement de First, dès souvenir avec InterBase avec un First qui plante si requête vide (merci IsEmpty)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Réponses: 11
    Dernier message: 06/05/2011, 15h34
  2. Problème TQuery qui ne renvoie rien au bout de x Select
    Par Freud44 dans le forum C++Builder
    Réponses: 3
    Dernier message: 06/01/2010, 14h18
  3. Requete sql qui ne renvoie rien :-(
    Par patchouli dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/02/2007, 09h41
  4. Fonction qui ne renvoie rien
    Par philippef dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/11/2006, 18h12
  5. [PostgreSql] requête simple qui ne renvoie rien ?
    Par tuxout dans le forum Langage SQL
    Réponses: 6
    Dernier message: 03/08/2006, 14h06

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