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 :

Creer une table2 d'une table1 en utilisant SQL


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 187
    Points : 72
    Points
    72
    Par défaut Creer une table2 d'une table1 en utilisant SQL
    Helloww

    Bin, ma question est dans le titre :

    J'ai une base de donné immensement grande que je dois consulter frequement.
    Mais pour certaines actions independantes (Se trouvant sur different PageControl), il serait plus judicieux de créer d'autres tables (une pour chaque PageControl) qui serait deja filtré pour travailler dessus avec un net gain de temps.

    En gros, ce que je veux faire, c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select donne1, donne2, donne3 from Table1 where ...
    Et envoyer le resultat vers une table2

    Moyen... pas moyen!

  2. #2
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    Salut,

    Voici une requête pour copier des données d'une table vers une autre...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO tblClients2 ( NumCli, NomCli, PreCli )
    SELECT [Numéro Client], [Nom Client], [Prénom Client]
    FROM tblClients;
    Cependant je ne suis pas sûr de l'utiliter de la création d'une nouvelle table, puisque les composants ADO, par exemple, te permettent de créer ce genre de "tables triées", les données de ton Dataset étant remplies par requête.
    Mais si tu es vraiment obligé de recréer des tables, je te conseil de passer par des vues, si possible, cela évitera la redondance de stockage physique (si tu as déjà beaucoup de tables, c'est un point à ne pas négliger)

    A+.

  3. #3
    Membre actif Avatar de liazidf
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2002
    Messages : 281
    Points : 261
    Points
    261
    Par défaut Filtres
    Salut,
    Voici une autre solution qui consiste à utiliser une table, et comme vous utilisez PageControl, il vous reste à activer un filtre pour chaque page.
    Bon courage

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 187
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par PadawanDuDelphi
    Mais si tu es vraiment obligé de recréer des tables, je te conseil de passer par des vues, si possible
    Effectivement je n'y avais pas pensé, je commence à chercher comment faire pour les creations de vues

    Cependant :

    Citation Envoyé par liazidf
    comme vous utilisez PageControl, il vous reste à activer un filtre pour chaque page.
    1- Dabord et avant tout : N'hesites pas à me tutoyé
    2- Moi pas tres bien comprendre ce que tu me raconte là
    Comment faire pour activer un filtre different sur la meme base pour chaque PageControl??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PageControl1.filtre:= ????
    Thanks in advance

  5. #5
    Membre actif Avatar de liazidf
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2002
    Messages : 281
    Points : 261
    Points
    261
    Par défaut PageControl
    Salut,
    Voila un exemple de code pour effectuer tous les filtres que vous voulez.
    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
     
    procedure TForm1.PageControl1Change(Sender: TObject);
    begin
    case  PageControl1.ActivePageIndex of
     0:begin
        Table1.Filter:='First_Name ='+QuotedStr('A*');
        Table1.Filtered:=true;
       end;
     1:begin
        Table1.Filter:='First_Name ='+QuotedStr('B*');
        Table1.Filtered:=true;
       end;
     2:begin
        Table1.Filter:='First_Name ='+QuotedStr('C*');
        Table1.Filtered:=true;
       end;
    end;
    end;

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 187
    Points : 72
    Points
    72
    Par défaut
    Bien vu liazidf, ça marche nikel.

    Maintenant, rien que pour ma petite curiosité personnlle, j'ai une petite question sur cette ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table1.Filter:='First_Name ='+QuotedStr('A*');
    Cela veut dire qu'on affecte ue valeur à la table1 mais pourquoi ça ne fonctionne pas avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table1.Filter:= " First_Name= 'A*' "
    Thxs in advance

  7. #7
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    c'est la syntaxe des filtres rien faire. pour les filtres il est vivement conseillé d'utiliser les requetes, en plus avec les requetes on peux afficher les colonnes que je veux.

    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
    procedure TForm1.PageControl1Change(Sender: TObject);
    begin
    Query1.SQL.Add('SELECT * FROM VotreTable WHERE First_Name LIKE :Param');
     
    case  PageControl1.ActivePageIndex of
     0:begin
         Query1.Close; 
         Query1.ParamByName('Param').Value := ValeurText1+'%'; 
         Query1.Open;
       end;
     1:begin
         Query1.Close; 
         Query1.ParamByName('Param').Value := ValeurText2+'%'; 
         Query1.Open;
       end;
     2:begin
          Query1.Close; 
          Query1.ParamByName('Param').Value := ValeurText3+'%'; 
          Query1.Open;
       end;
    end;
    end;
    mais cette méthode ou celle de liazidf n'est pas conseiller si le résultat de vos données trops grand rsique de gélé votres application lors du passage d'une page a une autres alors le mieux c'est de définir pour chaque page une requette.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 187
    Points : 72
    Points
    72
    Par défaut
    Oui mais si tu veux affecter ce meme filtre dirrectement dans les propritees d'une table plus besoin du +QuotedStr( tu n'a qu'a ecrire :
    First_Name= 'A*'

  9. #9
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    Exact.
    Supposant que votre table contiens 20 Champs que pour chaque page vous voulez afficher des colonnes différentes je vous conseil vivement les requête SQL sa optimise vos ressource

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 187
    Points : 72
    Points
    72
    Par défaut
    Ma base de donnee contient plus de 90 000 champs.
    Et plus ou moins une centaine de collones.

    ça prend trop de temps avec les query SQL, je m'en suis sorti avec un programme alegé et bcp plus rapide en faisant une seule query SQL qui fait deja une pre-selection sur les données les plus interessantes/importantes.

    Apres, j'utilise les filtres sur ma seconde BD.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 187
    Points : 72
    Points
    72
    Par défaut
    Mais ceci ne me donne tjs as ma reponse à la ligne de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table1.Filter:='First_Name ='+QuotedStr('A*');

  12. #12
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Citation Envoyé par melles
    Oui mais si tu veux affecter ce meme filtre dirrectement dans les propritees d'une table plus besoin du +QuotedStr( tu n'a qu'a ecrire :
    First_Name= 'A*'
    y'a bien des quotes qui entoure A*
    c'est précisement ce que tu fais par programmation avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Table1.Filter:='First_Name ='+QuotedStr('A*');
    c'est toi qui choisis sois tu affecte la propriété dans l'inspecteur d'object sois tu programme et auquelle cas tu dois mettre QuotedStr qui ne fait que mettre un double quote a la chaine

    ou alors tu écris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Table1.Filter:='First_Name ='+'''A*''';

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 187
    Points : 72
    Points
    72
    Par défaut
    Merci Kaféine de ta reponse mais ma question etait justement pourquoi doit on ajouter les doubles cotes supplementaires en code alors qu''il ne faut pas le faire dans l'inspecteur d'objet?

    Serait ce le + qui fout la pagaille!!!

  14. #14
    Membre actif Avatar de liazidf
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2002
    Messages : 281
    Points : 261
    Points
    261
    Par défaut l'histoire de QuoteStr
    Salut,
    Pour être plus clair, mettez sus une forme un label, ensuite mettez par programmation cette phrase dans le caption: l'élement de controle, et tester votre programme, ceci va générer une erreur de syntax, et pour cause vous devez écrire :'l''élement de controle'

Discussions similaires

  1. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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