Recuperare una data dal select case. Per creare una variabile da inser...

martedì 14 luglio 2009 - 11.32

ivanuccio Profilo | Junior Member

Cari colleghi rieccomi con un quesito che non riesco a risolvere, per il semplice motivo che sono un profano di vb.net, insomma devo poter inserire una variabile all'interno di una querystring che generi un risultato in base alla data che viene selezionata. Avevo pensato che potevo risolvere il problema creando una "select case" di questo genere.

Select Case ListBox1
Case 0
Gennaio = "31-01"
TextBox1.Text = Gennaio
Case 1
Febbraio = "28-02"
TextBox1.Text = Febbraio
Case 2
Marzo = "31-03"
TextBox1.Text = Marzo
Case 3
Aprile = "30-04"
TextBox1.Text = Aprile
Case 4
Maggio = "31-05"
TextBox1.Text = Maggio
Case 5
Giugno = "30-06"
TextBox1.Text = Giugno
Case 6
Luglio = "31-07 "
TextBox1.Text = Luglio
Case 7
Agosto = "31-08"
TextBox1.Text = Agosto
Case 8
Settembre = "30-9"
TextBox1.Text = Settembre
Case 9
Ottobre = "30-10"
TextBox1.Text = Ottobre
Case 10
Novembre = "30-11"
TextBox1.Text = Novembre
Case 11
Dicembre = "30-12"
TextBox1.Text = Dicembre
End Select


In modo che l'utente clicchi nella listbox il mese che interessa ed alla pressione del tasto button, il risultato inviasse una variabile con il contenuto del mese selezionato. Ma il mio problema e come recuperare la variabile con i dati del mese selezionato, e passarli alla query ???

Spero di essere stato chiaro e ringrazio infinitamente chi mi darebbe una mano.... ad unpovero imbranato in vb.net.

Grazie mille.
http://www.millesity.com

ysdemarc Profilo | Expert

ciao..molto probabilmente sbaglierò poichè non ho capito affatto quello che vorresti...

io mi costruirei una classettina ad esempio Mese dove all'interno abbia le proprietà Giorni, Descrizione e Numero e un metodo override ToString() che ritorna la descrizione;
la listbox conterrà usando il metodo Add di Items tutti i mei oggetti Mese che saranno ben definiti e valorizzati.

a questo punto se l'utente seleziona un elemento della listbox otterrò l'oggetto Mese selezionato, quindi Mese m = (Mese)listbox1.SelectedItem;

e a questo punto andrei a costruirmi l'sql con quello che voglio...



Vincenzo
Programmatore sbilenco

ivanuccio Profilo | Junior Member

Grazie mille per la tua risposta, e finalmente tutto piu chiaro, con precisione devo inserire in una query una variabile che contenga il risultato della scelta dell'utente, e quini se l'utente scegli il 31-07-09 la query mi restituirà tutti i risultati (fatture) che fanno parte di quel periodo.
Spero di essere stato chiaro. Io essendo profano avevo pensato ad una select case per recuperare il valore selezionato dall'utente ma non e detto che debba usare perforza una select case.....
Ma il problema principale e che in poche parole non so nemmeno come creare una classe :-( o forse lo so ma non so che quello vuol dire creare una classe.
Per caso avresti un link di riferimento alla creazione del tuo consiglio ?? Scusami e mille grazie per il tuo tempo....
resto in attesa davanti al pc.

Jeremy Profilo | Guru

Ciao Giovanni.
Ma il compilatore non ti ha tirato le orecchie per il codice che hai scritto??

Anche io non ho capito molto bene cosa vorresti ottenere .... ma sono sicuro che risolveresti gestendo l'evento SelectedValueChanged del ListBox.
Tra l'altro ..... perchè mai dovresti usare il simbolo - come separatore per le date??

Se ci dai qualche delucidazione in più .... sono sicuro che potremmo risolvere con l'evento che ti ho indicato, con una tipizzazione più corretta e con la parametrizzazione della QueryString.

Facci sapere...
Ciao

ivanuccio Profilo | Junior Member

Ma certo,

Vi delucido con una piccola trama del mio scenario.

Ho un form dove sono indeciso se usare una listbox con l'elenco dei 12 mesi oppure una CheckedListBox con l'elenco degli stessi 12 mesi per i quali l'utente sceglie il mese che gli interessa ad esempio Luglio, preme il pulsante ok e nel momento in cui preme il tasto ok viene valorizzata una variabile che contenga il mese selezionato e lo passa alla query stringa che genera le fatture del mese di luglio....

Per intenderci non riesco a valorizare una variabile che poi deve essere inserita all'interno di una query... vi allego la quer che ho fatto
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SELECT ClientiFattura.*, TestaFattura.NrFattura, TestaFattura.Data, TestaFattura.Pagamento, TestaFattura.Banca, TestaFattura.Agenzia,TestaFattura.CodCliente, TestaFattura.Piva AS Expr1, TestaFattura.TotaleNolo, TestaFattura.TotaleDirittoFisso, TestaFattura.TotaleDirittoAssegno,TestaFattura.TotaleDirittoAssicurazione, TestaFattura.TotaleVarie, TestaFattura.TotaleImponibile, TestaFattura.Iva, TestaFattura.TotaleImposta,TestaFattura.TotaleNonImponibile, TestaFattura.TotaleParziale, TestaFattura.TotaleAnticipate, TestaFattura.TotaleBollo, TestaFattura.SpeseIncasso,TestaFattura.TotaleFattura, TestaFattura.TotaleLire, TestaFattura.Cliente AS Expr2, TestaFattura.Cliente2, TestaFattura.Indirizzo AS Expr3,TestaFattura.Cap AS Expr4, TestaFattura.Localita AS Expr5, TestaFattura.Provincia, TestaFattura.Indirizzo2, TestaFattura.Cap2, TestaFattura.Localita2, TestaFattura.Pv2, TestaFattura.[ca-codes], TestaFattura.[ca-deses__1], TestaFattura.[ff-altre__7], TestaFattura.[ff-altre__20],TestaFattura.[ff-altre__21]FROM TestaFattura INNER JOIN ClientiFattura ON TestaFattura.CodCliente = ClientiFattura.Cliente INNER JOIN Claus ON ClientiFattura.Cliente = Claus.[ca-cd] WHERE(Claus.[ca-listi] = N'1') AND (TestaFattura.Data = CONVERT(DATETIME, '2009-05-31 00:00:00', 102))AND (TestaFattura.TotaleFattura > 50.00000) ORDER BY TestaFattura.Data", GenfatConn)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' vedete dove c'è (DATETIME, '2009-05-31 00:00:00', 102) li devo sostituirla con una variabile che non riesco concettualmente a recuperare da una listbox, cekbox o qualsiasi altro strumento che mi passi una data..

Spero di essere stato chiaro....
resto sempre vicino allo schermo... per il vostro enorme ed immenso auto...
http://www.millesity.com

ysdemarc Profilo | Expert

continuo a non capire..(sarà il sonno)

dalla selezione della listobox o quant'altro riesci a capire che mese abbia selezionato no?
in modo poco elegante se non vuoi utilizzare oggetti e sono presenti tutti i mesi potresti scrivere nell'evento click del tuo button

int mese = lisbox1.SelextedIndex + 1;

e poi tutta la tua query che io cambierei visto che mi pare di capire che vuoi tutto il mese in

... Month(TestaFattura.Data) = " + mese.ToString() + "..."

e magari inserendo anche l'anno suppongo nella query nello stesso modo

oppure vedere qual'è la datas di inizio mese o di fine mese ed usare una bella BETWEEN nell'sql
Vincenzo
Programmatore sbilenco

ivanuccio Profilo | Junior Member

Caro Vincenzo.
Certo che riesco a capire se l'utente ha selezionato il mese soltanto con la select case e quindi mi restituisce il mese che ha scelto. poi gli dico che
int mese = al risultato dell'user che ha scelto ad esempio luglio , quindi avro la mia lisbox1 valorizzata a Luglio. giusto ???
bene,
Per la queri come la cambieresti ???
A me serve che la query mi restituisca le fatture del mese di luglio 2009 ma puo anche capitare che mi restituisca le fatt. del mese di agosto 2008.. attenzione....

AA tu dici di cambiare i paramentri nella query in
"Month(TestaFattura.Data) = " + mese.ToString() + "..."

OK ma la variabile mese come la faccio a valorizzare ?? con (((int mese = al risultato dell'user ))) ???
ok
Ci provo e ti faccio subito sapere....

resto sempre vicino allo schermo... per il vostro enorme ed immenso auto...
http://www.millesity.com




VINCENZO ma secondo te va bene in questo modo ???


Dim Gennaio As Date
Dim Febbraio As Date
Private Sub frmGenFat_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'listbox Mese
ListBox1.Items.Add("Gennaio")
ListBox1.Items.Add("Febbraio")
end sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim mese As Integer
mese = ListBox1.SelectedIndex + 1

Select Case ListBox1.SelectedIndex
Case 0
Gennaio = "31-01"
TextBox1.Text = Gennaio
Case 1
Febbraio = "28-02"
TextBox1.Text = Febbraio
End case
end sub

ivanuccio Profilo | Junior Member

Caro Vincenzo volevo farti sapere che quando lancio il debug la select mi restituisce soltanto i numeri da 0 ad 11 mentre a me serve laq data ,, come posso fare ??? mi illumineresti cortesemente.
Grazie mille

Dim Gennaio As Date
Dim Febbraio As Date
Private Sub frmGenFat_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'listbox Mese
ListBox1.Items.Add("Gennaio")
ListBox1.Items.Add("Febbraio")
end sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim mese As Integer
mese = ListBox1.SelectedIndex + 1

Select Case ListBox1.SelectedIndex
Case 0
Gennaio = "31-01"
TextBox1.Text = Gennaio
Case 1
Febbraio = "28-02"
TextBox1.Text = Febbraio
End case
end sub

resto sempre vicino allo schermo... per il vostro enorme ed immenso auto...
http://www.millesity.com

alexmed Profilo | Guru

Prova così:


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Ciao


alexmed

ysdemarc Profilo | Expert

secondo me sei fuori strada.. non hai bisogno di alcuna select case...

guarda io farei una cosa così

una classe mese del tipo la seguente

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


e nel form inserisco i controlli listbox e button e scrivo la cosa seguente:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

il codice l'ho scritto in c# e tradotto con un sito internet..credo però che non ci dovrebbero essere errori..

provalo e mi sai dire.

ciao


Vincenzo
Programmatore sbilenco

ivanuccio Profilo | Junior Member

Caro Vincenzo volevo complimentarmi con te e con il tuo colega per la vostra bravura, probabilmente io no sarei mai riuscito ad arrivare ad una soluzione come quella preposta, (Sono un sistemista e non un programmatore , CCNP e MCSA) li posso sbizzarrirmi anche io, quini se posso esservi utile in futuro per contraccambiare alle vostre consulenze sarei davvero lieto.
In sintesi sono due soluzioni valide complimenti...
vi faccio sapere presto quale userò..

ysdemarc Profilo | Expert

grazie del complimento..siamo qui tutti per consigliarci a vicenda...

se avrò bisogno di qualcosa certamente posterò..

ciao
Vincenzo
Programmatore sbilenco

ivanuccio Profilo | Junior Member

CMQ visto e considerato che mi sono trovato in questo ambiente per lavoro, sapresti indicarmi libri link o altro genere di informazioni dove reperire piu informazioni da studiare e diventare bravo come te ???
Grazie anticipatamente.

ysdemarc Profilo | Expert

bravo?.. non sfottiamo...

al momento non mi viene in mente un granchè..

un buon libro che posseggo è programmare Visual Basic .Net (v. 2003) di Francesco Balena edizione mondadori..

cmq..in rete dovresti trovare qualcosina se ti interessa e te la spassi con le lingue straniere ho la versione in digitale in inglese..

in caso scrivimi in e mi dai la tua email che te lo invio

ciao
Vincenzo
Programmatore sbilenco

ivanuccio Profilo | Junior Member

Caro Vincenzo
Cerco di applicare il tuo codice al mio progetto ma incontro il seguente problema. Io ho creato una connessione al DB in questo modo

Module FunzioneGenerazioneFattura
Public Sub GenerazioneFattureFineMese()
Dim GenfatConn As SqlConnection = New SqlConnection("Data Source=ruotolo\sqlexpress;Initial Catalog=StacxSQL;Persist Security Info=True;User ID=sa;Password=xxxxxxx")
'Dim GenfatCommand As SqlCommand = New SqlCommand("SELECT ClientiFattura.*, TestaFattura.NrFattura, TestaFattura.Data, TestaFattura.Pagamento, TestaFattura.Banca, TestaFattura.Agenzia,TestaFattura.CodCliente, TestaFattura.Piva AS Expr1, TestaFattura.TotaleNolo, TestaFattura.TotaleDirittoFisso, TestaFattura.TotaleDirittoAssegno,TestaFattura.TotaleDirittoAssicurazione, TestaFattura.TotaleVarie, TestaFattura.TotaleImponibile, TestaFattura.Iva, TestaFattura.TotaleImposta,TestaFattura.TotaleNonImponibile, TestaFattura.TotaleParziale, TestaFattura.TotaleAnticipate, TestaFattura.TotaleBollo, TestaFattura.SpeseIncasso,TestaFattura.TotaleFattura, TestaFattura.TotaleLire, TestaFattura.Cliente AS Expr2, TestaFattura.Cliente2, TestaFattura.Indirizzo AS Expr3,TestaFattura.Cap AS Expr4, TestaFattura.Localita AS Expr5, TestaFattura.Provincia, TestaFattura.Indirizzo2, TestaFattura.Cap2, TestaFattura.Localita2, TestaFattura.Pv2, TestaFattura.[ca-codes], TestaFattura.[ca-deses__1], TestaFattura.[ff-altre__7], TestaFattura.[ff-altre__20],TestaFattura.[ff-altre__21]FROM TestaFattura INNER JOIN ClientiFattura ON TestaFattura.CodCliente = ClientiFattura.Cliente INNER JOIN Claus ON ClientiFattura.Cliente = Claus.[ca-cd] WHERE(Claus.[ca-listi] = N'1') AND (TestaFattura.Data = CONVERT(DATETIME, '2009-05-31 00:00:00', 102))AND (TestaFattura.TotaleFattura > 50.00000) ORDER BY TestaFattura.Data", GenfatConn)
Dim GenfatCommand As SqlCommand = New SqlCommand("SELECT ClientiFattura.*, TestaFattura.NrFattura, TestaFattura.Data, TestaFattura.Pagamento, TestaFattura.Banca, TestaFattura.Agenzia,TestaFattura.CodCliente, TestaFattura.Piva AS Expr1, TestaFattura.TotaleNolo, TestaFattura.TotaleDirittoFisso, TestaFattura.TotaleDirittoAssegno,TestaFattura.TotaleDirittoAssicurazione, TestaFattura.TotaleVarie, TestaFattura.TotaleImponibile, TestaFattura.Iva, TestaFattura.TotaleImposta,TestaFattura.TotaleNonImponibile, TestaFattura.TotaleParziale, TestaFattura.TotaleAnticipate, TestaFattura.TotaleBollo, TestaFattura.SpeseIncasso,TestaFattura.TotaleFattura, TestaFattura.TotaleLire, TestaFattura.Cliente AS Expr2, TestaFattura.Cliente2, TestaFattura.Indirizzo AS Expr3,TestaFattura.Cap AS Expr4, TestaFattura.Localita AS Expr5, TestaFattura.Provincia, TestaFattura.Indirizzo2, TestaFattura.Cap2, TestaFattura.Localita2, TestaFattura.Pv2, TestaFattura.[ca-codes], TestaFattura.[ca-deses__1], TestaFattura.[ff-altre__7], TestaFattura.[ff-altre__20],TestaFattura.[ff-altre__21]FROM TestaFattura INNER JOIN ClientiFattura ON TestaFattura.CodCliente = ClientiFattura.Cliente INNER JOIN Claus ON ClientiFattura.Cliente = Claus.[ca-cd]" & " WHERE(Claus.[ca-listi] = N'1')" & " AND MONTH(TestaFattura.Data) = {0}" & " AND YEAR(TestaFattura.Data) = {1}" & " AND (TestaFattura.TotaleFattura > 50.00000)" & " AND ORDER BY TestaFattura.Data", GenfatConn)
Dim TabDataAda As SqlDataAdapter = New SqlDataAdapter
' Dim IndEmail As String
Dim NrFat As Integer
Dim DataFat As Date
Dim Den As String
Dim Anno As String
Dim Sotto As String
Dim Percorso As String
Dim TabDataset As DataSet = New DataSet
Dim Mese As String
Dim FilePDF As String

GenfatCommand.CommandTimeout = 30
TabDataAda.SelectCommand = GenfatCommand
GenfatConn.Open()
TabDataAda.Fill(TabDataset, "tabinfatfm")

For Each row As DataRow In TabDataset.Tables.Item("tabinfatfm").Rows
'IndEmail = row.Item("mail").ToString()
NrFat = row.Item("NrFattura")
DataFat = row.Item("Data")
Den = row.Item("Denominazione")
'MsgBox(IndEmail & NrFat & DataFat & den)

E come vedi se applico la tua variabile sql mi da errore dicendo che non puo convertire la variabile in string visto che la mia connessione e fatta con sqlcommand.

Come posso fare ???'

ysdemarc Profilo | Expert

forse se scrivessi in questo modo andrebbe meglio
Dim sql as String = "SELECT ClientiFattura.*, TestaFattura.NrFattura, TestaFattura.Data, TestaFattura.Pagamento, TestaFattura.Banca, TestaFattura.Agenzia,TestaFattura.CodCliente, TestaFattura.Piva AS Expr1, TestaFattura.TotaleNolo, TestaFattura.TotaleDirittoFisso, TestaFattura.TotaleDirittoAssegno,TestaFattura.TotaleDirittoAssicurazione, TestaFattura.TotaleVarie, TestaFattura.TotaleImponibile, TestaFattura.Iva, TestaFattura.TotaleImposta,TestaFattura.TotaleNonImponibile, TestaFattura.TotaleParziale, TestaFattura.TotaleAnticipate, TestaFattura.TotaleBollo, TestaFattura.SpeseIncasso,TestaFattura.TotaleFattura, TestaFattura.TotaleLire, TestaFattura.Cliente AS Expr2, TestaFattura.Cliente2, TestaFattura.Indirizzo AS Expr3,TestaFattura.Cap AS Expr4, TestaFattura.Localita AS Expr5, TestaFattura.Provincia, TestaFattura.Indirizzo2, TestaFattura.Cap2, TestaFattura.Localita2, TestaFattura.Pv2, TestaFattura.[ca-codes], TestaFattura.[ca-deses__1], TestaFattura.[ff-altre__7], TestaFattura.[ff-altre__20],TestaFattura.[ff-altre__21]FROM TestaFattura INNER JOIN ClientiFattura ON TestaFattura.CodCliente = ClientiFattura.Cliente INNER JOIN Claus ON ClientiFattura.Cliente = Claus.[ca-cd]" & " WHERE(Claus.[ca-listi] = N'1')" & " AND MONTH(TestaFattura.Data) = {0}" & " AND YEAR(TestaFattura.Data) = {1}" & " AND (TestaFattura.TotaleFattura > 50.00000)" & " AND ORDER BY TestaFattura.Data"


sql = String.Format(sql, mese, anno) ' dove mese e anno le prendi dalla tua listbox.. infatti mi pare di non vedere alcun riferimento al periodo scelto

Dim GenfatCommand As SqlCommand = New SqlCommand(sql, GenfatConn)
Vincenzo
Programmatore sbilenco

ivanuccio Profilo | Junior Member

Caro Vincenzo
Sono riuscito finalmente ad applicare la tua classe e d il resto del codice soltanto dopo aver fatto qualche piccola modifica alla query, il codice funziona tranne che il db sql si aspetta di ricevere dalla query un formato data simile a questo " 2009-01-13 00:00:00" nella mia query avevo un filtro del genere
"(TestaFattura.Data = CONVERT(DATETIME, '2009-05-31 00:00:00', 102))" mentre quella che ho modificato con il tuo codice e del resto funziona e :
"(TestaFattura.Data) = " & m.NumMese & " AND YEAR(TestaFattura.Data) = " & m.Anno & " quando vado ad eseguire il programma va in errore perchè la variabile m.NumMese viene valorizzato con un numero da 1 a 12 mentre dovrebbe avere il formato 2009-05-31..

Caro sbilengo, come posso fare a risolvere il problema ???
Solo tu puoi aiutarmi....
Grazie mille
http://www.millesity.com

alexmed Profilo | Guru

Ciao
mi permetto di risponderti

>perchè la variabile m.NumMese viene valorizzato con un numero
>da 1 a 12 mentre dovrebbe avere il formato 2009-05-31..

infatti ti manca un pezzettino nella query
da:
"(TestaFattura.Data) = " & m.NumMese & " AND YEAR(TestaFattura.Data) = " & m.Anno & "
a:
"MONTH(TestaFattura.Data) = " & m.NumMese & " AND YEAR(TestaFattura.Data) = " & m.Anno & "
alexmed

ivanuccio Profilo | Junior Member

Ciao Alex,
lo so che manca quel pezzetto infatti e riportato nel post precedente, dove e riportata tutta la query, il punto e come convertire quei parametri restituiti dalla variabile in questo formato. 31/07/2009 visto che le variabili anno e mese vengono rispettivamente valorizzate a mese = 7 anno = 2009 ??

Grazie mille

http://www.millesity.com

ysdemarc Profilo | Expert

infatti... cmq..credo che era giusto nella query che avevo scritto sopra..

ciaoo
Vincenzo
Programmatore sbilenco

ivanuccio Profilo | Junior Member

Scusami Enzo non ho capito quello che volevi dire ???

P.S. hai rivevuto la mia email ???
cmq e
Questo per il testo ..
Grazie

ysdemarc Profilo | Expert

scusami tu ma non ho capito un granchè di quello che chiedi..pensavo ti servissero tutte le fatture del mese.. se ti sevono del 31 puoi sempre scrivere

... TestaFattura.Data = '31/" & m.mese & "/" & m.anno & "' ....

cioè racchidere la data tra apici singoli nel formato giorno / mese /anno.. sql si occupera da solo di fare la convert

..ps..il manuale te lo sto inviando..ti conviene cancellare l'email dal post..altrimenti programmini di spam non ti lasceranno in pace
Vincenzo
Programmatore sbilenco

ivanuccio Profilo | Junior Member

Grazie mille per il manuale,,,,

Ho cercato di fare delle modifiche strutturali sulla query in sql per adattarla al nostro codice anzi al tuo codice, ma mi sono trovato in difficoltà in quanto la query deve per forza avere una variabile valorizzata in questo fomato, (31/6/09) in quanto se inserisco il giorno 31 sempre fisso non mi restituisce le fatture del mese che finisce con 30.

Quindi dopo un giorno di lavoro per applicare il codice mi trovo ora a sconguassare il tutto.....

Cari colleghi come posso fare ????


ysdemarc Profilo | Expert

Io non riesco a capirte il motivo per il quale MONTH(TestaFattura.Data) = tuomese non ti vada bene nella query visto che a quando ho capito vuoi tutte le fatture di tuomese.

se invece le vuoi per determinati giorni allora potreti fare così..implementare la classe mese magari in questo modo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

e nella query togli

MONTH(TestaFattura.Data) =... AND YEAR(TestaFattura.Data) = ...

e metti semplicemente se ti interessa un dato giorno che avrai valorizzato correttamente nella classe mese
(supponendo che m sia un oggetto di tipo Mese valorizzato bene)
..... TestaFattura.Data = '" & m.Data.ToString("dd/MM/yyyy") + "'" --> sempre tra apici singoli

se ti interessa invece le fatture del primo del mese:

..... TestaFattura.Data = '" & m.DataInizioPeriodo.ToString("dd/MM/yyyy") + "'"

se ti interessano quelle della fine del mese:

..... TestaFattura.Data = '" & m.DataInizioFine.ToString("dd/MM/yyyy") + "'"

se ti interessano tutte quelle del mese:

..... TestaFattura.Data BETWEEN '" & m.DataInizioPeriodo.ToString("dd/MM/yyyy") + "' AND '" + m.DataInizioFine.ToString("dd/MM/yyyy") + "'"


(adesso ho scritto un pò in c# che ho più dimestichezza..quello in vb.net te l'ho fatto con un "traduttore")


resto però del parere che tutto diventa più prolisso e la soluzione migliore resta scrivere

... MONTH(TestaFattura.Data) = " & m.NumMese.ToString() & " AND YEAR(TestaFattura.Data) = " & m.Anno.ToString() ....

per avere tutte le fatture del mese.. poi vedi tu..

ciao


Vincenzo
Programmatore sbilenco

ivanuccio Profilo | Junior Member

Caro giusto per spiegarmi meglio,
Le fatture vengono generate soltanto a fine mese , ma i mesi variano a volte sono di 31 giorni ed altre volte sono di 30,
Ora se io scrivo 31 oppure 30 come una costante ed arrivo il mese in cui non corrisponde il giorno la query non mi restituisce il valore che mi aspetto., quindi se fatturo il mese di febbraio la query non trova nulla nel db perche si aspetta di trovare dei dati con data 29/02/2009 ma in questo formato 2009/02/31

Spero di esseremi spiegato....

Scusami a ma a volte mi spiego come un libro stracciato...

ysdemarc Profilo | Expert

sono io che ti fatture non ne so molto.. ma se leggi il post precedente hai la soluzione..in pratica la classe impostato mese ed anno ti restituisce anche un DateTime con la data di fine mese..
Vincenzo
Programmatore sbilenco

ivanuccio Profilo | Junior Member

Ho notato che hai implementato anche i giorni di febb. e se sono di tipo 30 e 31

Sei un mito..

ivanuccio Profilo | Junior Member

Grande Vincenzo Sbilnego.

Sei un Mito.. Funziona tutto perfettamente ora...
Non so come ringraziarti......


qualunque cosa fammi sapere.



Millesity
http://www.millesity.com

ysdemarc Profilo | Expert

facciamo una piccola offerta di 1.000.000 di euro..così smetto di lavorare e mi godo un pò la vita

ciao
Vincenzo
Programmatore sbilenco

alexmed Profilo | Guru

Ciao
Volevo solo suggerirvi una modifica anche se non cambia il risultato, si tratta solo di sfruttare eventi già presenti in VB.
Questa la modifica:

da così:
Public Function DataFinePeriodo() As DateTime Dim gg As Integer If m_numMese = 4 OrElse m_numMese = 6 OrElse m_numMese = 9 OrElse m_numMese = 11 Then gg = 30 ElseIf m_numMese = 2 Then If DateTime.IsLeapYear(m_anno) Then gg = 29 Else gg = 28 End If Else gg = 31 End If
a così:


Public Function DataFinePeriodo() As DateTime Dim gg As Integer gg = DateTime.DaysInMonth(m_anno, m_numMese) Return New DateTime(m_anno, m_numMese, gg) End Function

Ciao

alexmed

ivanuccio Profilo | Junior Member

Caro Vincenzo ho cantato vittoria troppo presto, e stato un caso che ho selezionato febb. ed ha funzionato, mentre gli altri mesi non funge....

va in errore nella classe alla variabile m_giorno..
Come mai non riesco a capire...
Premetto che stò utilizzando (TestaFattura.Data = '" & m.Data.ToString("dd/MM/yyyy") + "'")
mi dai l'ultima spintarella..
grazie

ivanuccio Profilo | Junior Member

Va in errore qui

Public Function Data() As DateTime
Return New DateTime(m_anno, m_numMese, m_giorno)
End Function

non riesco a valorizzare il giorno...

ivanuccio Profilo | Junior Member

Cari Colleghi volevo dirvi che dopo immani sforzi psicopippegenioide sembra che ora stia fungendo.

Ho risolto in questo modo (TestaFattura.Data = '" & m.DataFinePeriodo.ToString("dd/MM/yyyy") + "'")

Un ringraziamento generale..... in specialmodo al programmatore sbilenco.

http://www.millesity.com

ysdemarc Profilo | Expert

ciao..ho visto i messaggi ora..cmq nei messaggi precedenti c'era già tutto..

ciao
Vincenzo
Programmatore sbilenco

ivanuccio Profilo | Junior Member

Caro Vincenzo ,
Spero tu sia tornato delle vacanze perche ho un piccolo problema sulla classe che mi ha creato il mese scorso...
Mi spiego meglio. Come posso recuperare la data selezionata dalla list box per confrontarla con una data esidente in una tabella del DB ???
Spero proprio che tu possa aiutarmi.
Grazie...

ysdemarc Profilo | Expert

ma quali ferie? quest'anno mi è toccato rimanere in ufficio..forse a fine settembre riuscirò a prendere una settimana.

veniamo al dunque.. come al solito sono "de coccio" e non capisco il problema.. nei post precedenti non c'è il modo?..

cmq..scrivimi quello hce vuoi fare un pò meglio.. ti interessa avere una data completa?

magari quello che hai nella listbox e qualche campo data della tua tabella...
Vincenzo
Programmatore sbilenco

AntCiar Profilo | Expert

Non ho letto tutti i post. se ho capito bene hai solo un elenco di mesi e devi reperire a db tutti i record di una determinata tabella che hanno come data valori compresi tra il primo giorno e l'ultimo di quel mese.

Se è così puoi fare in questo modo:

carica nel tuo contenitore 12 oggetti aventi come tag i numeri da 1 a 12. Come testo puoi usare la funzione 'CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(i)' dove 'i' è il numero del mese usato prima nel tag. questa funzione restituisce il nome del mese a seconda delle impostazioni che hai della lingua.

Passo due:

una volta selezionato l'elemento dal contenitore e quindi il suo equivalente numero (vedi il tag selezionato) puoi ottenere semplicemente il tuo intervallo di tempo:

DateTime DataInizio, DataFine;

DataInizio = new DateTime(anno, i, 1); //Ottineni una data al primo giorno del mese in questione
DataFine = DataInizio.AddMonths(1).AddDays(-1); //ottieni una data all'ultimo giorno del mese in questione

ora basta che nella tua select metti : "where DataFattura >= " + DataInizio + " AND DataFattura <= " + DataFine

Nota 'DataInizio' e 'DataFine' devono avere formattazioni particolari a seconda se il db è Acces o altro.

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