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

Développement SQL Server Discussion :

problème utilisation procedure stockée


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 105
    Points : 59
    Points
    59
    Par défaut problème utilisation procedure stockée
    Bonjour,

    Je travail sous sqlserver2005 express et php.

    J'ai une page php à partir de laquelle j'appel plusieurs procédure stockée. et malheuresement j'ai le message d'erreur suivant que je ne comprend pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: odbc_do(): SQL error: [Microsoft][ODBC SQL Server Driver]La connexion est occupée avec les résultats d'un autre hstmt, SQL state S1000 in SQLExecDirect in c:\program files\easyphp1-8\www\jeuxvideo\jeuxvideo_admin\gestionstock.php on line 138
    Pour vous montrer voici un bout de code php :

    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
    $req="SP_NBJEUENATTENTEDERECEPTION_JEUX_VIDEO";
    $resultat=odbc_do($connection,$req);
    $vide = odbc_fetch_into($resultat,$fis);
    if ($vide=="0")
    {
    	echo 'Aucune commande en cours';		
    }
    else
    {
    	$req="SP_LISTEJEUENATTENTEDERECEPTION_JEUX_VIDEO ";
    	$resultat=odbc_do($connection,$req);
    	echo '<table border=0 ><tr bgcolor=#003366><td>Nom du Jeu</td><td>Console</td><td>Stock actuel</td><td>Quantité commander</td><td>Reçu</td></tr>';
    	$Compteur2 = 0;
    	while (odbc_fetch_row($resultat))
    	{
    		$idjv=odbc_result($resultat, 'jv_id');
    		$nomjv=odbc_result($resultat, 'jv_nom');			
    		$qtejv=odbc_result($resultat, 'jv_qte');
    		$qtecommander=odbc_result($resultat, 'jv_qtecmd');
    		$console=odbc_result($resultat, 'con_nom');	
    		$Compteur2++;
     
    		echo '<tr><td>'.$nomjv.' </td><td>'.$console. '</td>
    		<td><input type=text readonly=readonly name=qteactuel'.$Compteur2.' value='.$qtejv.' /></td>
    		<td><input type=text readonly=readonly name=qte'.$Compteur2.' value='.$qtecommander.'></td>';
    		echo '<td><input type=checkbox name=recu'.$Compteur2.' value="'.$idjv.'"</td>
    		</tr>';
    }
    ps : la ligne 138 correspond au $resultat juste apres l'appel de la 2eme procedure stockée

    Merci de votre aide

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 105
    Points : 59
    Points
    59
    Par défaut
    Personne n'aurait une idée svp sur ce problème de hstmt, j'ai bien trouvé des explications mais aucune solution

    Merci

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 105
    Points : 59
    Points
    59
    Par défaut TRANSACTION sql serve 2005
    Bonjour,

    Je demande votre aide car je n'y arrive decidement pas.
    Cette transaction dois regrouper 2 requetes (2 insert into).

    Malheuresement j'ai le message d'erreur suivant, que je n'arrive pas a resoudre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: odbc_do(): SQL error: [Microsoft][ODBC SQL Server Driver][SQL Server]Le identificateur qui commence par 'CREATION_COMMANDEbeginSP_CREER_COMMANDE' est trop long. La longueur maximale est 32., SQL state 37000 in SQLExecDirect in c:\program files\easyphp1-8\www\pti_jv_admin_clients\jeuxvideo_clients\panier_4.php on line 184
    Et voici un extrait de mon code:

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    //TRANSACTION
    		$createcmd = "BEGIN TRANSACTION CREATION_COMMANDE"; //On démarre une transaction et on lui donne un nom
    		$createcmd .= "begin";
    		$createcmd .= "SP_CREER_COMMANDE '$idclient', '$datecmd', '$tot', '$liv' ";
    		//$rs=odbc_do($connection,$createcmd);
     
    		if ($createcmd)
    		{
    			// recupération de l'id de la commande par rapport
    			// au numéro client et à la dernière de ses commandes
    			$riq = "SP_RECUPCMD_COMMANDE '$idclient' ";
    			$rik=odbc_do($connection,$riq);
    			odbc_fetch_into($rik,$fiis);
    			$NumCd=$fiis[0];
     
    			foreach ($panier as $valeur=>$cde)
    			{
    				$sql15 = "SP_INFOJEU_JEUX_VIDEO '$valeur' ";
    				$req15=odbc_do($connection,$sql15);
    				// recupération du stck d'un produit
    				$stck=odbc_result($req15,'jv_qte');
    				$nbVente=odbc_result($req15,'jv_nbvente');
    				$newNbVente= $nbVente + $cde;
    				$newstock = $stck - $cde;
     
    				//mise à jour du stock
    				$udstock= "SP_MAJSTOCK_JEUX_VIDEO '$newstock', '$newNbVente', '$valeur' ";
    				$rudstock=odbc_do($connection,$udstock);
     
    				if($rudstock)
    				{
    						$createcmd.="SP_CREERARTICLECMD_LIGNECOMMANDE '$NumCd', '$valeur', '$cde' ";
    						$rsILS=odbc_do($connection,$createcmd);
     
    						if ($rsILS)
    						{
    							$createcmd .= " COMMIT TRANSACTION CREATION_COMMANDE "; //On commit la transaction
    							echo "<SCRIPT LANGUAGE='JavaScript'>alert('Votre commande à bien été prise en compte.');</SCRIPT>  ";
    							echo "	<h3 align=center>Votre commande à bien été prise en compte.<br/> <a href=ResumerCommande.php  class=type1> Voir le résumer de la commande</a></h3>";
    							echo '<script language="javascript">document.location.href = "ResumerCommande.php"</script>';
    							$_SESSION['RefCmd']= $NumCd;
    							unset($_SESSION['panier']);
    						}// si il y a eu des erreurs
    						else 
    						{
    							echo 'Une erreure est survenue';
    							$createcmd .= " ROLLBACK TRANSACTION CREATION_COMMANDE "; //On annule tous les changements de cette transaction
    						}
    //FIN TRANSACTION						
    				}
    				else
    				{
    					echo 'Une erreure est survenue';
    				}
    			}
    		}
    Merci pour votre aide

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

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    a mon avis c'est un pb d'espace entre les mots

    $createcmd = "BEGIN TRANSACTION CREATION_COMMANDE"; //ON démarre une transaction et ON lui donne un nom
    $createcmd .= "begin";
    remplace par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $createcmd = "BEGIN TRANSACTION CREATION_COMMANDE "; //ON démarre une transaction et ON lui donne un nom
    		$createcmd .= "begin ";
    en mettant un espace après chaque mot
    Errare humanum est, perseverare diabolicum (Sénèque)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 105
    Points : 59
    Points
    59
    Par défaut
    Bonjour,

    Merci pour t'as réponse, mais j'ai bien essayé de mettre les espace mais sa n'as pas marcher, j'ai toujour le même message d'erreur

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

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    par contre tu ne dois plus avoir le même message d'erreur

    postes le nouveau message
    Errare humanum est, perseverare diabolicum (Sénèque)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 105
    Points : 59
    Points
    59
    Par défaut
    Bonjour,

    Voici le nouveau message d'erreur suivi d'un echo de ma transaction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Warning: odbc_do(): SQL error: [Microsoft][ODBC SQL Server Driver][SQL Server]Syntaxe incorrecte vers 'SP_CREER_COMMANDE'., SQL state 37000 in SQLExecDirect in c:\program files\easyphp1-8\www\pti_jv_admin_clients\jeuxvideo_clients\panier_4.php on line 185
     
    Une erreure est survenue BEGIN TRANSACTION CREATION_COMMANDE begin SP_CREER_COMMANDE '10052', '17/04/2008', '329.75', '6.95' SP_CREERARTICLECMD_LIGNECOMMANDE '10192', '32', '1' end ROLLBACK TRANSACTION CREATION_COMMANDE

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

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    dans osql il te faut rajouter un EXEC devant les procédures stockées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BEGIN TRANSACTION CREATION_COMMANDE begin EXEC SP_CREER_COMMANDE '10052', '17/04/2008', '329.75', '6.95' EXEC SP_CREERARTICLECMD_LIGNECOMMANDE '10192', '32', '1' end ROLLBACK TRANSACTION CREATION_COMMANDE
    Errare humanum est, perseverare diabolicum (Sénèque)

Discussions similaires

  1. [EF] Utiliser Procedure Stockées
    Par bleuerouge dans le forum Accès aux données
    Réponses: 5
    Dernier message: 31/12/2008, 00h24
  2. Problème ( bloquant ) : " Procedure stockée "
    Par moutaki dans le forum PL/SQL
    Réponses: 2
    Dernier message: 17/07/2008, 14h45
  3. Utilisation SCHEMA_NAME() dans une procedure stockée
    Par jeff37 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/03/2007, 10h06
  4. Réponses: 3
    Dernier message: 19/04/2006, 18h44
  5. [PowerBuilder/Oracle] Problème de procedure stockée
    Par delphine_lep dans le forum Powerbuilder
    Réponses: 1
    Dernier message: 02/09/2004, 14h08

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