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 :

[DB] Nombre d'enregistrements d'une table


Sujet :

Bases de données Delphi

  1. #21
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 129
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par Amenofis
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Function NbRecord(NomTable:TTable):integer;
    begin
    With TQuery.Create(nil) do
       begin
       SQL.Add('SELECT COUNT(*) AS Total FROM "'+NomTable.TableName+'"');
       Open;
       if RecordCount<>0
          then result:=FieldValues[Total]
          else resull:=-1;
       Active:=false;
       end;
    end;
    Une petite question, quand on utilise la creation d'une instance d'une classe avec le with et .create, ca nous dispense de faire le free parce qu'il est fait automatiquement a la fin du bloc ou c'est juste un oubli dans ton exemple ?

    Merci, en tout cas je connaissais pas cette possibilite et c'est bien pratique !

  2. #22
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    C'est un oubli. Le TQuery étant créé avec un owner à nil, il ne sera pas détruit. Il faut écrire :

    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
    Function NbRecord(NomTable:TTable):integer; 
    begin 
      With TQuery.Create(nil) do
      try  
        // la il faut relier le TQuery à une connexion
        // ...
        SQL.Add('SELECT COUNT(*) FROM "'+NomTable.TableName+'"'); 
        Open; 
        // pas besoin de tester recordcount, la requête renverra toujours un enreg 
        result:=Fields[0].AsInteger;
        Close; 
      finally
        Free;
      end;
    end;
    Bloon

  3. #23
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 129
    Points : 95
    Points
    95
    Par défaut
    (Merci pour ta reponse Bloon : o p)

    En faite le sujet me fait poser une question qui va peut-etre vous paraitre idiote ...

    Si la base de donnee de mon appli se situe sur le reseau (avec plusieurs instances de mon appli sur les differents postes qui vient piocher dedans); on en arrive au meme probleme que le TTable non ? Quand je fais une requete SQL, l'appli doit telecharger l'ensemble de la base (.mdb car je code en ADO) pour pouvoir faire la requete en local ? Ou c'est pas comme ca que ca marche ?

    Par contre si j'utilise un serveur SQL, c'est lui qui fera les requetes a la place du poste de travail donc il n'y aura plus qu'a recuperer le resultat de la requete : gain de rapidite et d'encombrement reseau ? J'essaye de comprendre j'ai pas trop l'habitude de manier les BD...

    Dans ce cas la, c'est complique d'adapter mon prog pour qu'il se connecte a un serveur SQL access ?

    Merci pour vos reponses qui je l'espere pourront m'eclairer sur ce sujet un peu flou...

  4. #24
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 129
    Points : 95
    Points
    95
    Par défaut
    Un premier element de reponse ici

    http://sql.developpez.com/sgbdr/

    En faite ma base ne devrait pas faire plus de 150 megas. Je verrais quand je la deploierais si je constate des lenteurs ou non...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Quand je fais une requete SQL, l'appli doit telecharger l'ensemble de la base (.mdb car je code en ADO) pour pouvoir faire la requete en local ?
    Si quelqu'un peut me confirmer tout de meme que c'est bien ca, parce que si j'en m'en refere au tableau descripitif sur mon lien ca n'a pas l'air de lui faire peur 150 megas, mais s'il faut les telecharger a chaque fois...

  5. #25
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 129
    Points : 95
    Points
    95
    Par défaut
    J'avoue que je comprends plus grand chose (ce post n'a pas de rapport avec mes deux precedents).

    Suite a vos conseils j'ai vire mes composants TTable.

    Je dois mettre a jour une base de donnee avec un fichier csv qui compte un grand nombe de lignes. Au depart j'utilisais des TTable et pour chaque element a inserer dans la Table je regardais avec l'aide d'un locate s'il n'existait pas deja, auquel cas je faisais un edit, sinon je faisais un insert. Ca marchait pas mal.

    Maintenant toujours dans la meme boucle correspondant a chaque ligne a inserer j'effectue une requete sql select count pour savoir si l'element est deja present et selon le cas un insert ou un update via SQL.

    Resultat c'est cent fois plus long maintenant ! Je me dis que ce n'est pas votre recommandation qui est en cause mais ma maniere la comprendre et d'effectuer les requetes SQL. J'ai essaye de comprendre dites moi si c'est bien ca :

    En faite en utilisant un TADOTable la table est chargee une bonne fois pour toute en memoire et je ne fais plus que l'utiliser a chaque iteration alors qu'avec mes requetes select count je la recharge a chaque iteration ? Ce que vous dite c'est juste qu'au lieu d'utiliser un TADOTable quand on en veut qu'une partie c'est plus malin de passer par une requete SQL. Mais quand on veut justement toute la table ?

    En faite je vois pas trop comment faire sans passer par les TADOTable tout en etant au moins aussi "rapide"...

    Quelqu'un peut m'aider ?

    (J'ai tjs pas resolu non plus le probleme precedent )

  6. #26
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 129
    Points : 95
    Points
    95
    Par défaut


    Je ne m'en sors pas vraiment : o (

    Quelqu'un pour m'aider ?

  7. #27
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 129
    Points : 95
    Points
    95
    Par défaut
    Bonjour a tous..

    J'ai suspendu le dev de mon appli mais je compte maintenant m'y replonger...

    J'ai remplace ma base Access par une base mysql server et je suis encore plus paume...

    Je ne comprends rien avec ses histoires de curseur, si je mets le curseur de mon TADOTable a csuseserver c'est toujours le meme probleme (il rapatrie toute la table a chaque fois et sature le reseau) ? Et c'est quoi la difference entre les deux modes de curseur avec une base Access vu qu'il n'y a pas de "serveur".

    Pour en revenir avec une question que j'ai pause il y a quelques mois, je dois inserer dans une table une liste d'elements (assez grande). Pour chaque element s'il est deja present, ce qui est souvent le cas, il faut que j'update, sinon je dois l'inserer dans la table. Est-ce que la methode par requete sql est bien la plus efficace : necessite deux parcours pour un update (un premier pour voir si l'element existe, un deuxieme pour l'update)
    ou il y a un autre moyen qui profiterai du premier parcours pour garder la position eventuellement trouvee de l'element pour le mettre a jour ce que semblait faire TAdoTable.

    Voila tout ca est un peu flou pour moi...

    A y etre quelqu'un aurait un exemple de code source de gestion d'une table assez simple avec ms sql server et les composants ADO ?


    Merci pour vos reponses !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. limiter le nombre d'enregistrements dans une table
    Par Vincent_59 dans le forum Modélisation
    Réponses: 8
    Dernier message: 09/07/2007, 10h01
  2. [SQL] Problème avec nombre d'enregistrements dans une table
    Par zana74 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 14/08/2006, 13h28
  3. Problème avec nombre d'enregistrements dans une table
    Par zana74 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/08/2006, 13h21
  4. [SQL] nombre d enregistrement d une table
    Par sharpeye dans le forum Access
    Réponses: 1
    Dernier message: 03/11/2005, 18h46
  5. Nombre d'enregistrement dans une table MySQL
    Par tom06440 dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 21/10/2005, 19h07

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