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 :

CREATE suivi d'un INSERT


Sujet :

Bases de données Delphi

  1. #1
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut CREATE suivi d'un INSERT
    Ce code fonctionne bien :

    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
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      try
        screen.Cursor := CrHourGlass;
        WITH IboQuery1.SQL do
        begin
          Clear;
          ADD('CREATE TABLE TEMPO ');
          ADD('(UN NUMERIC(15,2), ');
          ADD('DEUX NUMERIC(15,2), ');
          ADD('TROIS NUMERIC(15,2))');
          IboQuery1.ExecSQL;
          Clear;
          ADD('INSERT INTO TEMPO (UN, DEUX, TROIS)  VALUES(1000,2000,3000)  ');
          IboQuery1.ExecSQL;
        end;
      finally
        Screen.Cursor := CrDefault;
      end;
    end;
    Mais peut-on le simplifier ?

    Cantador

  2. #2
    Membre confirmé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut
    Sauf erreur de ma part, ce que tu as tapé est le code exact d'une requète.
    Je vois mal comment tu pourrais faire plus simple, car à mon avis les abréviations style SMS n'existent pas en SQL
    Ce qui se conçoit bien s'énonce clairement
    Et les mots pour le dire viennent aisément (Boileau)

  3. #3
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    ah ah, pas mal..
    celle-là je n'y avais pas pensé !

    peut-on éviter les deux ExecSQL ?

    Cantador

  4. #4
    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
    Citation Envoyé par cantador Voir le message
    peut-on éviter les deux ExecSQL ?
    Non, c'est une requete par ExecSQL

    Certaine base de données permettent le multi-requete, mais ce n'est qu'un leure, car le moteur de base de données parse les requêtes et les transmet une à une.
    Modérateur Delphi

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

  5. #5
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    merci Rayec

  6. #6
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Mais peut-on le simplifier ?
    Selon les SGBD, tu peux créer la table à la volée, en même temps que tu calcule les données à stocker à l'intérieur.
    Par exemple sous Oracle :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    create table TEMPO as
    select 
      cast(1000 as numeric(15,2)) as UN,
      cast(2000 as numeric(15,2)) as DEUX,
      cast(3000 as numeric(15,2)) as TROIS
    from dual;

    Une seule requête, donc un seul ExecSQL.

    La même chose pour SQL Server :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select 
      cast(1000 as decimal(15,2)) as UN,
      cast(2000 as decimal(15,2)) as DEUX,
      cast(3000 as decimal(15,2)) as TROIS
    into TEMPO

    Mais bon, ça ne présente pas vraiment d'intérêt dans le cas général. Ca sert surtout à enregistrer le résultat d'un SELECT dans une table temporaire.
    Dans le cas général, on crée la table et on insère les données séparément.

    Certaine base de données permettent le multi-requete, mais ce n'est qu'un leure, car le moteur de base de données parse les requêtes et les transmet une à une.
    Je ne suis pas d'accord. Certains SGBD permettent en effet d'exécuter un batch contenant plusieurs statements en une seule fois.
    Mais ça n'a rien d'un leure. Le batch est envoyé d'un seul bloc au SGBD, qui le décomposera pour l'exécuter.
    Ca permet d'éviter d'envoyer de nombreuses petites requêtes au serveur et de se prendre le temps d'un PING à chaque requête.
    En les regroupants dans un même batch, on améliore souvent les performances de manière significative.

    Cependant, on ne peut pas tout mettre dans un même batch. Un create view par exemple doit toujours être la première instruction d'un lot.

  7. #7
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    J'ai également la possiblité de tout créer d'un seul coup avec un script
    soit dans le ScriptEditor ou le SqlEditor de SQL manager.

    Mais ce qui m'intéressait c'était de pouvoir le faire en delphi.

    Cela dit ça marche très bien aussi avec les deux execSQL.

    Cantador

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

Discussions similaires

  1. CREATE TRIGGER d'insertion ou de mise à jour
    Par SOPSOU dans le forum InterBase
    Réponses: 0
    Dernier message: 22/10/2009, 18h56
  2. Réponses: 7
    Dernier message: 20/02/2009, 12h56
  3. Insert OR Create dans une table
    Par Momodedf dans le forum SQL
    Réponses: 12
    Dernier message: 24/01/2008, 14h56
  4. [PDO] [SQLite] create table et insert impossible sous linux (ok sous windows)
    Par rebolon dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 31/07/2007, 15h59
  5. Réponses: 2
    Dernier message: 01/03/2006, 15h16

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