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 :

TADOTable VS TADOQuery pour une mise a jour


Sujet :

Bases de données Delphi

  1. #1
    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 TADOTable VS TADOQuery pour une mise a jour
    J'avais poste a la suite de ce topic mais etant deja indique comme [resolu] je me demande si beaucoup de gens s'y sont interesses http://www.developpez.net/forums/vie...30033&start=15

    Je n'ai toujours pas trouve de solution.

    Y-at-il un moyen d'etre aussi efficace qu'un TADOTable en utilisant des TADOQuery dans ce cas precis :

    Recherche d'un element dans la base, mise a jour s'il existe ou insertion dans le cas contraire.

    L'avantage d'un TADOTable c'est que des que je trouve l'element je suis a la bonne place pour le mettre a jour avec locate..

    J'ai comme ca une dizaine de milliers d'elements a inserer ou mettre a jour en parcourant un fichier csv et depuis que je me sers des TADOQuery c'est bcp plus lent ...

    Je dois mal m'y prendre.

    Si quelqu'un peut m'aider !

  2. #2
    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
    Le problème avec un TAdoTable, c'est que tu auras en mémoire que la base de données à un instant précis.
    Ca veut dire que si des personnes font des mises à jours entre temps, tu ne les auras pas et eux n'auront pa les tiennes tant que tu ne feras pas un ApplyUpdate ou que tu ne fermeras pas la table.
    Passer par des TAdoQuery peut paraître plus lent (et encore , ca peut mettre plusieurs minutes pour ouvrir la table avec un TAdoTable), mais c'est beaucoup plus fiable que de passer avec un TAdoTable surtout lors de mises à jours.
    Modérateur Delphi

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

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 292
    Points : 222
    Points
    222
    Par défaut
    si je comprends bien, un TADOTable met tout en mémoire.

    pour faire l'équivalent essaie comme option tadoquery en mode statique déconnecté. je promets rien.

    En mode design tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CursorLocation : clUseClient
    CursorType : ctStatic
    L'utilisation est la suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Query.Open;
    Query.Connection := nil;
    Query.Edit;
     
    Query.Insert
    Query.Locate
    ...
    Query.DoStufff
    ..
     
    Query.Connection := MaConnection;
    Query.Post;

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 292
    Points : 222
    Points
    222
    Par défaut
    au fait comment tu fais pour faire de l'ado sur du csv ?

  5. #5
    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 je vais essayer des que possible je savais pas qu'on pouvait utiliser le resultat de la requete comme une table et la manipuler...

    Pour les csv c'est pas tres complique en considerant que le .csv a toujours la meme gueule (peut-etre que tu voudrais une methode plus generique), en gros je procede de cette maniere :

    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
    16
    17
    18
    19
    20
    21
     
    var strFichierCsv,strLigne:TStringlist;
     
    strFichierCsv := tstringlist.create;
    strFichierCsv.LoadFromFile(OpenDialog.FileName);
    strLigne := tstringlist.create;
     
    i := 0;
    while i < strFichierCsv.Count do
    begin
       if strFichierCsv[i] <> '' then
       begin
            strLigne.Clear;
            strLigne.Delimiter := ',';
            strLigne.QuoteChar := '"';
            strLigne.DelimitedText := strFichierCsv[i];
     
            //et la je gere mes requetes SQL en fonction des enregistrements  
            //contenus dans les strLigne[i]
       end
     end

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 292
    Points : 222
    Points
    222
    Par défaut
    ok j'avais complètement mal compris. Je croyais que ton TADOTable pointait directement sur un CSV.

    Tu cherches à modifier un fichier CSV ou une base en fonction de ce que contient un fichier CSV(dans ce cas pas besoin de parler de CSV du tout parle plutôt de mise à jour dans une table, je me trompe ?)

    Bon, rebelotte. Par exemple, si ta base est une base access, j'avais constaté qu'avec un cursor non pas clUseClient mais clUseServer c'est beaucoup plus rapide.

  7. #7
    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
    Oui oui je cherche a modifier une base en fonction de ce que contient un csv. Si j'ai mentionne le csv c'etait pour l'anecdote mais me semblait bien que c'etait clair que je parlais de mise a jour dans une base c'est meme dans le titre : o p !

    J'essaye tes recommandations des ce week end.

    Merci !

  8. #8
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Bonjour,
    Les mises à jour sont-elles critiques? Autrement dit, est-il indispensable de les faire dans le thread du processus principal?
    n'est-il pas envisageable de construire un thread de mise à jour avec un flag de surveillance des tables concernées? Je pense notemment à un flag sur les événements 'post, insert, update..' des tables
    Dés lors les performances des TAdoquery seront moins sujettes à débat, le thread de mise à jour s'exécutant en arrière plan.
    Cordialement,
    Hauwke

Discussions similaires

  1. developper une mise a jour pour un logiciel
    Par sali lala dans le forum C++
    Réponses: 3
    Dernier message: 03/03/2010, 10h13
  2. [MySQL] Utiliser la syntaxe d'un INSERT pour une mise à jour
    Par Concombre Masqué dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 04/05/2009, 21h14
  3. [MySQL] Erreur de syntaxe pour une mise à jour
    Par naim2009 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 29/03/2009, 03h42
  4. Pb de sous-requête pour une mise à jour
    Par Balthos dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 05/03/2008, 09h13
  5. Réponses: 4
    Dernier message: 02/05/2006, 12h08

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