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

 Delphi Discussion :

enregistrement d'une requête directement dans une table


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Par défaut enregistrement d'une requête directement dans une table
    Re Salut tous.J'aimerais s avoir si il est possible de ma requete de pouvoir enregistrer tous les enregistrements dans une table ? sans obligatoirement les affichés dans un DBGrid
    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
    With DataModule1.Query10 do
      begin
        SQL.Clear;
        SQL.Add('select * from Amicalistes.DB ');
        SQL.Add('where Date1 between :Date10 and :Date12');
     
        ParamByName('Date10').AsDateTime := DateTimePicker1.Date;
        ParamByName('Date12').AsDateTime := DateTimePicker2.Date;
     
        //try
          Open;
     
     //action
     
        end;
      end;
    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 597
    Billets dans le blog
    65
    Par défaut
    sans obligatoirement les affichés dans un DBGrid
    rien n'oblige a afficher un dataset dans une dbgrid !


    Enfin, dépendant de la BDD non indiquée mais en général
    un SQL du genre fera le travail , sans même avoir a ouvrir un dataset !

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO TABLE2 SELECT * FROM TABLE1 <WHERE ....>
    cela pour 2 Tables identiques

    Après l'on peut affiner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO TABLE1 (CHAMP1,CHAMP2) SELECT CHAMPA,CHAMPB FROM TABLE2 <WHERE .....>

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Par défaut requete
    Oui excuse sergio je travail avec une table paradox.

    mais dans le code que tu me montre je ne peux enregistrer qu'un seul enregistrement ?
    avec ma requete j'ai environs 250 lignes de trouver, il faut une boucle surement ?
    mais je ne vois pas qu elle condition mettre pour faire l'enregistrement multiple de ma requete dans une autre table

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Pour paradox, cela me semble du SQL un peu trop poussé !
    regarde la méthode TTable.BatchMove

    un peu de lecture Paradox cookbook de Frédéric BROUARD (SQLPro)

    Sinon, pourquoi ne pas finir le code que tu as commencé ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Query.Open;
    while not Query.EOF do
    begin
      DestTable.Append();
      for i := 0 to DestTable.FieldCount - 1 do
      begin
        /*TField*/ Field := Query.FindField(DestTable.Fields[i].FieldName);
        if Assigned(Field)
          DestTable.Fields[i].Value := Field.Value;
      DestTable.Post();
      Query.Next();
    end;
    Sinon en SQL, un INSERT SELECT va copier l'ensemble de la requête dans la table, c'est très pratique, je l'ai souvent utilisé en MySQL, c'est le SQL qui le gère pas de boucle mais c'est innapliquable à Paradox !

    Sous le module DB de Delphi 6 : fonctionnalité non supporté

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    insert into "c:\2myparadoxexe.db" (field_1, field_2, field_3)
    select field_1, field_2, field_3 from "c:\2myparadoxexe.db"

    Mais, on peut tricher un peu avec le Module DB
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select field_1, field_2, field_3 from "c:\2myparadoxexe.db"
    puis
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    insert into "c:\2myparadoxexe.db" (field_1, field_2, field_3) 
    select * from ":prive:reponse.db"

    Je ne connais pas comme fonctionne L'Explorateur SQL qui utilise le BDE, il doit probablement générer des tables temporaires lui aussi mais avec des numéro plutôt qu'un nom fixe comme ":prive:reponse.db", du coup, je ne sais pas faire un speudo INSERT SELECT avec L'Explorateur SQL !

    Si tu arrive à reproduire le comportement du Module DB via FieldsDefs.Assign + CreateTable pour créer la table temporaire, c'est jouable
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 597
    Billets dans le blog
    65
    Par défaut
    Effectivement ,avec paradox et BDE la méthode la plus simple reste le Batchmove

  6. #6
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Citation Envoyé par tarmo57 Voir le message
    Oui excuse sergio je travail avec une table paradox.

    mais dans le code que tu me montre je ne peux enregistrer qu'un seul enregistrement ?
    avec ma requete j'ai environs 250 lignes de trouver, il faut une boucle surement ?
    mais je ne vois pas qu elle condition mettre pour faire l'enregistrement multiple de ma requete dans une autre table
    Salut,

    Cela dépend de ce que tu souhaites en faire après...

    Car par exemple tu peux trés bien créer un Record

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Type
      TAmicale = Record
        Code     : String;
        Nom      : String;
        Date1   : String;
      End;
     
    // ...
     
    Var
      Amicales           : Array of TAmicale ;

    Ensuite tu peux t'amuser avec :

    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
    procedure ArrayOfAmicales;
    var
      n : Integer;
    begin
     
      SetLength(Amicales,0);
      Finalize(Amicales);
     
      With DataModule1.Query10 do
      begin
        SQL.Clear;
        SQL.Add('select * from Amicalistes.DB ');
        SQL.Add('where Date1 between :Date10 and :Date12');
        try
          Active := True;
          SetLength(Amicales,Recordset.RecordCount);
          for n := 0 to High(Amicales) do
          begin
            Amicales[n].Code   := FieldByName('Code').AsString;
            Amicales[n].Nom    := FieldByName('Nom').AsString;
            Amicales[n].Date1  := FieldByName('Date1').AsString;
            next;
          end;
        finally
          Close;
        end;
      end;
    end;
    Et donc tu peux l'enregistrer ou tu veux par la suite, dans un fichier texte, te servir de ton record pour alimenté une base etc...

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Par défaut Super
    Impeccable merci a tous de votre aide

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

Discussions similaires

  1. [AC-2007] Concaténation dans une fonction et dans une requéte InsertInto
    Par Max_Agaki dans le forum VBA Access
    Réponses: 5
    Dernier message: 29/01/2015, 14h32
  2. Réponses: 1
    Dernier message: 12/12/2011, 10h07
  3. Réponses: 3
    Dernier message: 07/04/2011, 14h38
  4. erreur dans une requête sql dans une fonction php
    Par frboyer dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2009, 13h37
  5. [Requête] Utilisation d'une fonction perso dans une requête
    Par Julien Dufour dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 16/03/2007, 09h53

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