Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [VB.NET]Ado - Recuperare un valore da DB in fase di aggiornamento

    Ho due tabelle:
    1)AnagraficaArticoli
    2)MovimentiArticoli

    In fase di inserimento di Movimenti in DataTable "MovimentiArticoli" devo anche aggiornare la
    DataTable "AnagraficaArticoli" la quale contiene un campo chiamato "DisponibilitaArticolo"

    La logica per l'inserimento in "MovimentiArticoli" è simile alla seguente:
    codice:
    'Questa parte di codice fa riferimento ad una funzione per_
    '_la creazione della stringa SQL
    Dim NField As Integer = 29
    Cn = New SqlConnection(CnString)
    'Scrive la stringa SQL e inizializza il comando
    Command = New SqlCommand(WriteSQLStringInsert("MovimentiArticoli", NField), Cn)
    
    'Creazione dei parametri
    Command.Parameters.AddWithValue("@NomeProdotto",Valore1)   'NomeProdotto
    Command.Parameters.AddWithValue("@Quantità", Valore2)         'Quantità
    ...
    
    'Avvia la connessione ed esegue il comando
    Cn.Open()
    Command.ExecuteReader()
    Cn.Close()
    
    '****************************
    'INSERIRE QUI IL CODICE MANCANTE
    '****************************
    Nella parte di codice segnalata (**...) devo inserire il codice per l'aggiornamento del campo
    "DisponibilitaArticolo" in "AnagraficaArticoli" che però deve sommare il valore "Valore2" al valore già presente e non sostituirlo.

    Chiarito, con estrema semplificazione lo scenario, vi chiedo se conoscete un modo
    per fare ciò, ovviamente il tutto deve essere il più performante possibile, quindi vorrei evitare di usare il metodo Select per recuperare il valore prima poiche in realta le operazioni sono tante e le tabelle da aggiornare anche (Non solo AnagraficaArticoli)

    Spero di essere stato chiaro, se avete domande, scrivete pure.

  2. #2
    Utente di HTML.it L'avatar di M@LKAV
    Registrato dal
    Jan 2006
    Messaggi
    215

    Re: [VB.NET]Ado - Recuperare un valore da DB in fase di aggiornamento

    Originariamente inviato da marcotavoloni
    Ho due tabelle:
    1)AnagraficaArticoli
    2)MovimentiArticoli

    In fase di inserimento di Movimenti in DataTable "MovimentiArticoli" devo anche aggiornare la
    DataTable "AnagraficaArticoli" la quale contiene un campo chiamato "DisponibilitaArticolo"

    La logica per l'inserimento in "MovimentiArticoli" è simile alla seguente:
    codice:
    'Questa parte di codice fa riferimento ad una funzione per_
    '_la creazione della stringa SQL
    Dim NField As Integer = 29
    Cn = New SqlConnection(CnString)
    'Scrive la stringa SQL e inizializza il comando
    Command = New SqlCommand(WriteSQLStringInsert("MovimentiArticoli", NField), Cn)
    
    'Creazione dei parametri
    Command.Parameters.AddWithValue("@NomeProdotto",Valore1)   'NomeProdotto
    Command.Parameters.AddWithValue("@Quantità", Valore2)         'Quantità
    ...
    
    'Avvia la connessione ed esegue il comando
    Cn.Open()
    Command.ExecuteReader()
    Cn.Close()
    
    '****************************
    'INSERIRE QUI IL CODICE MANCANTE
    '****************************
    Nella parte di codice segnalata (**...) devo inserire il codice per l'aggiornamento del campo
    "DisponibilitaArticolo" in "AnagraficaArticoli" che però deve sommare il valore "Valore2" al valore già presente e non sostituirlo.

    Chiarito, con estrema semplificazione lo scenario, vi chiedo se conoscete un modo
    per fare ciò, ovviamente il tutto deve essere il più performante possibile, quindi vorrei evitare di usare il metodo Select per recuperare il valore prima poiche in realta le operazioni sono tante e le tabelle da aggiornare anche (Non solo AnagraficaArticoli)

    Spero di essere stato chiaro, se avete domande, scrivete pure.
    Che database usi??
    La mia pazzia continua a prosciugare la mia anima

  3. #3
    SQL Server 2008 Express

  4. #4
    Utente di HTML.it L'avatar di M@LKAV
    Registrato dal
    Jan 2006
    Messaggi
    215
    Originariamente inviato da marcotavoloni
    SQL Server 2008 Express
    Potresti utilizzare una storedProcedure all'interno della quale puoi lavorare su tutte le tabelle che desideri passandogli come parametro il codiceArticolo e la quantita da valorizzare.
    La mia pazzia continua a prosciugare la mia anima

  5. #5
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    Originariamente inviato da M@LKAV
    Potresti utilizzare una storedProcedure all'interno della quale puoi lavorare su tutte le tabelle che desideri passandogli come parametro il codiceArticolo e la quantita da valorizzare.
    giusto! e inoltra tutta la stored procedure deve essere in una transazione unica!
    I got the remedy

  6. #6
    Ottima soluzione.

    Non sono di quelli che chiedono codice pronto ma già da tempo che voglio studiare approfonditamente le StoredProcedure ma non riesco bene ad entrare nel linguaggio
    (o forse devo dedicargli più risorse)

    riuscite a farmi un'esempio simile al mio caso, sulla StoredProcedure con l'istruzione Update, ovviamente prima si deve prelevare il valore gia esistente per poi addizionare il nuovo (che sia pos o neg) e restiruire un valore boleano di conferma della riuscita operazione.

  7. #7
    Utente di HTML.it L'avatar di M@LKAV
    Registrato dal
    Jan 2006
    Messaggi
    215
    Originariamente inviato da marcotavoloni
    riuscite a farmi un'esempio simile al mio caso, sulla StoredProcedure con l'istruzione Update, ovviamente prima si deve prelevare il valore gia esistente per poi addizionare il nuovo (che sia pos o neg) e restiruire un valore boleano di conferma della riuscita operazione.
    Facciamo conto di avere una
    Tab: "Articoli"
    Codice int
    Qty int

    e una
    Tab: "Movimenti"
    Id int(contatore)
    Codice int
    Qty int
    DataOra datetime

    L'esempio di stored che ti sto per presentare inserisce un movimento è aggiorna la tabella degli articoli.

    STORED
    codice:
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:		<Author,,Name>
    -- Create date: <Create Date,,>
    -- Description:	<Description,,>
    -- =============================================
    CREATE PROCEDURE [dbo].[ADD_MOVIMENTO]
    @CODICE int,
    @QTY INT	
    AS
    @Declare @Scorta int
    BEGIN
    	
    	SET NOCOUNT ON;
    /***
    Procedura per l'inserimento di un Movimento e Aggiornamento dei quantitavi della tabella ARTICOLI
    ***/
    
    /*** Inserisco il movimento ***/
    
    Insert into Movimenti 
    (Codice,
     Qty,
     DataOra)
    Values(
    @Codice,
    @Qty,
    @getdate()
    )	
    
    
    /*** Aggiorna l'anagrafica articoli ***/
    
    -- Estraggo il quantitativo attuale dell'articolo (questa procedura puo serivirti nel caso la qty inserita sia negativa
    -- per vedere se la quantita dell'articolo supporta lo scarto e non ti rimangono quantitativ negativi)
    
    Select @Scorta = Qty from Articoli where  Codice = @Codice
    
    
    @Scorta = @Scorta + @Qty
    
    -- Aggiorno la tab Articoli
    
    Update Articoli
    set Qty = @Scorta
    where Codice = @Codice
    
    /**Se vuoi vedere il risultato dell'operaazione estrai l'articolo**/
    Select * from Articoli where Codice = @Codice
    
        
    END
    GO
    La mia pazzia continua a prosciugare la mia anima

  8. #8
    Ho modificato la procedura per eseguire solo l'aggiornamento ed è la seguente:

    dove
    AnArticoli è la Datatable contenente tutte le informazioni degli articoli e possiede i seguenti due campi:
    [0] = Int è il valore autoincrement = true cioè la PK
    [41] = Varchar(50) ed è la quantità disponibile in magazzino prima dell'operazione
    inoltre:
    Id è l'Id dell'articolo che l'applicazione gli passa come parametro
    Qty è la quantità da aggiungere a quelle esistente in AnArticoli

    codice:
    ALTER PROCEDURE dbo.StoredProcedure1
     
     @Id as Int,
     @Qty as Decimal
     as
     declare @Scorta Decimal
     
    BEGIN
    
     SET NOCOUNT ON;
     
    SELECT @Scorta = [41] FROM AnArticoli WHERE ([0] = @Id)
    
    UPDATE    AnArticoli
    SET       [41] = @Scorta + @Qty
    WHERE     ([0] = @Id)
    
    END
    le problematiche sono le seguenti:
    1) se eseguo il secondo blocco di istruzioni, funziona ma @Scorta( = 10) + @Qty ( = 12)
    anziche restituire 22 restituisce 1012
    2)Il primo blocco genera questo errore:
    codice:
    Errore nella clausola SELECT: espressione accanto a '='.
    Impossibile analizzare il testo della query.
    se invece trasformo il primo blocco nel seguente funziona correttamente
    codice:
    SELECT [41] FROM AnArticoli WHERE ([0] = @Id)
    ma chiaramente non posso valorizzare la variabile @Scorta

    Secondo voi dove sbaglio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.