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 :

Base1 Table1 vers Base2 Table2


Sujet :

Bases de données Delphi

  1. #21
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Ta première erreur doit venir du fait que tu as déclaré la fonction en tant que méthode de classe au lieu de la laisser en tant que fonction (routine) :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    interface
      [...]
     
    function GetFieldSQLValue( AField: TField ): String;
    function GetSQLInsert( DataSetSource: TDataSet ): String;
     
    implementation
     
    function GetFieldSQLValue( AField: TField ): String;
    begin
      if AField.IsNull then
        Result := 'NULL'
      else if ( AField is TStringField ) then
        Result := QuotedStr( AField.AsString )
      else
        Result := AField.AsString;
    end;
     
    function GetSQLInsert( DataSetSource: TDataSet ): String;
    var
     SQLChamps, SQLValeurs: String;
     Cpt: Integer;
    begin
      for Cpt := 0 to DataSetSource.Fields.Count - 1 do
      begin
        SQLChamps := SQLChamps + ',' + DataSetSource.Fields[Cpt].FieldName;
        SQLValeurs := SQLValeurs + ',' + GetFieldSQLValue( DataSetSource.Fields[Cpt] );
      end;
     
      Delete( SQLChamps, 1, 1 );
      Delete( SQLValeurs , 1, 1 );
     
      Result := 'INSERT INTO matable(' + SQLChamps + ')'
             + ' VALUES(' + SQLValeurs  + ')';
    end;
    Sinon oui tu dois appeler la fonction GetSQLInsert à l'endroit où tu l'as précisé, en lui passant en paramètre ton ADOQ_source. Tu récupèreras une requête d'insertion que tu devras faire exécuter.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  2. #22
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Points : 47
    Points
    47
    Par défaut
    Aka dit:
    en lui passant en paramètre ton ADOQ_source. Tu récupèreras une requête d'insertion que tu devras faire exécuter.

    Sorry Aka, besoin de ton aide,
    je ne vois pas comment, puis-que je l'appel GetSQLInsert
    et il ne se passe rien... je suis perdu

  3. #23
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Et bien comme ça à priori :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    var
      vsSqlInsert: String;
     
    With ADOQ_source do
      begin
        Close;
        SQL.Clear;
        SQL.Add('Select * from grumeForabola_encours');
        Open;
      end;
     
      While not ADOQ_source.Eof do
      begin
        With ADOQ_destination do
        begin
          Close;
          SQL.Clear;
          SQL.Add('Select * from grumeForabola_encours');
          SQL.add('Where id_grumes = ' + ADOQ_source.FieldByName('id_grumes').AsString);
          Open;
     
          // traitement des cas
          if RecordCount > 0 then begin
           // Traitement des cas Identique et pas identique
          end
          else begin
            // Traitement du cas où les données ne sont pas trouvées dans ADOQ_destination
    // -------------------------------------
             vsSqlInsert := GetSQLInsert( ADOQ_source );
             // exécuter la requête SQL contenue dans la variable vsSqlInsert         
     
     
    // -------------------------------------
          end; // if
        end; // With
        ADOQ_source.next;
      end; // while
     
      With ADOQ_destination do
      begin
        Close;
        SQL.Clear;
        SQL.Add('Select * from grumeForabola_encours');
        Open;
      end;
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  4. #24
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Points : 47
    Points
    47
    Par défaut
    Quand tu dis
    // exécuter la requête SQL contenue dans la variable vsSqlInsert

    je dois y ajouter qq chose?

  5. #25
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Points : 47
    Points
    47
    Par défaut
    je l’ai attaché une progressBar pour voir l’avancement,
    Oui je vois la barre avancer mais quand je regarde la tb_destination
    Rien !!!
    Y a-t-il 1 autre moyen pour pouvoir constater si effectivement le procéder s’exécute ?

  6. #26
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Et bien oui tu dois remplacer mon commentaire par le code pour exécuter la requête comme tu l'avais fait dans ton premier post. Si tu ne le fais pas c'est certain que tes données en base ne seront pas ajoutées !! Ton programme boucle dans le vide quelque part.

    Donc si je reprends ton code depuis le début :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    var
      vsSqlInsert: String;
     
    With ADOQ_source do
      begin
        Close;
        SQL.Clear;
        SQL.Add('Select * from grumeForabola_encours');
        Open;
      end;
     
      While not ADOQ_source.Eof do
      begin
        With ADOQ_destination do
        begin
          Close;
          SQL.Clear;
          SQL.Add('Select * from grumeForabola_encours');
          SQL.add('Where id_grumes = ' + ADOQ_source.FieldByName('id_grumes').AsString);
          Open;
     
          // traitement des cas
          if RecordCount > 0 then begin
           // Traitement des cas Identique et pas identique
          end
          else begin
            // Traitement du cas où les données ne sont pas trouvées dans ADOQ_destination
    // -------------------------------------
             vsSqlInsert := GetSQLInsert( ADOQ_source );
             Close;
            SQL.Clear;
            SQL.Add( vsSqlInsert );
            try
              ExecSQL;
            Except on E:Exception do
              Memo1.Lines.add('Erreur insert new : ' + E.Message);
            end; // try
     
     
    // -------------------------------------
          end; // if
        end; // With
        ADOQ_source.next;
      end; // while
     
      With ADOQ_destination do
      begin
        Close;
        SQL.Clear;
        SQL.Add('Select * from grumeForabola_encours');
        Open;
      end;
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  7. #27
    Membre habitué
    Inscrit en
    Décembre 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Décembre 2007
    Messages : 94
    Points : 134
    Points
    134
    Par défaut
    Salu.Je te conseille fortement l'untilisation du datapump (dans le dossier borland) dans demarrer|programmes.
    Tu cré d'abord 2 connexions (avec bde recommandé) et tu te sers des alias pour exporter les données de base1/table 1 VERS base2/table 2 et le tour est joué.
    bonne chance

Discussions similaires

  1. [MySQL] Déplacer un enregistrement table1 vers table2
    Par Alyson_dev dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 20/12/2012, 13h50
  2. transfert du table1 vers table2 avec decoupage table2.champ2
    Par oscar.cesar dans le forum VBA Access
    Réponses: 7
    Dernier message: 23/10/2007, 06h10
  3. ADO.recordset de Base1 ajouter ds base2
    Par Pingpool dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 01/09/2006, 04h16
  4. Réponses: 4
    Dernier message: 26/04/2006, 10h09
  5. Copier données de table1 vers table2 dans paradox
    Par marcus333 dans le forum Bases de données
    Réponses: 3
    Dernier message: 26/03/2006, 18h05

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