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
Problema su formattazione della data
giovedì 21 maggio 2009 - 14.35
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
gabriel81
Profilo
| Junior Member
194
messaggi | Data Invio:
gio 21 mag 2009 - 14:35
Buongiorno a tutti. Sto realizzando un applicazione per la memorizzazione di schede di riparazione.
Il db è access l'applicazione vb.net.
per la memorizzazione di una scheda esiste una query di INSERT con dei parametri
INSERT INTO Riparazioni ( campo1,campo2, campo3...)
SELECT [PARAM1] AS Espr1, [PARAM2] AS Espr2, [PARAM3] AS Espr3, .....;
che aziono tramite oledbcommand e oledbparameters.
Funziona benone tranne quando non inserisco una data.
Ho perfino provato a creare un campotesto personalizzato:
Public Class CampoTestoMascherato
Inherits MaskedTextBox
Public ReadOnly Property ValoreData()
Get
Dim _val As Date
If Me.Text = " / /" Then
_val = Convert.ToDateTime("")
Else
_val = Convert.ToDateTime(Me.Text)
End If
Return _val
End Get
End Property
End Class
ma mi dice che non riesce a convertire la stringa in data...
se gli passo nothing dice che non è stato immesso un valore per il parametro
La mia domanda è questa: cosa caspita gli devo passare per dirgli che non c'è data???? (su access se lascio il campo vuoto non fà nessuna storia)
vi prego aiutatemi.... grazie
http://www.myspace.com/madmack1981
luxsor
Profilo
| Guru
1.079
messaggi | Data Invio:
gio 21 mag 2009 - 17:15
Ciao Gabriel,
in Access il campo data deve essere racchiuso tramite gli #:
Formato compatibile: #21/05/2009#
quindi per funzionare dovresti fare una cosa del genere:
CampoData = (#" & format(cdate(Date),"dd/mm/yyyy") & "#)
>La mia domanda è questa: cosa caspita gli devo passare per dirgli
>che non c'è data???? (su access se lascio il campo vuoto non
>fà nessuna storia)
Se vuoi specificare un campo vuoto, basto lo metti in NULL
Fammi sapere
------------------------
Luxsor
gabriel81
Profilo
| Junior Member
194
messaggi | Data Invio:
gio 21 mag 2009 - 17:25
se gli metto la data nel campo funziona, non funziona solo se il campo è vuoto...
ho provato a mettere valore "nothing" ma non va bene... NULL è diverso da nothing? come faccio?
http://www.myspace.com/madmack1981
luxsor
Profilo
| Guru
1.079
messaggi | Data Invio:
gio 21 mag 2009 - 17:26
Basta scrivi assegni alla variabile il testo NULL
Variabile="NULL"
------------------------
Luxsor
gabriel81
Profilo
| Junior Member
194
messaggi | Data Invio:
gio 21 mag 2009 - 17:32
no... mi dice tipi di dati non corrispondenti nell'espressione criterio....
http://www.myspace.com/madmack1981
luxsor
Profilo
| Guru
1.079
messaggi | Data Invio:
gio 21 mag 2009 - 17:35
Prova così:
NomeVariabile=ISNULL("Valore da assegnare")
Se non dovesse funzionare neache così, allora posta il codice che lo controllo
------------------------
Luxsor
Jeremy
Profilo
| Guru
1.527
messaggi | Data Invio:
gio 21 mag 2009 - 17:37
Ciao Gabriel.
Prova ad usare il metodo Date.TryParse
Facci sapere...
Ciao
gabriel81
Profilo
| Junior Member
194
messaggi | Data Invio:
gio 21 mag 2009 - 17:43
i seguenti danno false
Dim _date As New Date
MsgBox(Date.TryParse("0", _date))
anche se al posto di 0 mettiamo NULL ISNULL #NULL# #ISNULL#
... vi posto il codice.. grazie ragazzi
http://www.myspace.com/madmack1981
gabriel81
Profilo
| Junior Member
194
messaggi | Data Invio:
gio 21 mag 2009 - 17:45
Questo è il codice che esegue crea il comando da eseguire (i commenti sono prove precedenti) :
Private Sub SalvaNuovaScheda()
Dim _cmd As New OleDbCommand()
Dim _prm1 As New OleDbParameter()
Dim _prm2 As New OleDbParameter()
Dim _prm3 As New OleDbParameter()
Dim _prm4 As New OleDbParameter()
Dim _prm5 As New OleDbParameter()
Dim _prm6 As New OleDbParameter()
Dim _prm7 As New OleDbParameter()
Dim _prm8 As New OleDbParameter()
Dim _prm9 As New OleDbParameter()
Dim _prm10 As New OleDbParameter()
Dim _prm11 As New OleDbParameter()
Dim _prm12 As New OleDbParameter()
Dim _prm13 As New OleDbParameter()
Dim _prm14 As New OleDbParameter()
Dim _Dif As New InterfacciaDatabase
_cmd.CommandType = CommandType.StoredProcedure
_cmd.CommandText = "SYS_NuovaScheda"
_prm1.ParameterName = "CODCLIENTE"
_prm1.Value = Me.TXTCODCLIENTE.Text
_prm2.ParameterName = "CODARTICOLO"
_prm2.Value = Me.TXTCODARTICOLO.Text
_prm3.ParameterName = "Matricola"
_prm3.Value = Me.TXTMatricola.Text
_prm4.ParameterName = "DataBollaCliente"
_prm4.Value = Me.TXTDataBollaCliente.Text
_prm5.ParameterName = "N_BollaCliente"
_prm5.Value = Me.TXTN_BollaCliente.Text
_prm6.ParameterName = "DataRicezione"
_prm6.Value = Me.TXTDataRicezione.Text
_prm7.ParameterName = "Garanzia"
_prm7.Value = Me.Garanzia.Checked
_prm8.ParameterName = "CODFORNITORE"
_prm8.Value = Me.TXTCODFORNITORE.Text
_prm9.ParameterName = "CODASSISTENZA"
_prm9.Value = Me.TXTCODASSISTENZA.Text
_prm10.ParameterName = "DataInvio"
_prm10.DbType = OleDbType.Empty
'_prm10.Value = "NULL"
'_prm10.Value = Me.TXTDataBollaInvio.ValoreData
_prm11.ParameterName = "DataRitorno"
_prm11.DbType = OleDbType.Empty
'_prm11.Value = "NULL"
'_prm11.Value = Me.TXTDataBollaRitorno.ValoreData
_prm12.ParameterName = "N_BollaInvio"
_prm12.Value = Me.TXTN_BollaInvio.Text
_prm13.ParameterName = "N_BollaRitorno"
_prm13.Value = Me.TXTN_BollaRitorno.Text
_prm14.ParameterName = "DurataGaranzia"
If Me.TXTDurataGaranzia.Text = Nothing Then
_prm14.Value = 0
Else
_prm14.Value = Me.TXTDurataGaranzia.Text
End If
_cmd.Parameters.Add(_prm1)
_cmd.Parameters.Add(_prm2)
_cmd.Parameters.Add(_prm3)
_cmd.Parameters.Add(_prm4)
_cmd.Parameters.Add(_prm5)
_cmd.Parameters.Add(_prm6)
_cmd.Parameters.Add(_prm7)
_cmd.Parameters.Add(_prm8)
_cmd.Parameters.Add(_prm9)
_cmd.Parameters.Add(_prm10)
_cmd.Parameters.Add(_prm11)
_cmd.Parameters.Add(_prm12)
_cmd.Parameters.Add(_prm13)
_cmd.Parameters.Add(_prm14)
_Dif.eseguiQuery(_cmd)
End Sub
http://www.myspace.com/madmack1981
gabriel81
Profilo
| Junior Member
194
messaggi | Data Invio:
gio 21 mag 2009 - 17:46
Questa è la query:
INSERT INTO Riparazioni ( CODCLIENTE, CODARTICOLO, Matricola, DataBollaCliente, N_BollaCliente, DataRicezione, Garanzia, CODFORNITORE, CODASSISTENZA, DataInvio, DataRitorno, N_BollaInvio, N_BollaRitorno, DurataGaranzia )
SELECT [CODCLIENTE] AS Espr1, [CODARTICOLO] AS Espr2, [Matricola] AS Espr3, [DataBollaCliente] AS Espr4, [N_BollaCliente] AS Espr5, [DataRicezione] AS Espr6, [Garanzia] AS Espr7, [CODFORNITORE] AS Espr8, [CODASSISTENZA] AS Espr9, [DataInvio] AS Espr10, [DataRitorno] AS Espr11, [N_BollaInvio] AS Espr12, [N_BollaRitorno] AS Espr13, [DurataGaranzia] AS Espr14;
http://www.myspace.com/madmack1981
luxsor
Profilo
| Guru
1.079
messaggi | Data Invio:
gio 21 mag 2009 - 17:50
Scusami, ma nella struttura del DB hai impostato che questi campi accettano valori Nulli?
------------------------
Luxsor
gabriel81
Profilo
| Junior Member
194
messaggi | Data Invio:
gio 21 mag 2009 - 17:56
Access mi permette di impostare solo "Richiesto" dove ho messo ovviamente No.....
(Le classi che ho fatto per SQL Server, hanno la stessa struttura... e vanno che è una meraviglia...)
gabriel81
Profilo
| Junior Member
194
messaggi | Data Invio:
gio 21 mag 2009 - 17:59
un altra cosa se lancio la query da access, mi compaiono i vari prompt per l'inserimento del parametro, quando è il momento della data lascio vuoto, è il record lo inserisce....
http://www.myspace.com/madmack1981
luxsor
Profilo
| Guru
1.079
messaggi | Data Invio:
gio 21 mag 2009 - 18:00
Purtroppo sul PC che sto utilizzando, non c'è Access.
Se puoi allegarmi un esempio completo con DB e codice.
------------------------
Luxsor
gabriel81
Profilo
| Junior Member
194
messaggi | Data Invio:
gio 21 mag 2009 - 18:12
la vedo dura... il db di access è collegato ad AS400... vedo un po'
comunque è vero che a prima vista sembra tutto a posto?
a me non sembra di aver fatto degli errori esorbitanti...
ora vado a casa, ci medito e domani vi faccio sapere... grazie tante!
http://www.myspace.com/madmack1981
luxsor
Profilo
| Guru
1.079
messaggi | Data Invio:
gio 21 mag 2009 - 18:14
Basta anche un db con qualche campo.
------------------------
Luxsor
gabriel81
Profilo
| Junior Member
194
messaggi | Data Invio:
ven 22 mag 2009 - 08:46
1038_db.zip
Ecco il db.
ci sono tutte le tabelle, la query incriminata, e ho replicato anche tutte le relazioni
grazie infinite ragazzi
http://www.myspace.com/madmack1981
luxsor
Profilo
| Guru
1.079
messaggi | Data Invio:
ven 22 mag 2009 - 10:44
Allora, eseguiendo la query da access accetta il valore Null nel campo. Quindi utilizzando una query in formato stringa funziona.
Per far accettare il paramentro NULL alla classe Parameter devi settare la proprietà IsNullable a True
Es.
_prm11.ParameterName = "DataRitorno"
_prm11.IsNullable = True
'_prm11.Value = Me.TXTDataBollaRitorno.ValoreData
In questo case se la textbox databollaritorno restituisce un valore vuoto, tale funzione te lo setta a NULL
------------------------
Luxsor
gabriel81
Profilo
| Junior Member
194
messaggi | Data Invio:
ven 22 mag 2009 - 11:00
ma a te funziona?
a me no...
comunque sai cosa ho pensato? io mi scrivo una funzione che converte
campo vuoto -> 01/01/1900 in scrittura
01/01/1900 0.00.00 -> "" in lettura
aggiro il problema, tanto non è un programma che dovranno usare nelle multinazionali... anche se mi scoccia usare questi accrocchi...
Tuttavia mi consolo perchè credo che facendo così (eliminando valori NULL sulla colonna data) dovrei migliorare le performance in ricerca
se poi a te funziona è un altro discorso... vediamo di farlo funzionare anche a me..
http://www.myspace.com/madmack1981
luxsor
Profilo
| Guru
1.079
messaggi | Data Invio:
ven 22 mag 2009 - 15:36
Si a me funziona, ma dipende dal codice, non vorrei che tu non usi correttamente la classe parameter.
Allega un esempio con il codice che utilizzi così controllo.
------------------------
Luxsor
gabriel81
Profilo
| Junior Member
194
messaggi | Data Invio:
ven 22 mag 2009 - 16:31
il codice l'ho già postato... cosa ti manca?
l'unica cosa che non hai è la classe di interfacciamento col db:
Public Class InterfacciaDatabase
Public StringaConnessione As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=./assistenza.mdb;"
Public Connessione As New OleDbConnection(StringaConnessione)
Public Function getDT(ByVal Comando As OleDbCommand)
Cursor.Current = Cursors.WaitCursor
Dim _dt As New DataTable()
Connessione.Open()
Try
Comando.Connection = Connessione
Dim _adapter As OleDbDataAdapter = New OleDbDataAdapter(Comando)
_adapter.Fill(_dt)
Catch ex As OleDbException
MsgBox(ex.Message)
End Try
Connessione.Close()
Cursor.Current = Cursors.Default
Return _dt
End Function
Public Sub eseguiQuery(ByVal Comando As OleDbCommand)
Cursor.Current = Cursors.WaitCursor
Connessione.Open()
Try
Comando.Connection = Connessione
Comando.ExecuteNonQuery()
Catch ex As OleDbException
MsgBox(ex.Message & ex.ErrorCode)
End Try
Connessione.Close()
Cursor.Current = Cursors.WaitCursor
End Sub
End Class
http://www.myspace.com/madmack1981
luxsor
Profilo
| Guru
1.079
messaggi | Data Invio:
sab 23 mag 2009 - 00:18
Non sto riuscendo a capire il codice:
>_Dif.eseguiQuery(_cmd)
se alla funzione eseguiQuery gli passi la collection di parametri la insert dove la passi?
------------------------
Luxsor
rob88
Profilo
| Junior Member
74
messaggi | Data Invio:
sab 23 mag 2009 - 09:35
Salve a tutti....io ti consiglierei di gestire le date come tipo stringa...
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
sab 23 mag 2009 - 15:20
Ciao
Scusate ma qui:
_prm10.ParameterName = "DataInvio"
_prm10.DbType = OleDbType.Empty
'_prm10.Value = "NULL"
'_prm10.Value = Me.TXTDataBollaInvio.ValoreData
Quando specifichi il tipo di dato, non dovrebbe essere di tipo Date (_prm10.DbType = OleDbType.Date)?
Dopodichè non potresti sostituire le varie TextBox ("Me.TXTDataBollaInvio") con dei DateTimePicker?
Ciao
alexmed
gabriel81
Profilo
| Junior Member
194
messaggi | Data Invio:
mar 26 mag 2009 - 15:45
Scusa il ritardo!!!
quel codice è una routine che accetta un vuole oledbcommand del quale esegue il metodo executenonquery() (la classe te l'ho postata..)
la parte insert la prende dal oledbcommand.commandtext="nome_Query_access" e con oledbcommandtype = storedprocedure
http://www.myspace.com/madmack1981
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
ven 12 giu 2009 - 11:07
Ciao.
Per precisare il formato delle date in access è '#mm/dd/yyyy#'.
Per quanto riguarda il tuo problema, se nella tabella il campo data accetta valori nulli, allora passa "NULL" come valore. Nel caso in cui non accetta valori nulli, puoi passargli il valore DateTime.MinValue (01/01/0001). Se usi questa seconda opzione devi poi fare in modo che quando leggi un valore uguale a DateTime.Minvalue devi considerarlo come se non ci fosse scritto nulla.
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 !