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, Informix et modification de la propriété Sql


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 10
    Points : 11
    Points
    11
    Par défaut TADOQuery, Informix et modification de la propriété Sql
    Bonjour,

    Je rencontre un petit soucis que j'ai réussi à contourner mais je ne comprend pas pourquoi et c'est bien ça qui me chagrinne.

    J'ai un TADOQuery avec CursorLocation positionné à clUseServeur car beaucoup de données. Pour le CursorType, quelque soit le paramétrage initial, il me le positionne à ctStatic

    Je défini une requete initiale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select cod_four , reference , designation from tbl_article 
    where date_annulation is null and  cod_four>=''''  and reference>=''''
    order by cod_soc,cod_four,reference
    En fonction des paramètres de sélection , je complète ma clause Where en faisait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query.sql|1] := Query.Sql[1] + '((cod_four >= ''ABE'' and reference >= ''000081'')'
    et en fonction d'un autre paramétrage, je complète avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query.sql|1] := Query.Sql[1] + 'or ( cod_four > ''ABE''))'
    J'obtiens au final la requete suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select cod_four , reference , designation from tbl_article 
    where date_annulation is null and  cod_four>=''''  and reference>='''' and ((cod_four >= ''ABE'' and reference >= ''000081'')or ( cod_four > ''ABE''))
    order by cod_soc,cod_four,reference
    Quand j'ouvre la requête un première fois, pas de soucis mais que je la relance avec le mécanisme de construction de la requête, j'ai une erreur SBookmarksRequired
    En revanche, si je met directment la requête complète dès le début, je n'ai pas de soucis.

    Quelqu'un aurait-il une idée sur la différence de comportement ?

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 454
    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 454
    Points : 24 866
    Points
    24 866
    Par défaut
    Ta TStrings contient toujours 3 lignes, c'est un peu casse gueule comme méthode !
    utilise Query.SQL.Text au lieu de modifier la Strings[1] et concatène à la volée au lieu de modifier à posteriori !

    Pour ton histoire de Bookmark, tu n'aurais pas une DBGrid connectée avec une selection en cours ?
    Ou utiliser des GetBookmark ?
    Il me semble que les Bookmark ne sont plus valides après un Close (ça dépend de l'implémentation du descendant de DataSet car bcp les utilise comme ça)
    Je n'utilise que très peu les Bookmark pour le repositionnement après un Close\Open\Refresh, j'utilise un simple Locate sur la PK (surtout si la ligne disparait entre temps, c'est plus fiable)

    Tu utilise bien Close et Open ? et non Refresh ?
    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

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Pour les Sql, je suis d'accord qu'il est préférable de tout préparer et de l'affecter à la fin mais je n'ai pas choisi de récupérer ce code.

    Pour les bookmark, c'est la grosse question car ils ne sont absolument pas positionnés dans l'aplication. En ébug, c'est ADO qui soulève le problème lors du test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (BookmarkSize = 0) and (BufferCount > 1) then
    Tant que je ne modifie pas pusieurs fois le SQL, BookmarkSize faut 16. Dès que je modifie plusieurs fois, BookmarkSize pase à 0.
    Et c'est bien là mon problème, je ne comprend pas pourquoi.

    Pour le fonctionnement, c'est bien Close, modification du SQL puis Open

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/04/2010, 13h05
  2. Réponses: 1
    Dernier message: 27/12/2005, 13h58
  3. javascript > modification d'une propriété déjà définie en
    Par Cypselos dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/12/2005, 17h44
  4. modification de la requete SQL d'une liste
    Par legillou dans le forum Access
    Réponses: 2
    Dernier message: 23/06/2005, 08h43
  5. TQUERY + Propriété SQL + Params
    Par bluevelvet dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/03/2004, 09h58

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