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 :

Batchmove en plusieurs parties


Sujet :

Bases de données Delphi

  1. #1
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut Batchmove en plusieurs parties
    Bonjour

    J'ai un petit problème avec mon programme. Je souhaite rapatrier une table d'SQL Server vers Access. Pour cela j'ai d'abord utilisé un batchmove mais il me perdait des enregistrements quand la table dépassait 150000 enregistrements. J'essaye donc de le faire en plusieurs parties pour ne pas perdre mes enregistrements à l'aide de 2 composants batchmove (1 en batCopy, l'autre en batAppend) et d'une boucle. Le soucis c'est qu'en faisant mes tests avec une table de 260000 enregistrements j'ai le message suivant :

    Ressource limite de la table temporaire
    Et la table n'est même pas créée sous Access alors que si la table fait 1600 enregistrements (il ne passe donc qu'une fois dans la boucle et n'utilise qu'un batchmove), ca fonctionne...

    Voilà le code :

    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
    22
    23
    24
          TTabDest.TableName := NomTable+'ADR';
          QuerybatchMove.close;
          QueryBatchmove.sql.clear;
          QueryBatchMove.sql.add('SELECT count(*) FROM tabtrav'+NomTable);
          QueryBatchMove.open;
          nb_enreg := QueryBatchMove.Fields[0].AsInteger;
          i := 1;
          // on boucle
          while (i <= nb_enreg) do
          begin
               Str(i,debut);
               Str((i+50000),fin);
               QuerybatchMove.close;
               QueryBatchmove.sql.clear;
               QueryBatchMove.sql.add('SELECT * FROM tabtrav'+NomTable);
               QueryBatchMove.sql.add('where IDTABLE >= '+debut+' and IDTABLE < '+fin);
               if i = 1 then
                    BatchMove2.Execute
               else
                    BatchMove3.Execute;
               TTabDest.close;
               TTabDest.TableName := NomTable+'ADR';
               i := i + 50000;
          end;
    Quelqu'un a une idée ?

    Merci

  2. #2
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut
    j'ai édité le titre de mon message qui n'était peut être pas très explicite.

    Je suis vraiment coincée, si quelqu'un avait une idée...

  3. #3
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut
    Je viens de refaire des tests avec ma table de 1600 et en diminuant le nombre d'enregistrement par boucle à 500 et ca fonctionne. Le problème ne vient donc pas de la boucle mais plutôt de la "table temporaire". Comment faire pour augmenter ces capacités ou la vider ?

  4. #4
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut
    en fait le batAppend n'est pas au point, je suppose qu'il doit garder toute la table en mémoire et il ne doit pas supporter un très grand nombre d'enregistrements.
    Finalement je crée plusieurs tables en batCopy que je fusionne à la fin et ca fonctionne.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/10/2007, 08h24
  2. Réponses: 4
    Dernier message: 09/08/2007, 10h26
  3. Affichage de texte en plusieurs partie dans la meme fenetre
    Par ClaudeHarvey dans le forum VBScript
    Réponses: 3
    Dernier message: 28/03/2007, 19h21
  4. Decoupé une fenêtre en plusieurs parties
    Par Premium dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 12/12/2006, 13h34
  5. Separer une page HTML en plusieurs parties
    Par cedre22 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 01/02/2006, 14h56

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