none
UPDATE avec clause where retournant plusieur resultat RRS feed

  • Question

  • bonjour

    j'ai un petit soucisur mon projet en ASP.NET/VB avec SQLSEVER2005

    j'essaye d'exécuter un UPDATE

     UPDATE ordre_de_fabrication 
    SET date_lancement_OF= '" & Date.Now & "'quantite_of = (SELECT DISTINCT SUM(quantiteOF) AS Expr1
    FROM ligne_chargement where Numof = ( SELECT DISTINCT Numof
    from lignechargement
    where id_palonnier = '" & idpalonnier & "'
    group by Numof) )
    where id_ordre_de_fabrication = ( SELECT Numof
    from lignechargement
    where id_palonnier = '" & idpalonnier & "'
    group by Numof)

    ca c'est la requete que je vouler executer grace aux objet ADO.NET

    mais le probléme c'est que ma requéte retourne plusieur resultat

    bien entendut vous allez me dire qu'il suffit de mettre "in" ala place  du "="

    mais je ne peu pas car quantite_OF doit retourner la quantité pour chaque OF et non pour toutles of selectionner

     

    comment puis-je procédé ?
    jeudi 17 juin 2010 10:12

Réponses

Toutes les réponses

  • Bonjour,

    Pour vous aider je vous propose de donner la structure des tables et un peu de descriptions des clé pour pouvoir comprendre votre besoin. Comme ca je crois que c'est trop difficile de résoudre ou trouver une solution pour votre requête.

    Bye

    jeudi 17 juin 2010 10:44
  • http://www.hostingpics.net/viewer.php?id=523279galva.jpg

     

    en faite je veut prendre les reultat d'une requéte select sequentielement (1a1) et les executer dans un UPDATE

    genre un curseur

    mais on ma plusieurs fois déconseiller de  faire des curseur , en plus je sai pas en faire et tout ce que j'ai essayer ne fonctionne pas ...

     

    donc il me faudrait un equivallent du curseur

    avec ADO.NET je pense

     

    cordialement

    alex

    jeudi 17 juin 2010 12:59
  • Ah j'ai compris,

    Vous avez extrait un ensemble d'enregistrement et vous voulez effectuer une mise à jour conditionnel suivant des critères spécifiques. Dans ce cas je pense que vous devez passer par les curseur vue que le traitement de mise à jour n'est pas le même pour tout les enregistrement sélectionné.

    cordialement

    jeudi 17 juin 2010 13:14
  • oui mais ceux que j'ai essayer ne marche pas

     

    voila le dernier que j'ai placé dans une procédure stocker :

    CREATE PROCEDURE dbo.StoredProcedure1 
    	
    	@idpalonnier varchar(100),
    	@datetime datetime 
    	
    AS
    
    	/* SET NOCOUNT ON */ 
    	DECLARE @numof varchar(50)
     
    DECLARE Section_Cursor CURSOR FOR
    	SELECT Numof from ligne_chargement where id_palonnier = @idpalonnier
     
    
     
    OPEN Section_Cursor
    FETCH Section_Cursor INTO @numof
     
    WHILE @@FETCH_STATUS = 0
    	BEGIN
    	UPDATE ordre_de_fabrication 
      SET date_lancement_OF = @datetime , quantite_of =( SELECT DISTINCT SUM(quantiteOF) AS Expr1 
    															FROM ligne_chargement where Numof= @numof ) 
      where id_ordre_de_fabrication = @numof
    	END
     
    CLOSE Section_Cursor
    DEALLOCATE Section_Cursor
    	

    je ne comprend pas pourquoi ca ne fonctionne pas

     

    tu peut m'aider stp

     

    cordialement

     

    alex

     

     

    jeudi 17 juin 2010 14:41
  • Bonjour,

    Dans SQL Server l'instruction update autorise l'utilisation d'une clause FROM. Cela pourrait donc donner quelque chose comme (je ne suis pas très sûr du détail des tables notamment j'imagine que lignechargement  et ligne_chargement sont une seule et même table et je ne vois pas la différence entre NumOf et  id_ordre_de_fabrication  :

    UPDATE Ordre_de_fabrication
    SET date_lancement_of=GETDATE(),
    Quantite_of=SumQte
    FROM Ordre_de_fabrication
    JOIN (SELECT NumOf,SUM(QuantiteOf) AS SumQte FROM Ligne_chargement WHERE id_palonnier=@idpalonnier GROUP BY Num_of) Src ON Src.NumOf=Ordre_de_fabrication.NumOf

    Toujours est-il en tout cas que l'idée est de faire simplement un JOIN avec la requête SELECT qui produit les données à utiliser pour la mise à jour...

     

     

    jeudi 17 juin 2010 15:46
  • Re à tous,

    Dans le cas d'un code SQL il faut avoir une idée sur la conception et la structure des tables pour pouvoir contribuer et y arriver à trouver une solution pertinente.

    J'aimerai bien avoir une idée sur la structure des tables et votre objectif, dans ce cas on pourra trouver une solution à votre souci.

    Merci

    jeudi 17 juin 2010 16:31
  • je voudrai executer un UPDATE de ordre_de_fabrication pour chaque resultat de ligne_chargement.Numof
    vendredi 18 juin 2010 07:24
  • pour faire ca je vien donc de creer ce curseur

     

     

    ALTER PROCEDURE dbo.StoredProcedure1 
    	
    	@idpalonnier varchar(100),
    	@datetime datetime 
    	
    AS
     
    	/* SET NOCOUNT ON */ 
    	DECLARE @numof varchar(50)
    	
    	DECLARE C_ech CURSOR
    	FOR
    	SELECT Numof 
    	FROM ligne_chargement 
    	WHERE id_palonnier = @idpalonnier 
     
    OPEN C_ech
    FETCH C_ech into @numof
     
    	WHILE @@FETCH_STATUS = 0
    BEGIN
     UPDATE ordre_de_fabrication 
     SET date_lancement_OF = @datetime , quantite_of =( SELECT SUM(quantiteOF) AS Expr1 
    															FROM ligne_chargement WHERE Numof= @numof ) 
     WHERE id_ordre_de_fabrication = @numof
     FETCH C_ech into @numof
    END
    	
    	RETURN
     

     

    qui devrait tré bien fonctionner

     

    mais j'ai un probléme lors del'appel de la procédure stocké( en vb)

     

    Private Sub MAJ_OF(ByVal idpalonnier)
     
     'met a jour la table ordre_de_fabrication
    		
    		
     Dim storedProcedure As String = "dbo.StoredProcedure1 " & idpalonnier & "," & Date.Now
     Dim con As New Data.SqlClient.SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\admin\Bureau\galva\App_Data\gava.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")
     Dim cmd As Data.SqlClient.SqlCommand
     Dim pr As Data.SqlClient.SqlParameter
    
     cmd = New Data.SqlClient.SqlCommand(storedProcedure, con)
     cmd.CommandType = cmd.CommandType.StoredProcedure
    
     cmd.ExecuteScalar()
     End Sub
     
    

     


    il me souligne en vert :

     

    cmd.CommandType = cmd.CommandType.StoredProcedure

    et dit  :Avertissement    3    Accès d'un membre partagé, d'un membre de constante, d'un membre enum ou d'un type imbriqué via une instance ; l'expression qualifiante ne sera pas évaluée.    C:\Documents and Settings\admin\Bureau\galva\prepa\prepa.aspx    366    27    C:\...\galva\

     

    cordialement

     

    AP

     

    vendredi 18 juin 2010 08:21
  • Bonjour,

     

    Essayez avec

     

    cmd.CommandType = CommandType.StoredProcedure

     

    au lieu de

     

    cmd.CommandType = cmd.CommandType.StoredProcedure

     

     

    Cordialement,

    Alex

    __________________________________________________________________________________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

     

    Astuces pour Visual Studio 2010

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Workflow Foundation

     

     

    Café des usages

     

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

     

     

    lundi 21 juin 2010 12:49