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

MS SQL Server Discussion :

Aidez moi, j'y arrive pas!


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Homme Profil pro
    kiné passionné de dev
    Inscrit en
    Mars 2006
    Messages
    1 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : kiné passionné de dev

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 570
    Billets dans le blog
    1
    Par défaut Aidez moi, j'y arrive pas!
    Bonjour,
    voilà mon problème, je n'arrive pas a donner une valeur à une varriable.

    que je fasse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select @idobj=id from documents where titre=@titredoc
    ou:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set @idobj=(select id from documents where titre=@titredoc)
    Celà me dit: impossible d'inserer valeur null, celà parce que je l'ai interdit,mais ça ne devrait pas etre null!

    Voilà ma proc en entier .
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    ALTER PROCEDURE proc_enregistreemprunt
    (
    @titredoc nvarchar,
    @nomemp nvarchar,
    @prenomemp nvarchar,
    @dateemprunt datetime
    )
     
    AS
    declare @idemp int
    declare @idobj int
    set @idemp=(select id from  emprunteur where nom=@nomemp and prénom=@prenomemp)
    set @idobj=(select id from documents where titre=@titredoc)
    declare @etat bit
    declare @return as int;
    set @Etat = (SELECT TOP 1 Rendu FROM Emprunt WHERE IdDocument=@idobj ORDER BY dateemprunt Desc)
    if @Etat = 1 or @Etat is null	/* s'il y a pas de ligne ou que l'objet est rendu */
    Begin
    insert into emprunt
    (idDocument,Idemprunteur,dateemprunt)
    values (
    	@idobj,
    	@idemp,
    	@dateemprunt /* Current_TimeStamp, */
    	 /* Val à 0*/
    	)
    set @return=@@identity	/* Retourne le numéro de la nouvelle ligne */
    end
     
    else 
    begin
    set @return = 0
    end
    RETURN @return

  2. #2
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    essaies comme ca (tu verras si tes valeurs ne sont pas nulles)

    ALTER PROCEDURE proc_enregistreemprunt
    (
    @titredoc nvarchar,
    @nomemp nvarchar,
    @prenomemp nvarchar,
    @dateemprunt datetime
    )

    AS
    declare @idemp int
    declare @idobj int

    SELECT @idemp=id FROM emprunteur WHERE nom=@nomemp AND prénom=@prenomemp

    if (isnull(@idemp,0)=0)
    begin
    raiserror('@idemp null...',16,1)
    SET @RETURN = -1
    return @RETURN
    end

    SELECT @idobj=id FROM documents WHERE titre=@titredoc

    if (isnull(@idobj,0)=0)
    begin
    raiserror('@idobj null...',16,1)
    SET @RETURN = -1
    return @RETURN
    end

    declare @etat bit
    declare @RETURN AS int;
    SET @Etat = (SELECT TOP 1 Rendu FROM Emprunt WHERE IdDocument=@idobj ORDER BY dateemprunt DESC)
    IF @Etat = 1 OR @Etat IS NULL /* s'il y a pas de ligne ou que l'objet est rendu */
    Begin
    INSERT INTO emprunt
    (idDocument,Idemprunteur,dateemprunt)
    VALUES (
    @idobj,
    @idemp,
    @dateemprunt /* Current_TimeStamp, */
    /* Val à 0*/
    )
    SET @RETURN=@@identity /* Retourne le numéro de la nouvelle ligne */
    end

    else
    begin
    SET @RETURN = 0
    end
    RETURN @RETURN__________________

  3. #3
    Membre éprouvé

    Homme Profil pro
    kiné passionné de dev
    Inscrit en
    Mars 2006
    Messages
    1 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : kiné passionné de dev

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 570
    Billets dans le blog
    1
    Par défaut
    Merci beaucoup!!!

    Mais, il se trouve que c'est @idemp qui est vide, alors que ce que @nomemp et @prenomemp sont correctements remplis.

    Si quelqu'un a une idée.

  4. #4
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    rajoutes au début

    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
     
    ALTER PROCEDURE proc_enregistreemprunt
    (
    @titredoc nvarchar,
    @nomemp nvarchar,
    @prenomemp nvarchar,
    @dateemprunt datetime
    )
     
    AS
    declare @idemp int
    declare @idobj int
     
    if not exists(select 1 from emprunteur WHERE nom=@nomemp AND prénom=@prenomemp)
    raiserror('pas d''enregistrement',16,1)
     
     
    SELECT @idemp=id FROM emprunteur WHERE nom=@nomemp AND prénom=@prenomemp
    ...

  5. #5
    Membre éprouvé

    Homme Profil pro
    kiné passionné de dev
    Inscrit en
    Mars 2006
    Messages
    1 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : kiné passionné de dev

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 570
    Billets dans le blog
    1
    Par défaut
    Merci, mais les données que je rentre en nom et emprunt sont bien dans la table, alors normalement, ça ne devrait pas etre num.

    Je respecte meme majuscules et minuscules.

    Alors, je ne comprend pas pourquoi ça ne fonctionne pas...

  6. #6
    Membre éprouvé

    Homme Profil pro
    kiné passionné de dev
    Inscrit en
    Mars 2006
    Messages
    1 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : kiné passionné de dev

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 570
    Billets dans le blog
    1
    Par défaut
    En essayant de trouver une procédure pour récupérer l'id de l'utilisateur, j'ai utilisé la méthode pas à pas détaillé, pour executer la procedure.
    Ce qui m'a permis d'utiliser les espions express de VS. Et là, je constate que mes varriables ne contiennent que la première lettre des mots!!!

    Il a suffit de préciser la longueur pour que ça fonctionne.

    Enfin.... pfffiouuuu

    Merci beaucoup de l'aide apportée!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/07/2007, 14h12
  2. ca veut pas s'executer aidez moi svp :d
    Par lougia dans le forum C
    Réponses: 13
    Dernier message: 09/03/2007, 17h51
  3. Erreur de variable, je comprends vraiement pas :( aidez moi svp.
    Par plex dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 04/08/2006, 14h16
  4. Je vois pas d'où vient mon erreur!! Aidez moi SVP
    Par liliboms dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 04/04/2005, 08h25

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