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 :

[MS-SQL] [débutant] Delphi et SQL et ADOQuery


Sujet :

Bases de données Delphi

  1. #1
    Cdx
    Cdx est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2002
    Messages : 21
    Points : 9
    Points
    9
    Par défaut [MS-SQL] [débutant] Delphi et SQL et ADOQuery
    Bonjour,

    J'ai "développé" une appli en Delphi 6 qui accède à une BDD Access 97.
    Pour ca j'utilisais le BDE et malgré pas mal de déboires, j'ai réussi à faire un truc qui tourne à peu prés correctement.
    Prochainement les bases vont être migrées sur un serveur SQL, et je vais donc devoir modifier l'appli pour qu'elle aille désormais taper sur ce serveur.

    J'essaye désespérement d'utiliser les composants ADO depuis ce midi, mais je suis confronté à quelques problemes et malgré la lecture de nombreux tutorials, je ne parviens pas à trouver la solution.

    Par exemple :
    J'utilisais une requête qui allait compter le nombre d'enregistrements dans ma table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            Query1.Prepare;
            Query1.Open;
            NbreCodeClient := (Query1.FieldbyName('cnt').asinteger);
            Query1.Close;
    La requête SQL etait : select count(*) as cnt from T_customer;

    J'ai bien réussi à paramétrer les composants ADOConnection et ADOTable, et la connexion au serveur SQL s'effectue bien, mais je ne parviens pas à trouver comment remplacer le code ci dessus avec une ADOQuery ...

    Si quelqu'un pouvait m'aider ou m'indiquer ou trouver une information intéressante ...

    D'avance merci

  2. #2
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    Oublies le prepare et ton code devrait fonctionner...

  3. #3
    Cdx
    Cdx est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2002
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    Ce code fonctionne trés bien, mais en utilisant une Query SQL (BDE) ...
    Cependant je veux désormais utiliser ADO et donc remplacer le code en utilisant des ADOQuery ...

    Si je crée une ADOQuery1 et que j'utilise le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            ADOQuery1.SQL;
            NbreCodeClient := (AdoQuery1.FieldbyName('cnt').asinteger);
            ADOQuery1.OpenSQL;
    Avec ADOQUery SQL = select count(*) as cnt from T_customer;

    Il me sort un "champ 'cnt' non trouvé" ...

  4. #4
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ADOQuery1.SQL.Text := 'select count(*) as cnt from T_customer';
    ADOQuery1.Open;
    NbreCodeClient := ADOQuery1.FieldbyName('cnt').asinteger;
    ADOQiery1.Close;

  5. #5
    Cdx
    Cdx est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2002
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    Excellent
    Merci beaucoup

    Pour continuer dans le même truc, j'avais le code suivant (en tapant sur la BDD Access 97 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Form1.CodeClient.Prepare;
    Form1.CodeClient.Open;
           While not Form1.CodeClient.Eof do begin;
           Progressbar1.Position:=i;
           i:=i+1;
           Form1.Combobox4.Items.add(Form1.CodeClient.FieldByName('Customer_nbr').asstring);
           Form1.CodeClient.Next;
           end;
    Form1.CodeClient.Close;
    Avec SQL Query = select customer_nbr from T_Customer order by Customer_nbr;

    J'ai donc remplacé par (pour taper sur le serveur SQL) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Form1.ADOQuery1.Open;
           While not Form1.ADOQuery1.Eof do begin;
           Progressbar1.Position:=i;
           i:=i+1;
           Form1.Combobox4.Items.add(Form1.ADOQuery1.FieldByName('Customer_nbr').asstring);
           Form1.ADOQuery1.Next;
           end;
    Form1.ADOQuery1.Close;
    Avec ADOQuery1 = select customer_nbr from T_Customer order by Customer_nbr;

    Tout fonctionne correctement, cependant c'est 10 fois plus lent qu'auparavant ... alors que le serveur SQL est une bête de guerre ... le reste des requêtes s'execute à vitesse normale ...
    Je remplis juste un combobox avec 40.000 codes clients à 6 chiffres ...
    Peut on optimiser ?

  6. #6
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    Peut on optimiser ?
    La bonne question est : A-t-on besoin de rapatrier les 40000 d'un coup ? Bonjour la charge réseau !

    En fait, 3 pistes de réflexion :
    * Voir si fonctionnellement il est possible de réduire le volume (filtre préalable, par exemple)
    * Pourquoi ne pas utiliser un TLookUpList ou un TDBLookUpComboBox ; Ainsi, c'est ADO qui gèrera les paquets à récupérer du serveur au fur et à mesure des besoins, plutôt que de charger les 40000 avant de rendre la main...
    * Pour accélérer la requête, il faudrait s'assurer de la présence d'un INDEX sur le champ Customer_nbr de la table T_Customer.

    Bon courage

  7. #7
    Cdx
    Cdx est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2002
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    En fait l'appli est faite pour de la saisie d'appels telephoniques en temps reel ... il faut donc que la saisie du code client soit rapide ...
    Le fait que ce soit lent n'est pas trop genant, puisque c'est uniquement au chargement de l'appli.
    Par contre je m'interrogeais de savoir pourquoi une telle difference de vitesse entre la version Access et la version SQL ... puisque toutes les autres requetes de l'appli sont aussi rapides dans un cas comme dans l'autre ...
    Et comme je suis plutot débutant en Delphi, je me demandais si mon code n'etait pas optimisable

    Merci pour tes réponses en tous cas ...

  8. #8
    Cdx
    Cdx est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2002
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    Bon, j'ai essayé qq trucs, mais rien n'y fait, c'est tjs aussi lent.
    J'ai rempli un tableau avant de remplir le Combo, j'ai indexé le champ Customer_nbr ... rien à faire ...

  9. #9
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    j'ai essayé qq trucs
    du genre ... lookup ?

  10. #10
    Cdx
    Cdx est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2002
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    Non, je suis actuellement en train de regarder comment ca fonctionne ...

Discussions similaires

  1. Delphi et Sql Server
    Par Mylvain dans le forum Bases de données
    Réponses: 3
    Dernier message: 06/05/2004, 22h45
  2. Pbl sql et delphi
    Par rippoz dans le forum Bases de données
    Réponses: 5
    Dernier message: 29/04/2004, 17h02
  3. probleme sql avec delphi
    Par lil_jam63 dans le forum Bases de données
    Réponses: 7
    Dernier message: 25/02/2004, 04h32
  4. PL/Sql Débutant question
    Par Guld dans le forum Langage SQL
    Réponses: 2
    Dernier message: 22/02/2004, 17h48
  5. [Rave][Delphi][Base SQL] besoin d'informations
    Par David Altech dans le forum Rave
    Réponses: 1
    Dernier message: 30/07/2003, 13h59

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