Operazione matematica su record

martedì 02 ottobre 2007 - 14.48

gennyfor Profilo | Junior Member

Ciao a tutti
Qualcuno sa dirmi come fare una semplice operazione su di un record di database??

MI spiego meglio, Uso il vb 2005 con l'sql server 2005
Ho una tabella dove ho tutti valori integer ed ho un valore int in una mia variabile.
Bene, devi dire semplicemte in sql "Trova il record che dico io, colonna che dico io , e a quel valore INT che gia e presente, sottrai quello che ho nella variabile"

il mio problema si pone solo x ottimizzare un pochetto il codice dato che ho sempre fatto in questo modo:
-Dichiaravo un comando per il recupero del record che mi interessava con Datareader annesso
-lo memorizzavo in una variabile dove poi ci sottraevo l'altro int che avevo
-dichiaro un nuovo comando che mi inserisce il dato aggiornato nel DB

Purtroppo il guaio è che l'operazione avviene su molti valori che si trovano su record diversi ecc ecc....e quindi dovrei aprire 3000 datareader e dichiarare 2000 comandisql..
Come posso fare???Purtroppo conosco da poco l'SQL e pensavo ad una sintassi del tipo

Cmd.commandtext = "UPDATE dbo.tabella SET nome_colonna = (valore_gia_presente)+ miavariabile WHERE condizione = mia_condizionemolto maccaronico eh?^??

alx_81 Profilo | Guru

>Ciao a tutti
Ciao!

>Qualcuno sa dirmi come fare una semplice operazione su di un
>record di database??
>MI spiego meglio, Uso il vb 2005 con l'sql server 2005
>Ho una tabella dove ho tutti valori integer ed ho un valore int
>in una mia variabile.
>Bene, devi dire semplicemte in sql "Trova il record che dico
>io, colonna che dico io , e a quel valore INT che gia e presente,
>sottrai quello che ho nella variabile"
>il mio problema si pone solo x ottimizzare un pochetto il codice
>dato che ho sempre fatto in questo modo:
>-Dichiaravo un comando per il recupero del record che mi interessava
>con Datareader annesso
>-lo memorizzavo in una variabile dove poi ci sottraevo l'altro
>int che avevo
>-dichiaro un nuovo comando che mi inserisce il dato aggiornato
>nel DB
>
>Purtroppo il guaio è che l'operazione avviene su molti valori
>che si trovano su record diversi ecc ecc....e quindi dovrei aprire
>3000 datareader e dichiarare 2000 comandisql..
>Come posso fare???Purtroppo conosco da poco l'SQL e pensavo ad
>una sintassi del tipo
>
>Cmd.commandtext = "UPDATE dbo.tabella SET nome_colonna = (valore_gia_presente)+
>miavariabile WHERE condizione = mia_condizionemolto
>maccaronico eh?^??
beh no.. direi che quello che devi fare è proprio l'update.

UPDATE tuatabella SET colonna = valore - @variabile WHERE condizione.

Topo averlo messo nel commandtext, procedi con la scrittura della collection dei Parameters del Command.
Alx81 =)

http://blogs.dotnethell.it/suxstellino

gennyfor Profilo | Junior Member

We Ale ciao!
Grazie cm sempre
Ma ho un problemino, come faccio ad indicare nella stringa il valore che èp gia presente nel record?

SET colonna = VALORE - @variabile

cioè quel VALORE, io programmatore nn lo conosco, è un dato che sarà presente già nel db nel quale l'utente immetterà.....

deve essere na cosa automatizzata

(prendi il valore che è già presente e sottrai la variabile)
la variabile la conosco xkè è un dato che già si va a ripescare da un altra tabella tramite datareader

alx_81 Profilo | Guru

>We Ale ciao!
>Grazie cm sempre
>Ma ho un problemino, come faccio ad indicare nella stringa il
>valore che èp gia presente nel record?
>
>SET colonna = VALORE - @variabile
>
>cioè quel VALORE, io programmatore nn lo conosco, è un dato che
>sarà presente già nel db nel quale l'utente immetterà.....
>
>deve essere na cosa automatizzata
>
>(prendi il valore che è già presente e sottrai la variabile)
>la variabile la conosco xkè è un dato che già si va a ripescare
>da un altra tabella tramite datareader
passami allora le strutture (le due create delle tabelle in gioco) ed un esempio fisico su quei dati.. Vedrai che risolviamo tutto con un SQL
Alx81 =)

http://blogs.dotnethell.it/suxstellino

gennyfor Profilo | Junior Member

If MessageBox.Show("Eliminare l'operazione selezionata?", "Attenzione") = Forms.DialogResult.OK Then
If ListView1.SelectedItems(0).SubItems(2).Text = "Ordine" Then
Dim recuperatotale As New SqlCommand
recuperatotale.Connection = connection
recuperatotale.CommandText = "SELECT [33inor], [335inor], [34inor], [345inor], [35inor], [355inor], [36inor], [365inor], [37inor], [375inor], [38inor], [385inor], [39inor], [395inor], [40inor], [405inor], [41inor], [415inor], [42inor], [425inor], [43inor], [435inor], [44inor], [445inor] FROM dbo.scheda WHERE id = " & ListView1.SelectedItems(0).SubItems(28).Text & ""
Dim recuperatotreader As SqlDataReader = recuperatotale.ExecuteReader
Do While recuperatotreader.Read
x33o = recuperatotreader.GetInt32(0)
x335o = recuperatotreader.GetInt32(1)
x34o = recuperatotreader.GetInt32(2)
x345o = recuperatotreader.GetInt32(3)
x35o = recuperatotreader.GetInt32(4)
x355o = recuperatotreader.GetInt32(5)
x36o = recuperatotreader.GetInt32(6)
x365o = recuperatotreader.GetInt32(7)
x37o = recuperatotreader.GetInt32(8)
x375o = recuperatotreader.GetInt32(9)
x38o = recuperatotreader.GetInt32(10)
x385o = recuperatotreader.GetInt32(11)
x39o = recuperatotreader.GetInt32(12)
x395o = recuperatotreader.GetInt32(13)
x40o = recuperatotreader.GetInt32(14)
x405o = recuperatotreader.GetInt32(15)
x41o = recuperatotreader.GetInt32(16)
x415o = recuperatotreader.GetInt32(17)
x42o = recuperatotreader.GetInt32(18)
x425o = recuperatotreader.GetInt32(19)
x43o = recuperatotreader.GetInt32(20)
x435o = recuperatotreader.GetInt32(21)
x44o = recuperatotreader.GetInt32(22)
x445o = recuperatotreader.GetInt32(23)
Loop
tord = x33o + x335o + x34o + x345o + x35o + x355o + x36o + x365o + x37o + x375o + x38o + x385o + x39o + x395o + x40o + x405o + x41o + x415o + x42o + x425o + x43o + x435o + x44o + x445o
'MI SONO CALCOLATO LA SOMMA DI QUEI VALORI E L'HO MEMORIZZATA IN TORD
'ADESSO CON QUESTA VARIABILE MI MODIFICO UN ALTRA TABELLA(dbo.produzione)
Dim sottraiaproduzione As New SqlCommand
sottraiaproduzione.Connection = connection
sottraiaproduzione.CommandText = "UPDATE dbo.produzione SET ordinate = (valoregiapresenteneldatabasechennsocomerichiamare)- " & tord &" WHERE id = " & ListView1.SelectedItems(0).SubItems(28).Text & ""

La tabella produzione è strutturata in qst modo (Cliente,Marcare,Ordinate,prodotte,consegnate)

Ehm......intendevi dire questo??
sottraiaproduzione nel nostro caso(xkè adesso è nostro) è il comando di update
Praticamente devo aggiornare il numero di articoli ordinati dal cliente nel caso in cui elimino un ordine (x questo è una sottrazione)e mo?

alx_81 Profilo | Guru

>Ehm......intendevi dire questo??
decisamente no

vai su sql server 2005 e mandami lo script di create delle tabelle in gioco. Alcune insert di esempio per i record e il risultato che vuoi ottenere in sql..

Alx81 =)

http://blogs.dotnethell.it/suxstellino

gennyfor Profilo | Junior Member

alex perdonami ma uso vb 2005 solo da 4 mesi e nn lo conosco proprio bene....
Le tabelle le ho create graficamente tramite il vb.net, adesso nn so dv si trovano gli script che sono stati usati x creare le tabelle
e l'sql solo da 2 mesi perciò fai un po te
cm dv fare?

alx_81 Profilo | Guru

>alex perdonami ma uso vb 2005 solo da 4 mesi e nn lo conosco
>proprio bene....
>Le tabelle le ho create graficamente tramite il vb.net, adesso
>nn so dv si trovano gli script che sono stati usati x creare
>le tabelle
>e l'sql solo da 2 mesi perciò fai un po te
>cm dv fare?
ok, proviamo con un esempio. Intanto provo a descriverti qualche concetto ..
Scenario: Due tabelle, una da cui ricavo il valore da ridurre ed una su cui eseguire l'aggiornamento:


USE tempdb; GO -- tabella sorgente (valore da sottrarre) CREATE TABLE Sorgente ( id int PRIMARY KEY CLUSTERED, valore int NOT NULL ) GO INSERT INTO Sorgente (id, valore) SELECT 1, 10 GO -- tabella destinazione (campi da modificare) CREATE TABLE Destinazione ( id int IDENTITY(1,1) PRIMARY KEY CLUSTERED, valore int NOT NULL, codice char(2) NOT NULL ) GO INSERT INTO Destinazione (valore, codice) SELECT 100, 'AA' INSERT INTO Destinazione (valore, codice) SELECT 50, 'BB' INSERT INTO Destinazione (valore, codice) SELECT 20, 'BB' INSERT INTO Destinazione (valore, codice) SELECT 100, 'BB' INSERT INTO Destinazione (valore, codice) SELECT 100, 'CC' GO -- risultari prima dell'update SELECT * FROM Destinazione DECLARE @ValoreDaSottrarre int -- prendo il valore da usare per un aggiornamento SELECT @ValoreDaSottrarre = valore FROM Sorgente WHERE id = 1 SELECT @ValoreDaSottrarre AS ValoreDaSottrarre -- -- Update che dovrebbe risolverti il problema ;-) UPDATE Destinazione SET valore = valore - @ValoreDaSottrarre WHERE codice = 'BB' -- risultari dopo l'update SELECT * FROM Destinazione -- pulizia DROP TABLE Sorgente DROP TABLE Destinazione

Ora, prendendo spunto dall'istruzione, puoi fare una update parametrica, impostando il command.
Se ti manca qualcosa fatti sentire
Alx81 =)

http://blogs.dotnethell.it/suxstellino

gennyfor Profilo | Junior Member

Si in effetti quel valore - nuovo valore funziona

UPDATE dbo.produzione SET ordinate = ordinate - " & tord & " WHERE cliente LIKE '" & TextBox1.Text & "' and dataordine ='" & CDate(TextBox2.Text) & "' and marcare LIKE '" & Marcare.Text & "'"

Graqzie mille alx

alx_81 Profilo | Guru

>Si in effetti quel valore - nuovo valore funziona
>
>UPDATE dbo.produzione SET ordinate = ordinate - " & tord & "
>WHERE cliente LIKE '" & TextBox1.Text & "' and dataordine ='"
>& CDate(TextBox2.Text) & "' and marcare LIKE '" & Marcare.Text
>& "'"
>
>Graqzie mille alx
Mi permetto di darti un consiglio..
Utilizza le query parametriche, come ad esempio:

"UPDATE dbo.produzione SET ordinate = ordinate - @valore
WHERE cliente LIKE @txt1 + '%' and dataordine = @data and marcare LIKE @txt2 + '%'"

Poi, popoli la collection dei parameters del tuo oggetto Command..
Leggi questo link:

http://msdn2.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx

Alx81 =)

http://blogs.dotnethell.it/suxstellino
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5