Brutta bestia le date

sabato 21 novembre 2009 - 09.59

Mau67 Profilo | Expert

Salveal forum, come accennato nel titolo le data sono una brutta bestia, praticamente nel mio progetto in visual studio 2008 con database in
access, ho una select che mando in esecuzione con un ciclo For Each perchè mi calcoli dei totali in base ad un filtro data, però questo filtro non funziona perchè le date mi fanno inpazzire.


Praticamente ho una listviw dove in una colonna ci sodo delle date che si vedono in formato gg mm aaaa hh mm ss, il problema che se nella select inserisco #" & Listview2.Items.Subitem(1).text & "# sistematicamente mi restituisce tutti i record senza fare il ciclo For Each.

Esempio: queste date filtro quindi sono nella Listview2.Items.Subitem(1).text
01/01/1998 0.00.00
07/01/1999 0.00.00
03/08/2009 0.00.00

che devono filtrare la select conil ciclo For Each

ma purtroppo questo non avviene cosa devo fare grazie in anticipo
Mau67

Brainkiller Profilo | Guru

>che devono filtrare la select conil ciclo For Each
>ma purtroppo questo non avviene cosa devo fare grazie in anticipo

Prova con l'uso dei parametri:

string SqlString = "select * from tabella where datefield=?"; using (OleDbConnection conn = new OleDbConnection(ConnString)) { using (OleDbCommand cmd = new OleDbCommand(SqlString, conn)) { cmd.CommandType = CommandType.Text; cmd.Parameters.AddWithValue("datefield", la_tua_data); conn.Open(); cmd.ExecuteNonQuery(); } }

Magari costruisci un oggetto DateTime tramite DateTime.Parse(riga_della_list_view) in modo che sai che la data viene presa in formato corretto.
Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

Mau67 Profilo | Expert

Non succede niente, cioè mi calcola i totali uguali per tttel e selezioni senza tener conto dei vari filtraggi di data.

Ti posto il codice che uso magari puoi dirmi dove sbaglio


For Each Id As ListViewItem In ListView2.Items
If Id.Checked = True Then
Dim RowAttoOpRow As dtsAtto.AttoOperativaRow
RowAttoOpRow = dtsAtto.AttoOperativa.NewRow
RowAttoOpRow.ID = Id.Text
RowAttoOpRow.Dal = Id.SubItems(1).Text
RowAttoOpRow.Grado = Id.SubItems(2).Text
RowAttoOpRow.Omo = Id.SubItems(3).Text
RowAttoOpRow.Operativa = Id.SubItems(4).Text
RowAttoOpRow.IDAnagrafica = Id.SubItems(5).Text
RowAttoOpRow.IDGrado = Id.SubItems(6).Text
RowAttoOpRow.IDOmo = Id.SubItems(7).Text
dtsAtto.AttoOperativa.Rows.Add(RowAttoOpRow)
End If



strSQL = "SELECT AttoOperativa.ID, ((Sum(Servizi.Aca)) + (Fix(((Sum(Servizi.Mca)) + Fix(((Sum(Servizi.Gca)) / 30))) / 12))) AS Aca," & _
"(((((Sum(Servizi.Mca)) + (Fix(((Sum(Servizi.Gca)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mca)) + (Fix((Sum(Servizi.Gca)) / 30))) / 12))) * 12) AS Mca," & _
"((((Sum(Servizi.Gca)) / 30) - Fix(((Sum(Servizi.Gca)) / 30))) * 30) AS Gca," & _
"((Sum(Servizi.Asu)) + (Fix(((Sum(Servizi.Msu)) + Fix(((Sum(Servizi.Gsu)) / 30))) / 12))) AS Asu," & _
"(((((Sum(Servizi.Msu)) + (Fix(((Sum(Servizi.Gsu)) / 30))))) / 12 - (Fix(((Sum(Servizi.Msu)) + (Fix((Sum(Servizi.Gsu)) / 30))) / 12))) * 12) AS Msu," & _
"((((Sum(Servizi.Gsu)) / 30) - Fix(((Sum(Servizi.Gsu)) / 30))) * 30) AS Gsu," & _
"((Sum(Servizi.Ata)) + (Fix(((Sum(Servizi.Mta)) + Fix(((Sum(Servizi.Gta)) / 30))) / 12))) AS Ata," & _
"(((((Sum(Servizi.Mta)) + (Fix(((Sum(Servizi.Gta)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mta)) + (Fix((Sum(Servizi.Gta)) / 30))) / 12))) * 12) AS Mta," & _
"((((Sum(Servizi.Gta)) / 30) - Fix(((Sum(Servizi.Gta)) / 30))) * 30) AS Gta," & _
"((Sum(Servizi.Apa)) + (Fix(((Sum(Servizi.Mpa)) + Fix(((Sum(Servizi.Gpa)) / 30))) / 12))) AS Apa," & _
"(((((Sum(Servizi.Mpa)) + (Fix(((Sum(Servizi.Gpa)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mpa)) + (Fix((Sum(Servizi.Gpa)) / 30))) / 12))) * 12) AS Mpa," & _
"((((Sum(Servizi.Gpa)) / 30) - Fix(((Sum(Servizi.Gpa)) / 30))) * 30) AS Gpa," & _
"((Sum(Servizi.Afa)) + (Fix(((Sum(Servizi.Mfa)) + Fix(((Sum(Servizi.Gfa)) / 30))) / 12))) AS Afa," & _
"(((((Sum(Servizi.Mfa)) + (Fix(((Sum(Servizi.Gfa)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mfa)) + (Fix((Sum(Servizi.Gfa)) / 30))) / 12))) * 12) AS Mfa," & _
"((((Sum(Servizi.Gfa)) / 30) - Fix(((Sum(Servizi.Gfa)) / 30))) * 30) AS Gfa" & _
" FROM AttoOperativa INNER JOIN Servizi ON AttoOperativa.IDAnagrafica = Servizi.IDAnagrafica where AttoOperativa.IDAnagrafica = '" & ComboBox1.SelectedValue & "' And Servizi.Dal <= #" & DateTime.Parse(Id.SubItems(1).Text) & "# AND AttoOperativa.ID ='" & Id.Text & "' GROUP BY AttoOperativa.ID"

daT1 = New OleDbDataAdapter(strSQL, Connection)
daT1.Fill(dtsAtto, "Totali")
Next
Mau67

AntCiar Profilo | Expert

Ciao. In Access quando devi filtrare con parametri data, devi scrivere il tutto in questo formato:

#mm/gg/yyyy#. Io farei in questo modo. Nella tua listview assocerei al singolo listviewitem un array contenente le due date come oggetti datetime. Poi farei una piccola funzione che passata la data ti restituisce il relativo formato per il filtro.

ListviewItem elem = new Listviewitem();
elem.Text = objData1.ToShortDateString() + " " + objData1.ToShortTimeString();
elem.subItems.Add(objData2.ToShortDateString() + " " + objData2.ToShortTimeString());
elem.Tag = new DateTime[] {objData1, objData2};
this.listview1.items.add(elem)

Private string GetData(DateTime dt)
{
return "#" + dt.Month + "/" + dt.Day + "/" + dt.Year + "#";
}

PS il codice che ho scritto l'ho inserito direttamente dal forum, quindi è probabile che qualche maiuscola/minuscola non si trovi.

Ciao ciao
Cristian Barca

Mau67 Profilo | Expert

Provo e riprovo ma da principiante non riesco perchè non so dove e come collocare il codice, ti posto il codice della listview dove c'è il campo data da dove filtrare la select che ti ho postato ieri

ringrazio anticipatamente

Dim Sql As String = "SELECT AttoOperativa.ID, AttoOperativa.Dal, Gradi.Descrizione, Omogenizzazione.Descrizione, Operative.Descrizione, AttoOperativa.IDAnagrafica, Gradi.IDGrado, AttoOperativa.IDOmo" & _
" FROM ((AttoOperativa LEFT JOIN Gradi ON AttoOperativa.IDGrado = Gradi.IDGrado) LEFT JOIN Omogenizzazione ON AttoOperativa.IDOmo = Omogenizzazione.IDOmogenizzazione) LEFT JOIN Operative ON AttoOperativa.IDOperativa = Operative.ID WHERE IDAnagrafica = '" & ComboBox1.SelectedValue & "' order by Dal"

' Svuota la casella ListView1 e
' la casella di testo
ListView2.Items.Clear()

Dim thisCommand As New OleDbCommand(Sql, Connection)
' Set the view to show details.
ListView2.View = View.Details
' Allow the user to edit item text.
ListView2.LabelEdit = True
' Allow the user to rearrange columns.
ListView2.AllowColumnReorder = True
' Display check boxes.
ListView2.CheckBoxes = True
' Select the item and subitems when selection is made.
ListView2.FullRowSelect = True
' Display grid lines.
ListView2.GridLines = True
' Sort the items in the list in ascending order.
ListView2.Sorting = SortOrder.None


Try


Me.ListView2.Columns.Clear()
Connection.Open()

Dim thisReader As OleDbDataReader = thisCommand.ExecuteReader()

While (thisReader.Read())
Dim item As New ListViewItem(thisReader.Item(0).ToString, 0)
item.SubItems.Add(thisReader.Item(1).ToString)<<<<<<<<<<<<<Questo è il campo data che poi serve per filtrare la select
item.SubItems.Add(thisReader.Item(2).ToString)
item.SubItems.Add(thisReader.Item(3).ToString)
item.SubItems.Add(thisReader.Item(4).ToString)
item.SubItems.Add(thisReader.Item(5).ToString)
item.SubItems.Add(thisReader.Item(6).ToString)
item.SubItems.Add(thisReader.Item(7).ToString)
ListView2.Items.AddRange(New ListViewItem() {item})
End While

ListView2.Columns.Add("ID", 80, HorizontalAlignment.Left)
ListView2.Columns.Add("DECORRENZA", 100, HorizontalAlignment.Left)
ListView2.Columns.Add("GRADO", 250, HorizontalAlignment.Left)
ListView2.Columns.Add("GRADO ECONOMICO", 250, HorizontalAlignment.Left)
ListView2.Columns.Add("OPERATIVA", 200, HorizontalAlignment.Left)
ListView2.Columns.Add("ID ANAGRAFICA", 0, HorizontalAlignment.Left)
ListView2.Columns.Add("ID GRADO", 0, HorizontalAlignment.Left)
ListView2.Columns.Add("ID OMO", 0, HorizontalAlignment.Left)

Catch ex As Exception
'MsgBox(ex.Message)

End Try
Connection.Close()
Mau67

AntCiar Profilo | Expert

ciao.

Ti posto di seguito le modifiche da apportare al tuo codice.
Nel ciclo While che usi per caricare ogni singolo listviewitem, prima di fare

ListView2.Items.AddRange(New ListViewItem() {item})

aggiungi questa istruzione:

item.Tag = CDate(thisreader.Item(1))


ora passiamo al fltro.
dai tuoi post precedenti non ho capito bene se devi fare un filtro per uno specifico elemento selezionato della listview oppure per tutti gli elementi. Comunque il codice che segue serve a fare entrambe le cose. Alla Sub devi passare un listviewitem (o quello selezionato oppure fai un ciclo su tutti gli item)


private sub FiltraPerData(Byval elemento as ListViewItem)
dim SqlFilter as string = ""
SqlFilter = "SELECT ..... FROM ..... WHERE 'CampoData' = #" & cdate(elemento .Tag).Month & "/" & cdate(elemento .Tag).Day & "/" & cdate(elemento .Tag).Year & "# ORDER BY...."
end sub

Spero ti sia stato di aiuto.

Ciao ciao




Cristian Barca

Mau67 Profilo | Expert

Questo mi dà problemi

Private Sub FiltraPerData(ByVal elemento As ListViewItem)
Dim SqlFilter As String = ""
SqlFilter = "SELECT ..... FROM ..... WHERE 'CampoData' = #" & CDate(elemento.Tag).Month & "/" & CDate(elemento.Tag).Day & "/" & CDate(elemento.Tag).Year & "# ORDER BY...."
End Sub

Il mio codice è dentro un button ti posto tutto

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


If Not File.Exists(FILE_NAME) Then
MsgBox(FILE_NAME & " Stringa di connessione mancante.")
Return
End If
Dim sr As StreamReader = File.OpenText(FILE_NAME)
Dim sqlString As String
sqlString = sr.ReadLine()
Me.ToolStripStatusLabel2.Text = (sqlString) 'Questo è solo per verificare!
sr.Close()
Dim Connection As New OleDbConnection(sqlString)


Connection.Open()
Dim dtsAtto As New dtsAtto
Dim strSQL As String
Dim daT1, daT2, daT3, daT4, daT5, daT6, daT7, daT8, daT9, daT10, daT11 As OleDbDataAdapter

Dim Anno As Date = Me.ListView2.Items(0).SubItems(1).Text
Dim subString As String
subString = Microsoft.VisualBasic.Right(Anno, 4)



For Each Id As ListViewItem In ListView2.Items
If Id.Checked = True Then
Dim RowAttoOpRow As dtsAtto.AttoOperativaRow
RowAttoOpRow = dtsAtto.AttoOperativa.NewRow
RowAttoOpRow.ID = Id.Text
RowAttoOpRow.Dal = Id.SubItems(1).Text
RowAttoOpRow.Grado = Id.SubItems(2).Text
RowAttoOpRow.Omo = Id.SubItems(3).Text
RowAttoOpRow.Operativa = Id.SubItems(4).Text
RowAttoOpRow.IDAnagrafica = Id.SubItems(5).Text
RowAttoOpRow.IDGrado = Id.SubItems(6).Text
RowAttoOpRow.IDOmo = Id.SubItems(7).Text
dtsAtto.AttoOperativa.Rows.Add(RowAttoOpRow)
End If




strSQL = "SELECT AttoOperativa.ID, ((Sum(Servizi.Aca)) + (Fix(((Sum(Servizi.Mca)) + Fix(((Sum(Servizi.Gca)) / 30))) / 12))) AS Aca," & _
"(((((Sum(Servizi.Mca)) + (Fix(((Sum(Servizi.Gca)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mca)) + (Fix((Sum(Servizi.Gca)) / 30))) / 12))) * 12) AS Mca," & _
"((((Sum(Servizi.Gca)) / 30) - Fix(((Sum(Servizi.Gca)) / 30))) * 30) AS Gca," & _
"((Sum(Servizi.Asu)) + (Fix(((Sum(Servizi.Msu)) + Fix(((Sum(Servizi.Gsu)) / 30))) / 12))) AS Asu," & _
"(((((Sum(Servizi.Msu)) + (Fix(((Sum(Servizi.Gsu)) / 30))))) / 12 - (Fix(((Sum(Servizi.Msu)) + (Fix((Sum(Servizi.Gsu)) / 30))) / 12))) * 12) AS Msu," & _
"((((Sum(Servizi.Gsu)) / 30) - Fix(((Sum(Servizi.Gsu)) / 30))) * 30) AS Gsu," & _
"((Sum(Servizi.Ata)) + (Fix(((Sum(Servizi.Mta)) + Fix(((Sum(Servizi.Gta)) / 30))) / 12))) AS Ata," & _
"(((((Sum(Servizi.Mta)) + (Fix(((Sum(Servizi.Gta)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mta)) + (Fix((Sum(Servizi.Gta)) / 30))) / 12))) * 12) AS Mta," & _
"((((Sum(Servizi.Gta)) / 30) - Fix(((Sum(Servizi.Gta)) / 30))) * 30) AS Gta," & _
"((Sum(Servizi.Apa)) + (Fix(((Sum(Servizi.Mpa)) + Fix(((Sum(Servizi.Gpa)) / 30))) / 12))) AS Apa," & _
"(((((Sum(Servizi.Mpa)) + (Fix(((Sum(Servizi.Gpa)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mpa)) + (Fix((Sum(Servizi.Gpa)) / 30))) / 12))) * 12) AS Mpa," & _
"((((Sum(Servizi.Gpa)) / 30) - Fix(((Sum(Servizi.Gpa)) / 30))) * 30) AS Gpa," & _
"((Sum(Servizi.Afa)) + (Fix(((Sum(Servizi.Mfa)) + Fix(((Sum(Servizi.Gfa)) / 30))) / 12))) AS Afa," & _
"(((((Sum(Servizi.Mfa)) + (Fix(((Sum(Servizi.Gfa)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mfa)) + (Fix((Sum(Servizi.Gfa)) / 30))) / 12))) * 12) AS Mfa," & _
"((((Sum(Servizi.Gfa)) / 30) - Fix(((Sum(Servizi.Gfa)) / 30))) * 30) AS Gfa" & _
" FROM AttoOperativa INNER JOIN Servizi ON AttoOperativa.IDAnagrafica = Servizi.IDAnagrafica where AttoOperativa.IDAnagrafica = '" & ComboBox1.SelectedValue & "' AND AttoOperativa.ID ='" & Id.Text & "'And Servizi.Dal <= #" & CDate(elemento.Tag).Month & "/" & CDate(elemento.Tag).Day & "/" & CDate(elemento.Tag).Year & "# GROUP BY AttoOperativa.ID"

daT1 = New OleDbDataAdapter(strSQL, Connection)
daT1.Fill(dtsAtto, "Totali")
End Sub
Mau67

AntCiar Profilo | Expert

> For Each Id As ListViewItem In ListView2.Items
> If Id.Checked = True Then
> Dim RowAttoOpRow As dtsAtto.AttoOperativaRow
> RowAttoOpRow = dtsAtto.AttoOperativa.NewRow
> RowAttoOpRow.ID = Id.Text
> RowAttoOpRow.Dal = Id.SubItems(1).Text
> RowAttoOpRow.Grado = Id.SubItems(2).Text
> RowAttoOpRow.Omo = Id.SubItems(3).Text
> RowAttoOpRow.Operativa = Id.SubItems(4).Text
>RowAttoOpRow.IDAnagrafica = Id.SubItems(5).Text
> RowAttoOpRow.IDGrado = Id.SubItems(6).Text
> RowAttoOpRow.IDOmo = Id.SubItems(7).Text
> dtsAtto.AttoOperativa.Rows.Add(RowAttoOpRow)
> End If
>
>
>
>
>strSQL = "SELECT AttoOperativa.ID, ((Sum(Servizi.Aca)) + (Fix(((Sum(Servizi.Mca))
>+ Fix(((Sum(Servizi.Gca)) / 30))) / 12))) AS Aca," & _
>"(((((Sum(Servizi.Mca)) + (Fix(((Sum(Servizi.Gca)) / 30)))))
>/ 12 - (Fix(((Sum(Servizi.Mca)) + (Fix((Sum(Servizi.Gca)) / 30)))
>/ 12))) * 12) AS Mca," & _
>"((((Sum(Servizi.Gca)) / 30) - Fix(((Sum(Servizi.Gca)) / 30)))
>* 30) AS Gca," & _
>"((Sum(Servizi.Asu)) + (Fix(((Sum(Servizi.Msu)) + Fix(((Sum(Servizi.Gsu))
>/ 30))) / 12))) AS Asu," & _
>"(((((Sum(Servizi.Msu)) + (Fix(((Sum(Servizi.Gsu)) / 30)))))
>/ 12 - (Fix(((Sum(Servizi.Msu)) + (Fix((Sum(Servizi.Gsu)) / 30)))
>/ 12))) * 12) AS Msu," & _
>"((((Sum(Servizi.Gsu)) / 30) - Fix(((Sum(Servizi.Gsu)) / 30)))
>* 30) AS Gsu," & _
>"((Sum(Servizi.Ata)) + (Fix(((Sum(Servizi.Mta)) + Fix(((Sum(Servizi.Gta))
>/ 30))) / 12))) AS Ata," & _
>"(((((Sum(Servizi.Mta)) + (Fix(((Sum(Servizi.Gta)) / 30)))))
>/ 12 - (Fix(((Sum(Servizi.Mta)) + (Fix((Sum(Servizi.Gta)) / 30)))
>/ 12))) * 12) AS Mta," & _
>"((((Sum(Servizi.Gta)) / 30) - Fix(((Sum(Servizi.Gta)) / 30)))
>* 30) AS Gta," & _
>"((Sum(Servizi.Apa)) + (Fix(((Sum(Servizi.Mpa)) + Fix(((Sum(Servizi.Gpa))
>/ 30))) / 12))) AS Apa," & _
>"(((((Sum(Servizi.Mpa)) + (Fix(((Sum(Servizi.Gpa)) / 30)))))
>/ 12 - (Fix(((Sum(Servizi.Mpa)) + (Fix((Sum(Servizi.Gpa)) / 30)))
>/ 12))) * 12) AS Mpa," & _
>"((((Sum(Servizi.Gpa)) / 30) - Fix(((Sum(Servizi.Gpa)) / 30)))
>* 30) AS Gpa," & _
>"((Sum(Servizi.Afa)) + (Fix(((Sum(Servizi.Mfa)) + Fix(((Sum(Servizi.Gfa))
>/ 30))) / 12))) AS Afa," & _
>"(((((Sum(Servizi.Mfa)) + (Fix(((Sum(Servizi.Gfa)) / 30)))))
>/ 12 - (Fix(((Sum(Servizi.Mfa)) + (Fix((Sum(Servizi.Gfa)) / 30)))
>/ 12))) * 12) AS Mfa," & _
>"((((Sum(Servizi.Gfa)) / 30) - Fix(((Sum(Servizi.Gfa)) / 30)))
>* 30) AS Gfa" & _
>" FROM AttoOperativa INNER JOIN Servizi ON AttoOperativa.IDAnagrafica
>= Servizi.IDAnagrafica where AttoOperativa.IDAnagrafica = '"
>& ComboBox1.SelectedValue & "' AND AttoOperativa.ID ='" & Id.Text
>& "'And Servizi.Dal <= #" & CDate(elemento.Tag).Month & "/"
>& CDate(elemento.Tag).Day & "/" & CDate(elemento.Tag).Year &
>"# GROUP BY AttoOperativa.ID"
>
> daT1 = New OleDbDataAdapter(strSQL, Connection)
> daT1.Fill(dtsAtto, "Totali")
>End Sub
>Mau67

1 - in che punto si chiude il "For Each"?
2 - nel tuo "For Each" controlli se il listviewitem è checked = true e poi l'istruzione SQL la tieni fuori dall' IF (non mi sombra corretto perchè penso che la costruzione della stringa SQL sia legata all'emento con Checked = true)
3 - nella tua SQL alla fine utilizzi una variabile CDate(elemento.Tag). Dove dichiari 'elemento' e soprattutto quando valorizzi il suo Tag?


in definitiva dovresti usare questo approccio per risolvere il tuo problema

1 - quando riempi la listview con gli Items, associa ad ogni Item la riga del thisReader nella proprietà Tag dell'item. In questo modo non hai bisogno di convertire gli eventuali subItems.Text nel tipo che ti serve quando li vai a leggere. Hai già tutto nel tipo originale.

2 - quando fai for each e controlli quelli con checked = true, costruisci la tua stringa come hai fatto fino a ora leggendo la data nell'oggetto associato al Tag dell'elemento corrente.





Cristian Barca

Mau67 Profilo | Expert

ci sono altre select che seguono e er le altre select mi fai il ciclo per quella delle somme invece non ne tiene conto

Questo è tutto il codice

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


If Not File.Exists(FILE_NAME) Then
MsgBox(FILE_NAME & " Stringa di connessione mancante.")
Return
End If
Dim sr As StreamReader = File.OpenText(FILE_NAME)
Dim sqlString As String
sqlString = sr.ReadLine()
Me.ToolStripStatusLabel2.Text = (sqlString) 'Questo è solo per verificare!
sr.Close()
Dim Connection As New OleDbConnection(sqlString)


Connection.Open()
Dim dtsAtto As New dtsAtto
Dim strSQL As String
Dim daT1, daT2, daT3, daT4, daT5, daT6, daT7, daT8, daT9, daT10, daT11 As OleDbDataAdapter

Dim Anno As Date = Me.ListView2.Items(0).SubItems(1).Text
Dim subString As String
subString = Microsoft.VisualBasic.Right(Anno, 4)



For Each Id As ListViewItem In ListView2.Items
If Id.Checked = True Then
Dim RowAttoOpRow As dtsAtto.AttoOperativaRow
RowAttoOpRow = dtsAtto.AttoOperativa.NewRow
RowAttoOpRow.ID = Id.Text
RowAttoOpRow.Dal = Id.SubItems(1).Tag
RowAttoOpRow.Grado = Id.SubItems(2).Text
RowAttoOpRow.Omo = Id.SubItems(3).Text
RowAttoOpRow.Operativa = Id.SubItems(4).Text
RowAttoOpRow.IDAnagrafica = Id.SubItems(5).Text
RowAttoOpRow.IDGrado = Id.SubItems(6).Text
RowAttoOpRow.IDOmo = Id.SubItems(7).Text
dtsAtto.AttoOperativa.Rows.Add(RowAttoOpRow)
End If <<<<<<<<<<qui fa il ciclo




strSQL = "SELECT AttoOperativa.ID, ((Sum(Servizi.Aca)) + (Fix(((Sum(Servizi.Mca)) + Fix(((Sum(Servizi.Gca)) / 30))) / 12))) AS Aca," & _
"(((((Sum(Servizi.Mca)) + (Fix(((Sum(Servizi.Gca)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mca)) + (Fix((Sum(Servizi.Gca)) / 30))) / 12))) * 12) AS Mca," & _
"((((Sum(Servizi.Gca)) / 30) - Fix(((Sum(Servizi.Gca)) / 30))) * 30) AS Gca," & _
"((Sum(Servizi.Asu)) + (Fix(((Sum(Servizi.Msu)) + Fix(((Sum(Servizi.Gsu)) / 30))) / 12))) AS Asu," & _
"(((((Sum(Servizi.Msu)) + (Fix(((Sum(Servizi.Gsu)) / 30))))) / 12 - (Fix(((Sum(Servizi.Msu)) + (Fix((Sum(Servizi.Gsu)) / 30))) / 12))) * 12) AS Msu," & _
"((((Sum(Servizi.Gsu)) / 30) - Fix(((Sum(Servizi.Gsu)) / 30))) * 30) AS Gsu," & _
"((Sum(Servizi.Ata)) + (Fix(((Sum(Servizi.Mta)) + Fix(((Sum(Servizi.Gta)) / 30))) / 12))) AS Ata," & _
"(((((Sum(Servizi.Mta)) + (Fix(((Sum(Servizi.Gta)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mta)) + (Fix((Sum(Servizi.Gta)) / 30))) / 12))) * 12) AS Mta," & _
"((((Sum(Servizi.Gta)) / 30) - Fix(((Sum(Servizi.Gta)) / 30))) * 30) AS Gta," & _
"((Sum(Servizi.Apa)) + (Fix(((Sum(Servizi.Mpa)) + Fix(((Sum(Servizi.Gpa)) / 30))) / 12))) AS Apa," & _
"(((((Sum(Servizi.Mpa)) + (Fix(((Sum(Servizi.Gpa)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mpa)) + (Fix((Sum(Servizi.Gpa)) / 30))) / 12))) * 12) AS Mpa," & _
"((((Sum(Servizi.Gpa)) / 30) - Fix(((Sum(Servizi.Gpa)) / 30))) * 30) AS Gpa," & _
"((Sum(Servizi.Afa)) + (Fix(((Sum(Servizi.Mfa)) + Fix(((Sum(Servizi.Gfa)) / 30))) / 12))) AS Afa," & _
"(((((Sum(Servizi.Mfa)) + (Fix(((Sum(Servizi.Gfa)) / 30))))) / 12 - (Fix(((Sum(Servizi.Mfa)) + (Fix((Sum(Servizi.Gfa)) / 30))) / 12))) * 12) AS Mfa," & _
"((((Sum(Servizi.Gfa)) / 30) - Fix(((Sum(Servizi.Gfa)) / 30))) * 30) AS Gfa" & _
" FROM AttoOperativa INNER JOIN Servizi ON AttoOperativa.IDAnagrafica = Servizi.IDAnagrafica where AttoOperativa.IDAnagrafica = '" & ComboBox1.SelectedValue & "' AND AttoOperativa.ID ='" & Id.Text & "'And Servizi.Dal <= #" & CDate(elemento.Tag).Month & "/" & CDate(elemento.Tag).Day & "/" & CDate(elemento.Tag).Year & "# GROUP BY AttoOperativa.ID"

daT1 = New OleDbDataAdapter(strSQL, Connection)
daT1.Fill(dtsAtto, "Totali") <<<<<<<<<<<<<<<<<<<<<<<<<<Qui non fà il ciclo


strSQL = "SELECT AttoOperativa.ID, ImportiOperativa.IDGrado, ImportiOperativa.ImportoBase, ImportiOperativa.ImportoBaseMagg, ImportiOperativa.Riferimento, ImportiOperativa.Anno, TipologiaOperative.AumentoPerc As Percentuale" & _
" FROM TipologiaOperative INNER JOIN (AttoOperativa INNER JOIN ImportiOperativa ON AttoOperativa.IDOmo = ImportiOperativa.IDGrado) ON TipologiaOperative.IDOperativa = AttoOperativa.IDOperativa" & _
" WHERE (((AttoOperativa.IDAnagrafica)='" & ComboBox1.SelectedValue & "') AND ((AttoOperativa.ID)='" & Id.Text & "') AND ((ImportiOperativa.Anno)=" & Year(Date.Parse(Id.SubItems(1).Text)) & ") AND ((TipologiaOperative.IDCategoria)='" & Label12.Text & "'))"


daT2 = New OleDbDataAdapter(strSQL, Connection)
daT2.Fill(dtsAtto, "ImportiOmogenizzazione") <<<<<<<<<<<<<<Qui fà il ciclo


strSQL = "SELECT AttoOperativa.ID, ImportiOperativa.IDGrado, ImportiOperativa.ImportoBase, ImportiOperativa.ImportoBaseMagg, ImportiOperativa.Riferimento, ImportiOperativa.Anno, TipologiaOperative.AumentoPerc As Percentuale" & _
" FROM TipologiaOperative INNER JOIN (AttoOperativa INNER JOIN ImportiOperativa ON AttoOperativa.IDGrado = ImportiOperativa.IDGrado) ON TipologiaOperative.IDOperativa = AttoOperativa.IDOperativa" & _
" WHERE (((AttoOperativa.IDAnagrafica)='" & ComboBox1.SelectedValue & "') AND ((AttoOperativa.ID)='" & Id.Text & "') AND ((ImportiOperativa.Anno)=" & Year(Date.Parse(Id.SubItems(1).Text)) & ") AND ((TipologiaOperative.IDCategoria)='" & Label12.Text & "'))"

daT3 = New OleDbDataAdapter(strSQL, Connection)
daT3.Fill(dtsAtto, "ImportiOperativa") <<<<<<<<<<<<<<Qui fà il ciclo


Next
Mau67

AntCiar Profilo | Expert

Ciao. Scusa per il ritardo.

Guardando il codice postato nell'ultimo msg non noto errori strutturali. Non ci dovrebbero essere errori sempre a patto che le variabili che utilizzi per i filtri siano correttamente valorizzate.

Quello che eviterei è di usare i cast da stringa a datetime. Se per esempio un domani invece della data scritta "24/11/2009" qualcuno di dirà di metterci solo Giorno e mese, leggendo il text dell'item, sei fregato quando lo vuoi utilizzare per la select.


Cristian Barca

Mau67 Profilo | Expert

Grazie per l'aiuto, dopo tanti tentativi avevo la soluzione da te suggerita sotto gli occhi ma non riuscia vederla, ma finalmente ci sono arrivato, praticamente non serve il tagecco quello che ho fatto

#" & CDate(Id.SubItems(1).Text).Month & "/" & CDate(Id.SubItems(1).Text).Day & "/" & CDate(Id.SubItems(1).Text).Year & "#

Ciao e grazie ancora
Mau67
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5