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

Windows Discussion :

Affectation de variable sur réponse OSQL


Sujet :

Windows

  1. #1
    Membre du Club Avatar de smooncef
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 118
    Points : 66
    Points
    66
    Par défaut Affectation de variable sur réponse OSQL
    Bonjour,

    Je souhaiterais affecter une variable sur la reponse d'une requete OSQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET var=OSQL -E -Q select toto from tabletoto where toto='D'
    Mais le soucis est que la variable prends la requête comme valeur et non la réponse de la requête.

    Need some help please.
    Peace ...

  2. #2
    Membre du Club Avatar de smooncef
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 118
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par smooncef Voir le message
    Bonjour,

    Je souhaiterais affecter une variable sur la reponse d'une requete OSQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET var=OSQL -E -Q select toto from tabletoto where toto='D'
    Mais le soucis est que la variable prends la requête comme valeur et non la réponse de la requête.

    Need some help please.
    J'ai trouvé,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SET var=OSQL -E -Q select toto from tabletoto where toto='D'
    SET var1=%var%
    Peace ...

  3. #3
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    si non on peut faire sa aussi avec une boucle for, en une seul ligne

  4. #4
    Membre du Club Avatar de smooncef
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 118
    Points : 66
    Points
    66
    Par défaut
    Bah non finalement ça ne fonctionne pas dans ce contexte !!!
    Les voies de l'informatique sont impénétrables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @SET REPONSE=
    @SET FICDATA=
    @SET FICLOG=
    @SET FICDATA=CALL %REPFIC%\recupdata.bat
    @SET FICLOG=CALL %REPFIC%\recuplog.bat
    OSQL -E -Q "RESTORE DATABASE %CLIENT% FROM DISK=N'%REPBACK%\%FICBAK%' 
    WITH MOVE '%FICDATA%' TO '%REPDATA%\%CLIENT%_Data.mdf', 
    MOVE '%FICLOG%' TO '%REPLOG%\%CLIENT%_Log.ldf'"
    @IF NOT EXIST "%REPDATA%\%CLIENT%_Data.mdf" GOTO bdd2
    @IF NOT EXIST "%REPLOG%\%CLIENT%_Log.ldf" GOTO bdd2
    @ERASE %REPBACK%\%FICBAK%
    %SLEEP4%
    J'ai comme réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    D:\BasesClients>OSQL -E -Q "RESTORE DATABASE TOTO FROM DISK=N'D:\BasesClients\BACKUP\BACKUP.BAK' 
    WITH MOVE 'CALL D:\BasesClients\recupdata.bat' TO 'D:\BasesClients\DATA\TOTO_Data.mdf', 
    MOVE 'CALL D:\BasesClients\recuplog.bat' TO 'D:\BasesClients\LOG\TOTO_Log.ldf'"
    Msg 3234, Niveau 16, État 2, Serveur 2835B, Ligne 1
    Le fichier logique 'CALL D:\BasesClients\recupdata.bat' ne fait pas partie de la base de données 'TOTO'. 
    Utilisez RESTORE FILELISTONLY pour lister les noms de fichier logiques.
    Msg 3013, Niveau 16, État 1, Serveur 2835B, Ligne 1
    RESTORE DATABASE s'est terminé anormalement.
    Peace ...

  5. #5
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    sache que tu ne peut mettre qu'un seul ligne dans une variable

  6. #6
    Membre du Club Avatar de smooncef
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 118
    Points : 66
    Points
    66
    Par défaut
    Ok, donc je suis obligé de passer par une boucle for !
    Peace ...

  7. #7
    Membre du Club Avatar de smooncef
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 118
    Points : 66
    Points
    66
    Par défaut
    Voici ma boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FOR /F "tokens=* delims=- " %%a in ('OSQL -E -Q "SELECT LogicalName FROM FicLogiques WHERE Type='D'"') do (set FICDATA=%%a)
    voici ce que ça affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    D:\BasesClients>(set FICDATA=                           )
    
    D:\BasesClients>(set FICDATA= )
    
    D:\BasesClients>(set FICDATA=   ----------------------  )
    
    D:\BasesClients>(set FICDATA=NOM_DE_LA_BASE
                      )
    
    D:\BasesClients>(set FICDATA=                           )
    
    D:\BasesClients>(set FICDATA=(1 ligne affectée) )
    (1 ligne affectée)
    Et là je souhaite récupérer la ligne "NOM_DE_LA_BASE" en sachant que le nom fluctue tout le temps.
    Peace ...

  8. #8
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FOR /F "tokens=*" %%a in ('OSQL -E -Q "SELECT LogicalName FROM FicLogiques WHERE Type='D'" ^|find "NOM_DE_LA_BASE"') do set FICDATA=%%a
    Je présume que tu veut ne récupérer que le nom de la base, je me trompe ?

    Dans se que tu a poster, le résulta de ta boucle, tu l'a enlever le nom de la base ou il n'est pas afficher ?

  9. #9
    Membre du Club Avatar de smooncef
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 118
    Points : 66
    Points
    66
    Par défaut
    J'ai modifié le nom de la base
    Mais l'essentiel est de savoir que le nom de sortie n'est jamais le même.
    Il change tout le temps.
    Donc NOM_DE_LA_BASE n'est jamais le même, donc la boucle que tu m'as soumis n'es pas encore juste.
    Il faut que j'arrive à afficher que la linge qui m'intéresse.
    Peace ...

  10. #10
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    set vrCompt=0
    
    setlocal enableDelayedExpansion 
    
     FOR /F "tokens=*" %%a in ('OSQL -E -Q "SELECT LogicalName FROM FicLogiques WHERE Type='D'" ^|find "NOM_DE_LA_BASE"') do (
                                set /a vrCompt+=1
                                 if %vrCompt%==4 set FICDATA=%%a
    
       )
    
    endlocal

  11. #11
    Membre du Club Avatar de smooncef
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 118
    Points : 66
    Points
    66
    Par défaut
    Merci, mais ça ne résout pas mon problème de recherche du nom de la base.
    Car tu me propose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FOR /F "tokens=*" %%a in ('OSQL -E -Q "SELECT LogicalName FROM FicLogiques WHERE Type='D'"^|find "NOM_DE_LA_BASE"'
    Mais sachant que NOM_DE_LA_BASE n'est jamais le même, ça ne fonctionnera jamais.
    Peace ...

  12. #12
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    ah merde j'ai pas fini le code désolé

    je fini

  13. #13
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    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
    @echo off & color 0A
    
    
    set vrCompt=0
    
    setlocal enableDelayedExpansion 
    
     FOR /F "tokens=*" %%a in ('OSQL -E -Q "SELECT LogicalName FROM FicLogiques WHERE Type='D'"') do (
                                set /a vrCompt+=1
                                 if %vrCompt%==4 set FICDATA=%%a
    
       )
    
    endlocal 
    
    
    
    
    
    
    pause>nul

  14. #14
    Membre du Club Avatar de smooncef
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 118
    Points : 66
    Points
    66
    Par défaut
    Tu veux essayer de me faire la surprise avec le COLOR ?
    je connaissais déjà l'astuce pour changer de couleur le texte et le fond

    Tu as même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    title Fenetre prise de tete
    Pour donner un nom à ta fenetre batch
    Peace ...

  15. #15
    Membre du Club Avatar de smooncef
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 118
    Points : 66
    Points
    66
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ::echo off
    title Fenetre prise de tete
    color 0A
    
    set vrCompt=0
    setlocal enableDelayedExpansion 
    
    @FOR /F "tokens=*" %%a in ('OSQL -E -Q "SELECT LogicalName FROM FicLogiques WHERE Type='D'"') do (
    						set /a vrCompt=+1
    					if %vrCompt%==4 set FICDATA=%%a
    	@ECHO %FICDATA%
    		)
    endlocal
    Probleme le vrCompt et toujours égale à 0 !!!
    j'ai essayer comme sur l'exemple =+1, mais ça n'incrémente pasla variable !?!
    Peace ...

  16. #16
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    ah oui suis je bête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ::echo off
    title Fenetre prise de tete
    color 0A
    
    set vrCompt=0
    setlocal enableDelayedExpansion 
    
    @FOR /F "tokens=*" %%a in ('OSQL -E -Q "SELECT LogicalName FROM FicLogiques WHERE Type='D'"') do (
    						set /a vrCompt=+1
    					if !vrCompt!==4 set FICDATA=%%a
    	@ECHO %FICDATA%
    		)
    endlocal

  17. #17
    Membre du Club Avatar de smooncef
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 118
    Points : 66
    Points
    66
    Par défaut
    Toujours pas !!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ::echo off
    title Fenetre prise de tete
    color 0A
    
    set vrCompt=0
    setlocal enableDelayedExpansion 
    
    @FOR /F "tokens=*" %%a in ('OSQL -E -Q "SELECT LogicalName FROM FicLogiques WHERE Type='D'"') do (
    						set /a vrCompt=vrCompt+1
    					if !vrCompt!==4 set FICDATA=%%a
    	@ECHO %FICDATA%
    		)
    endlocal
    Il n'incrémente pas du tout vrCompt, j'ai essayé avec vrCompt=vrCompt+1
    Mais rien à faire !
    Peace ...

  18. #18
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    essaye ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ::echo off
    title Fenetre prise de tete
    color 0A
    
    set vrCompt=0
    setlocal enableDelayedExpansion 
    
    @FOR /F "tokens=1,* delims=:" %%a in ('findstr /n /r . OSQL -E -Q "SELECT LogicalName FROM FicLogiques WHERE Type='D'"') do (
    					if %%i==4 set FICDATA=%%a
    		)
    endlocal

  19. #19
    Membre du Club Avatar de smooncef
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 118
    Points : 66
    Points
    66
    Par défaut
    9a sort une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    >title Fenetre prise de tete
    
    >color 1C
    
    >set vrCompt=0
    
    >setlocal enableDelayedExpansion
    FINDSTR*: Impossible d'ouvrir OSQL
    FINDSTR*: Impossible d'ouvrir -E
    FINDSTR*: Impossible d'ouvrir -Q
    FINDSTR*: Impossible d'ouvrir SELECT LogicalName FROM FicLogiques WHERE Type='D'
    
    >endlocal
    Problème de guillemets je crois car lorsque je modifie le code comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @FOR /F "tokens=1,* delims=:" %%a in ("findstr /n /r . 'OSQL -E -Q "SELECT LogicalName FROM FicLogiques WHERE Type='D'"'") do (
    					if %%i==4 set FICDATA=%%a
    Ca donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >(if %i == 4 set FICDATA=findstr /n /r . 'OSQL -E -Q "SELECT LogicalName FR
    OM FicLogiques WHERE Type 'D'"' )
    Le système ne peut trouver le fichier §j§‼↑N
    ?§FTWARE\Microsoft\Windows NT\CurrentVersion\SystemRoot%System32.
    
    >endlocal
    Je crois que c'est le Type de ma table qui pose problème, il doit être interpolé. J'ai modifié la structure de ma base pour que le champs s'appelle TypeName car Type est une commande DOS.

    Je doute tout de même que ce soit la solution.
    Peace ...

  20. #20
    Membre du Club Avatar de smooncef
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 118
    Points : 66
    Points
    66
    Par défaut
    J'ai fini par trouver une solution :

    J'ai récupéré uniquement le code ci-dessous que j'ai intégré dans mon batch général :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @FOR /F "tokens=* delims= " %%a in ('OSQL -h-1 -n -E -Q "SET nocount ON;SELECT LogicalName FROM FicLogiques WHERE TypeName='D'"') do (set FICDATA=%%a)
    A la fin avec mon do(set), j'affecte la variable, et la récupère plus tard et ça fonctionne bien, le résultat est celui escompté.

    Tu es d'une aide précieuse.

    Merci beaucoup.


    Peace ...

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/01/2012, 00h31
  2. Affectation d'une variable sur un SELECT
    Par pc.bertineau dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 12/08/2009, 11h46
  3. Réponses: 2
    Dernier message: 02/07/2009, 15h05
  4. Réponses: 2
    Dernier message: 22/05/2009, 23h00
  5. Utilisation d'une variable sur plusieurs unités
    Par Yamaneko dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2003, 11h23

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