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 :

Plusieurs requêtes de création dans un seul composant ado => bug


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier Avatar de SkYsO
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 217
    Points : 122
    Points
    122
    Par défaut Plusieurs requêtes de création dans un seul composant ado => bug
    Bonjour à tous,

    j'ai un soucis avec un script sql que j'aimerai faire exécuter sous SQLServer.
    Je l'ai écrit avec l'éditeur fourni. Voici un exemple :

    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
    //--Test de l'existence de la procédure stockée
    IF EXISTS(SELECT name FROM sysobjects WHERE name = 'Get_Droit_Export_Simple')
    	DROP PROCEDURE Get_Droit_Export_Simple
     
    GO
     
    //--Déclaraction de la procédure stockée
    CREATE PROCEDURE Get_Droit_Export_Simple
    	@ID_Obj INT, //--l'identifiant de l'objet 
    	@TD_Obj INT, //--le type de l'objet
    	@Exportable BIT = 0 OUTPUT //--renvoi 0 si non exportable, 1 si exportable
    AS
    BEGIN
    	DECLARE @Nb INT 
     
    	//--requête pour vérifier la présence de droit
    	SELECT @Nb = COUNT(*)
    	FROM MB_Droits_Export
    	WHERE (ID_Objet= @ID_Obj) and (TD_Objet= @TD_Obj)	
     
    	IF @Nb > 0
    		SET @Exportable = 1
    END
    Si j'exécute ceci dans SQLServer ça marche sans problèmes. Par contre si j'envoi tout ça avec un TADOQuery, et bien ça bug sur le mot clé 'GO' il me dit : erreur de syntax vers le mot 'GO'.
    Est ce que le composant ADOQuery marche différement ?
    Pourquoi il n'arrive pas à faire comprendre mon GO ?

    Ensuite si j'enlève ce GO, et bien dans SQLServer il me dit que mon lot de requêtes doit commencer par une instruction CREATE/ALTER;
    Bref je suis un peu perdu.

    Merci pour votre aide

  2. #2
    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
    Pourquoi ne créés tu pas une procédure stockée de ce code puis après tu utilises un TAdoStoredProc ?

  3. #3
    Membre régulier Avatar de SkYsO
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 217
    Points : 122
    Points
    122
    Par défaut
    Une procédure stockée ?
    Pour gérer la création d'autres procédures stockées ?

    là en fait je suis dans le cas où je veux mettre à jour une base qui n'a encore aucune procédures stockées, triggers...

    je pense avoir mal compris ta réponse

  4. #4
    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 173
    Points
    4 173
    Par défaut
    En fait, GO ne fait pas parti du langage SQL de SQL Server.

    C'est un artifice utilisé par l'analyseur de requête de SQL Server pour lui dire de couper le batch a cet endroit et d'exécuter la requête immédiatement.

    Tu ne peux pas exécuter un script avec des GO depuis ADO. Tu dois exécuter deux requêtes : Une pour le if exists, et une autre pour créer la procédure stockée.

  5. #5
    Membre régulier Avatar de SkYsO
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 217
    Points : 122
    Points
    122
    Par défaut
    hum... merci

    Je dois donc découper mon fichier et exécuter une par une mes requêtes donc ?

  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 173
    Points
    4 173
    Par défaut
    Oui, c'est ce que je fait.

    Une autre possibilité c'est d'exécuter le script en ligne de commande avec osql.

  7. #7
    Membre régulier Avatar de SkYsO
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 217
    Points : 122
    Points
    122
    Par défaut
    En ligne de commande ? comment fait tu ça ?

  8. #8
    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 173
    Points
    4 173
    Par défaut
    Lance
    osql -?
    Ca te permettra de voir les paramètres à passer à osql pour executer un script.

    Pour lancer un script, un truc du genre :

    osql -S server\instance -U Login -P Password -d Database -i script.sql -o output.txt

  9. #9
    Membre régulier Avatar de SkYsO
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 217
    Points : 122
    Points
    122
    Par défaut
    Hum, ok. donc avec mon programme en Delphi il faut que je trouve le moyen de lancer ce genre de ligne de commande donc.

    Bon, je vais chercher comment faire merci en tout cas

  10. #10
    Membre régulier Avatar de SkYsO
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 217
    Points : 122
    Points
    122
    Par défaut
    ok ça marche super bien

    merci encore

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

Discussions similaires

  1. [E-03]Compiler plusieurs fichiers xls (fermés) dans un seul
    Par Geprocor dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/01/2018, 16h52
  2. plusieurs fonction d'agrégation dans une seul requête
    Par mohamedAmine00 dans le forum Hibernate
    Réponses: 2
    Dernier message: 08/04/2015, 20h31
  3. Plusieurs requêtes T-SQL dans une fonction
    Par ellix86 dans le forum Développement
    Réponses: 3
    Dernier message: 26/02/2009, 16h48
  4. Réponses: 3
    Dernier message: 31/08/2006, 07h04
  5. Réponses: 6
    Dernier message: 18/05/2006, 09h29

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