Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Dataset e dataadapter
sabato 29 maggio 2010 - 15.33
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
sab 29 mag 2010 - 15:33
Ciao al forum, stò impazzendo da tantissimi giorni xchè non riesco a fare una IIf o selec case che mi estrapoli dei dati da una tabella e li passi al dataset.
Vi spiego ho 5 gruppi di dati numerici formati in questo modo.
A1 - A2 - A3
B1 - B2 - B3
C1 - C2 - C3
D1 - D2 - D3
E1 - E2- E3
Adesso il limite per la select case o IIf e di 7300 sommando ogni gruppo
Vi faccio gli esempi:
Esempio 1:
A1 + A2 + A3 = 7300 tutti gli altri gruppi devono restituire 0
B1 - B2 - B3
C1 - C2 - C3
D1 - D2 - D3
E1 - E2- E3
Esempio 2:
A1 + A2 + A3 = 1500
B1 - B2 - B3 = 0
C1 - C2 - C3 = 3750
D1 - D2 - D3 = 2250
E1 - E2- E3 = 0
il totale è 7500 quindi qui bisogna procedere in questo modo
A1 + A2 + A3 = 1500
B1 - B2 - B3 = 0
C1 - C2 - C3 = 3750
D1 - D2 - D3 = 2050 <<<< praticamente qui sottraggo l'eccedenza
E1 - E2- E3 = 0
Esempio 3:
A1 + A2 + A3 = 1500
B1 - B2 - B3 = 2000
C1 - C2 - C3 = 3750
D1 - D2 - D3 = 150
E1 - E2- E3 = 200
il totale è 7600 quindi qui bisogna procedere in questo modo toggliere le eccedenze partendo dal gruppo E se non basta si passa al gruppo D a salire fino ad arrivare al totale di 7300
A1 + A2 + A3 = 1500
B1 - B2 - B3 = 2000
C1 - C2 - C3 = 3750
D1 - D2 - D3 = 50 <<<<< qui sottraggo il resto
E1 - E2- E3 = 0 <<<< praticamente qui sottraggo la prima eccedenza ma non basta e quindi passo al gruppo D
Questi sono alcuni esempi spero siano chiari
Aiutatemi a costruire questa funzione perfavore.
Non sò come procedere grazie in anticipo
Mau67
ilario
Profilo
| Senior Member
309
messaggi | Data Invio:
sab 29 mag 2010 - 17:29
ti ho fatto una funzione che calcola i 4 totali
poi adattala tu alle tue esigenze
qui passi solo il valore totale, puoi passare anche i singoli tot A,B,C;D
Private Function calcola(ByVal Maxvalore As Integer) As ArrayList
Dim risultati As New ArrayList
Dim a As Integer = 1000
Dim b As Integer = 2000
Dim c As Integer = 3000
Dim d As Integer = 4000
Dim totale As Integer = a + b + c + d
Dim Differenza As Integer = totale - Maxvalore
If totale > Maxvalore Then
If d > Differenza Then
d = d - Differenza
Differenza = 0
MessageBox.Show(d & "-" & Differenza)
Else
Differenza = Differenza - d
d = 0
'togli da c
If c > Differenza Then
c = c - Differenza
Else
Differenza = Differenza - c
c = 0
If b > Differenza Then
b = b - Differenza
Else
Differenza = Differenza - b
b = 0
If a > Differenza Then
a = a - Differenza
End If
End If
End If
End If
End If
risultati.Add(a)
risultati.Add(b)
risultati.Add(c)
risultati.Add(d)
calcola = risultati
End Function
ciao
ilario
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
sab 29 mag 2010 - 17:37
Intanto grazie devo farti una domanda
Dim a As Integer = 1000
Dim b As Integer = 2000
Dim c As Integer = 3000
Dim d As Integer = 4000
1000 - 2000 - 3000 - 4000 sono fissi o sono solo indicativi?
Mau67
ilario
Profilo
| Senior Member
309
messaggi | Data Invio:
sab 29 mag 2010 - 17:51
sono indicativi per fare una prova è la somma dei singoli a1-a2-a3 e così via
puoi fare una cosa cosi
private function Calcola (byval A as integer ,byval B as integer ,byval C as integer ,byval D as integer ,........)
l'esempio che ti ho fatto è da A a D aggiungici prima anche la E
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
sab 29 mag 2010 - 18:00
Scusami ma la funzione che mi hai scritto come faccio a farla funzionare con questa
strSQL = "SELECT AttoOperativa.ID, ((Sum(Servizi.Aca)) + (Fix(((Sum(Servizi.Mca)) + Fix(((Sum(Servizi.Gca)) / 30))) / 12)))*365 +" & _
"(((((Sum(Servizi.Mca)) + (Fix(((Sum(Servizi.Gca)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mca)) + (Fix((Sum(Servizi.Gca)) / 30))) / 12))) * 12)* 30 +" & _
"((((Sum(Servizi.Gca)) / 30) - Fix(((Sum(Servizi.Gca)) / 30))) * 30) AS A," & _
"((Sum(Servizi.Asu)) + (Fix(((Sum(Servizi.Msu)) + Fix(((Sum(Servizi.Gsu)) / 30))) / 12)))*365 +" & _
"(((((Sum(Servizi.Msu)) + (Fix(((Sum(Servizi.Gsu)) / 30))))) / 12 - (Fix(((Sum(Servizi.Msu)) + (Fix((Sum(Servizi.Gsu)) / 30))) / 12))) * 12)*30 +" & _
"((((Sum(Servizi.Gsu)) / 30) - Fix(((Sum(Servizi.Gsu)) / 30))) * 30) AS B," & _
"((Sum(Servizi.Ata)) + (Fix(((Sum(Servizi.Mta)) + Fix(((Sum(Servizi.Gta)) / 30))) / 12)))*365 +" & _
"(((((Sum(Servizi.Mta)) + (Fix(((Sum(Servizi.Gta)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mta)) + (Fix((Sum(Servizi.Gta)) / 30))) / 12))) * 12)*30 +" & _
"((((Sum(Servizi.Gta)) / 30) - Fix(((Sum(Servizi.Gta)) / 30))) * 30) AS C," & _
"((Sum(Servizi.Apa)) + (Fix(((Sum(Servizi.Mpa)) + Fix(((Sum(Servizi.Gpa)) / 30))) / 12)))* 365 +" & _
"(((((Sum(Servizi.Mpa)) + (Fix(((Sum(Servizi.Gpa)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mpa)) + (Fix((Sum(Servizi.Gpa)) / 30))) / 12))) * 12)*30 +" & _
"((((Sum(Servizi.Gpa)) / 30) - Fix(((Sum(Servizi.Gpa)) / 30))) * 30) AS D," & _
"((Sum(Servizi.Afa)) + (Fix(((Sum(Servizi.Mfa)) + Fix(((Sum(Servizi.Gfa)) / 30))) / 12))) * 365 +" & _
"(((((Sum(Servizi.Mfa)) + (Fix(((Sum(Servizi.Gfa)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mfa)) + (Fix((Sum(Servizi.Gfa)) / 30))) / 12))) * 12)* 30 +" & _
"((((Sum(Servizi.Gfa)) / 30) - Fix(((Sum(Servizi.Gfa)) / 30))) * 30) AS E" & _
" FROM AttoOperativa INNER JOIN Servizi ON AttoOperativa.IDAnagrafica = Servizi.IDAnagrafica where AttoOperativa.IDAnagrafica = '" & ComboBox1.SelectedValue & "' AND AttoOperativa.ID ='" & Id.Text & "'And Servizi.Dal <= #" & CDate(Id.SubItems(1).Text).Month & "/" & CDate(Id.SubItems(1).Text).Day & "/" & CDate(Id.SubItems(1).Text).Year & "# GROUP BY AttoOperativa.ID"
e i risultati inserirli nel dataset?
Qui
daT1 = New OleDbDataAdapter(strSQL, Connection)
daT1.Fill(dtsAtto, "Totali1")
Non sono molto esperto grazie
Mau67
ilario
Profilo
| Senior Member
309
messaggi | Data Invio:
sab 29 mag 2010 - 22:36
estrai i dati con la select fai le somme dei gruppi li passi alla funzione e ti torna un arraylist contenente i vari gruppi poi li salvi in un nuovo dataset
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
dom 30 mag 2010 - 16:22
Non riesco a farlo
Mau67
ilario
Profilo
| Senior Member
309
messaggi | Data Invio:
lun 31 mag 2010 - 08:15
la select che hai scritto cosa restituisce ?
i dati che inserisci nella tabella cosa sono, perchè puoi con una select farti restituire semplicemente i dati che poi elabori e dai alla funzione calcola
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
lun 31 mag 2010 - 10:37
La select restituisce anni mesi e giorni per categoria di azienda.
Il problema che non so agganciarlo alla funzione calcola
Mau67
ilario
Profilo
| Senior Member
309
messaggi | Data Invio:
lun 31 mag 2010 - 10:54
no riesco a spiegarmi
come li ricavi questi
A1 - A2 - A3
B1 - B2 - B3
C1 - C2 - C3
D1 - D2 - D3
E1 - E2- E3
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
lun 31 mag 2010 - 13:55
da qui:
strSQL = "SELECT AttoOperativa.ID, ((Sum(Servizi.Aca)) + (Fix(((Sum(Servizi.Mca)) + Fix(((Sum(Servizi.Gca)) / 30))) / 12))) AS E1" & _
"(((((Sum(Servizi.Mca)) + (Fix(((Sum(Servizi.Gca)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mca)) + (Fix((Sum(Servizi.Gca)) / 30))) / 12))) * 12) AS E2" & _
"((((Sum(Servizi.Gca)) / 30) - Fix(((Sum(Servizi.Gca)) / 30))) * 30) AS E3," & _
"((Sum(Servizi.Asu)) + (Fix(((Sum(Servizi.Msu)) + Fix(((Sum(Servizi.Gsu)) / 30))) / 12))) AS D1" & _
"(((((Sum(Servizi.Msu)) + (Fix(((Sum(Servizi.Gsu)) / 30))))) / 12 - (Fix(((Sum(Servizi.Msu)) + (Fix((Sum(Servizi.Gsu)) / 30))) / 12))) * 12) AS D2" & _
"((((Sum(Servizi.Gsu)) / 30) - Fix(((Sum(Servizi.Gsu)) / 30))) * 30) AS D3," & _
"((Sum(Servizi.Ata)) + (Fix(((Sum(Servizi.Mta)) + Fix(((Sum(Servizi.Gta)) / 30))) / 12))) AS C1" & _
"(((((Sum(Servizi.Mta)) + (Fix(((Sum(Servizi.Gta)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mta)) + (Fix((Sum(Servizi.Gta)) / 30))) / 12))) * 12) AS C2" & _
"((((Sum(Servizi.Gta)) / 30) - Fix(((Sum(Servizi.Gta)) / 30))) * 30) AS C3," & _
"((Sum(Servizi.Apa)) + (Fix(((Sum(Servizi.Mpa)) + Fix(((Sum(Servizi.Gpa)) / 30))) / 12))) AS B1" & _
"(((((Sum(Servizi.Mpa)) + (Fix(((Sum(Servizi.Gpa)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mpa)) + (Fix((Sum(Servizi.Gpa)) / 30))) / 12))) * 12) AS B2" & _
"((((Sum(Servizi.Gpa)) / 30) - Fix(((Sum(Servizi.Gpa)) / 30))) * 30) AS B3," & _
"((Sum(Servizi.Afa)) + (Fix(((Sum(Servizi.Mfa)) + Fix(((Sum(Servizi.Gfa)) / 30))) / 12))) AS A1" & _
"(((((Sum(Servizi.Mfa)) + (Fix(((Sum(Servizi.Gfa)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mfa)) + (Fix((Sum(Servizi.Gfa)) / 30))) / 12))) * 12) AS A2" & _
"((((Sum(Servizi.Gfa)) / 30) - Fix(((Sum(Servizi.Gfa)) / 30))) * 30) AS A3" & _
" FROM AttoOperativa INNER JOIN Servizi ON AttoOperativa.IDAnagrafica = Servizi.IDAnagrafica where AttoOperativa.IDAnagrafica = '" & ComboBox1.SelectedValue & "' AND AttoOperativa.ID ='" & Id.Text & "'And Servizi.Dal <= #" & CDate(Id.SubItems(1).Text).Month & "/" & CDate(Id.SubItems(1).Text).Day & "/" & CDate(Id.SubItems(1).Text).Year & "# GROUP BY AttoOperativa.ID"
dopo la clausola "AS" trovi i gruppi
Dopo la lettera i numeri 1=anni 2=mesi 3=giorni per tutti i gruppi
Mau67
ilario
Profilo
| Senior Member
309
messaggi | Data Invio:
lun 31 mag 2010 - 15:26
con un datareader leggi i valori e li passi a delle variabili
dim A1 as integer e questo per tutti
Try
myConnection.Open()
'opening the connection
myCommand = New SqlCommand("Select * from discounts", myConnection)
'executing the command and assigning it to connection
dr = myCommand.ExecuteReader()
While dr.Read()
'reading from the datareader
E1= dr(0).ToString())
E2 = dr(0).ToString())
E3 = dr(0).ToString())
E4 = dr(0).ToString())
questo per tutte le colonne
'displaying the data from the table
End While
dr.Close()
myConnection.Close()
Catch e As Exception
End Try
poi passi le variabili alla funzione calcola
calcola (a1+a2+a3+a4+a5,b.........,E1+e2....., maxvalore
Private Function calcola(TotA as integer,TotB as integer,TotCas integer,TotD as integer,TotA as integer,ByVal Maxvalore As Integer) As ArrayList
Dim risultati As New ArrayList
Dim a As Integer = 1000
Dim b As Integer = 2000
Dim c As Integer = 3000
Dim d As Integer = 4000
Dim totale As Integer = a + b + c + d
Dim Differenza As Integer = totale - Maxvalore
If totale > Maxvalore Then
If d > Differenza Then
d = d - Differenza
Differenza = 0
MessageBox.Show(d & "-" & Differenza)
Else
Differenza = Differenza - d
d = 0
'togli da c
If c > Differenza Then
c = c - Differenza
Else
Differenza = Differenza - c
c = 0
If b > Differenza Then
b = b - Differenza
Else
Differenza = Differenza - b
b = 0
If a > Differenza Then
a = a - Differenza
End If
End If
End If
End If
End If
risultati.Add(a)
risultati.Add(b)
risultati.Add(c)
risultati.Add(d)
risultati.Add(e)
calcola = risultati
End Function
ti ritorna un arraylist,contenente le singole colonne sommate con questo poi fai quello che ti serve
ciao
ilario
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
lun 31 mag 2010 - 21:39
non riesco a mandare in esecuzione
Private Function calcola(TotA as integer,TotB as integer,TotCas integer,TotD as integer,TotA as integer,ByVal Maxvalore As Integer) As ArrayList
da un button come faccio?
Mau67
ilario
Profilo
| Senior Member
309
messaggi | Data Invio:
mar 1 giu 2010 - 11:51
nel bottone
dim arraycalcola as new arraylist
arraycalcola = calcola(a,b,c,d,e,f,5400)
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
mer 2 giu 2010 - 20:01
Ultimo problema come faccio a riportare i giorni in Anni Mesi e Giorni, e come faccio a inserirli nel dataset?
prima li inserivo cosi
daT1 = New OleDbDataAdapter(strSQL, Connection)
daT1.Fill(dtsAtto, "Totali")
Adesso avendo a, b, c, d, e?
Mau67
Torna su
Stanze Forum
Elenco Threads
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 !