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 :

Creation table temporaire SQL server


Sujet :

Bases de données Delphi

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 42
    Points : 31
    Points
    31
    Par défaut Creation table temporaire SQL server
    Bonjour,

    Je souhaite créer une table temporaire à partir d'une table existante. Dans l'analyseur de requête SQL server, ça marche. Mais sitôt que je transforme ça en deux requêtes ADOquery de delphi, ça ne marche plus.

    Texte dans l'analyseur de requêtes (qui fonctionne) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT * INTO #Asupprimer FROM ARTICLES
    select * from #Asupprimer
    J'obtiens bien la iste des articles.

    Si je fais le deux requêtes delphi correspondantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    1 - SELECT * INTO #Asupprimer FROM ARTICLES -> fonctionne
    2 - select * from #Asupprimer -> Ne fonctionne pas (erreur "#ASupprimer : Nom d'objet incorrect")
    ON dirait que la première requête n'a pas fonctionné car la table temporaire #Asupprimer semble ne pas exister...

    Je ne comprends pas.

    D'avance merci à ceux qui comprennent...

  2. #2
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    Les deux requêtes partagent-elles le même composant connexion ?
    A priori si la table temporaire n'est pas visible depuis l'autre requête, c'est qu'elles sont dans des sessions BD différentes.
    Eventuellement pour illustrer cela, et temporairement, tenter en doublant le # (la table temporaire est alors visible de toutes les sessions).

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 409
    Points : 5 799
    Points
    5 799
    Par défaut
    salut

    quel version de delphi ?
    est tu oblige de passer par ADOquery


    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  4. #4
    Débutant
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    cmen76,

    les deux requêtes partagent le même composant connexion. En effet, si je met "##" : ça marche.

    Je comprends pas bien pourquoi, ce n'est pas gênant ???.

    anapurna,

    Delphi 7, je me sers de composants ADO pour mon application, mais si il y a une autre solution, je suis preneur.

    Merci à vous por vos réponses.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    158
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 158
    Points : 158
    Points
    158
    Par défaut
    Bonjour,

    D'après ce que tu décris, entre la première et la deuxième requête ta table
    temporaire a du être supprimée (session fermé).

    Assures toi déjà que la première requête effectue bien son travaille. (Recordcount 0 ?)

    Tu peux regarder aussi du coté du CREATE, utilise t'il la même connexion que tes select.
    Sinon en utilisant des tables locales (#), tes select ne pourront pas accéder à la table.


    A+
    Pitango
    -------------------------------------------------
    [Delphi7.1 Entreprise][MYSQL 5.0.27][SQL SERVER 7][W2000/NT4]

  6. #6
    Débutant
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    Je ne pense pas fermer la session, les 2 requêtes s'enchainent et ont pour ADOconnection la même chose.

    Je ne sais pas si la première requête fai bien son travail car je fais un ADOQuery.EXECSQL, donc laseule manière de voir si elle fait bien son travail c'est de faire la deuxième requête, c'est-à-dire un select sur la table temporaie créée.

    Je n'ai pas de CREATE, puisque c'est la première requête qui crée la table temporaire...

    Je ne pige toujours pas ce qui se passe.

    Merci

  7. #7
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    Citation Envoyé par StarMusic Voir le message
    cmen76,
    (...)ce n'est pas gênant ???.
    Bien sûr que si, ça peut l'être : dans le cas où un deuxième client tenterait de créer la (même) table temporaire déjà utilisée par un premier...

    Vous pouvez tracer les SPID depuis le "Gestionnaire de profils" (outil fourni avec SQL Server) pour tenter de comprendre ce qui fait qu'une autre session soit créée pour le 2e query.

    Par ailleurs, peut-être pouvez-vous extraire les requêtes de votre projet et nous fournir le bout de code ?

    Courage...

    PS : Le problème ne pourrait-il pas être contourné par la création d'une procédure stockée ?

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    158
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 158
    Points : 158
    Points
    158
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * INTO #Asupprimer FROM ARTICLES
    Je ne connaissais pas cette possibilité de créer une table tempo à la volé.

    Sinon tu peux regarder après avoir passer ton ExecSQL,la propriété RowsAffected pour connaitre le nombre de lignes manipulées.
    Pitango
    -------------------------------------------------
    [Delphi7.1 Entreprise][MYSQL 5.0.27][SQL SERVER 7][W2000/NT4]

  9. #9
    Débutant
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    pitango,
    la propriété RowsAffected montre que la requête 1 fonctionne. (elle ramène le bon nombre de lignes).

    cmen76,
    Avec le "Gestionnaire de profils" (outil fourni avec SQL Server) je ne comprends pas tout ce qui se passe...

    Voici le code Delphi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // Requete de création de la table temporaire
    DataModuleRotaStock.ADOQueryCreeTableTemp.SQL.Text := 'SELECT * INTO TWEETER.#Asupprimer FROM ARTICLES WHERE (CodeFourn = :Param0) ORDER By Reference';
    DataModuleRotaStock.ADOQueryCreeTableTemp.parameters[0].value := trim(DataModuleRotaStock.ADODataSetFournisseurCodeFourn.Value);
    DataModuleRotaStock.ADOQueryCreeTableTemp.ExecSQL;
    test :=  DataModuleRotaStock.ADOQueryCreeTableTemp.RowsAffected;
     
    // Requête de lecture de la table temporaire
    DataModuleRotaStock.ADODataSetRecapEntreesSorties.Close;
    DataModuleRotaStock.ADODataSetRecapEntreesSorties.CommandText := 'SELECT * FROM TWEETER.#ASupprimer';
    DataModuleRotaStock.ADODataSetRecapEntreesSorties.Open;
    Merci pour vos réponses...

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    158
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 158
    Points : 158
    Points
    158
    Par défaut
    Cela n'a pas peut être rien à voir.

    Mais pourquoi ne pas utiliser un ADOQuery pour effectuer le open plustot que

    qu'un ADODataSet.
    Pitango
    -------------------------------------------------
    [Delphi7.1 Entreprise][MYSQL 5.0.27][SQL SERVER 7][W2000/NT4]

  11. #11
    Débutant
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    Merci de l'idée, j'ai testé, mais ça donne la même erreur....

  12. #12
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    Peut-être pourriez-vous essayer de globaliser ces actions au sein d'une transaction explicite (la table temporaire est peut-être détruite à la fin de la transaction).
    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
     
    DataModuleRotaStock.ADOConnection.BeginTrans;
    try
    // Requete de création de la table temporaire
      DataModuleRotaStock.ADOQueryCreeTableTemp.SQL.Text := 'SELECT * INTO TWEETER.#Asupprimer FROM ARTICLES WHERE (CodeFourn = :Param0) ORDER By Reference';
      DataModuleRotaStock.ADOQueryCreeTableTemp.parameters[0].value := trim(DataModuleRotaStock.ADODataSetFournisseurCodeFourn.Value);
      DataModuleRotaStock.ADOQueryCreeTableTemp.ExecSQL;
      test :=  DataModuleRotaStock.ADOQueryCreeTableTemp.RowsAffected;
     
    // Requête de lecture de la table temporaire
      DataModuleRotaStock.ADODataSetRecapEntreesSorties.Close;
      DataModuleRotaStock.ADODataSetRecapEntreesSorties.CommandText := 'SELECT * FROM TWEETER.#ASupprimer';
      DataModuleRotaStock.ADODataSetRecapEntreesSorties.Open;
      ...
    finally
      DataModuleRotaStock.ADOConnection.CommitTrans;
    end;

  13. #13
    Débutant
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    même erreur...

    Le csse-tête...

    Merci en tout cas.

Discussions similaires

  1. Changer le nom d'une table sur SQL server avec une requete
    Par Oluha dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 02/02/2014, 00h35
  2. creation table avec lignes d'une autre table sous Sql Server
    Par pops4 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 25/05/2007, 14h59
  3. tableau dynamique via une table sous sql server
    Par bibi2607 dans le forum ASP
    Réponses: 5
    Dernier message: 21/02/2005, 16h45
  4. UPDATE multi-tables sous SQL Server
    Par Cybernet dans le forum Langage SQL
    Réponses: 8
    Dernier message: 25/03/2004, 16h34
  5. MAJ d'une table sous SQL Server par insertion
    Par keish dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/06/2003, 17h23

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