Controllo data con date.tryparse e problema con dropdownlist

mercoledì 10 febbraio 2010 - 22.25

mauri1961 Profilo | Senior Member

In una form vorrei inserire un controllo per la correttezza della data che viene digitata nel campo text-box "dataini" .

<asp:TextBox ID="dataini" runat="server" BackColor="#FFFFCC" Font-Bold="True"
Font-Names="Calibri" Font-Size="Large" style="margin-left: 51px"
MaxLength="10" Width="100px"></asp:TextBox>

Ho creato una sub contenente il controllo date.tryparse, la sub si trova all'interno della sub "esegui" che è preposta alla memorizzazione...

Sub checkdataini()
Dim StrDate As String
Dim D As Date
dataini.Text = StrDate

If Date.TryParse(StrDate, D) Then
Else
Console.WriteLine(StrDate & " la data di presunto inizio non è una data valida!")
End If
End Sub

...tuttavia sia digitando date corrette che errate non mi segnala alcunchè....cosa ho sbagliato?

è possibile inserire in qualche modo il controllo immediatamente dopo la digitazione? e se si in che modo?


Altro problema...da una dropdownlist che dovrebbe farmi vedere una tabella di comuni non viene visualizzato nulla....questo il codice interessato

Sub crea_form()
risultato.Visible = False
gv.Visible = False
form_blocco.Visible = True

operazione.Text = "inserisci"

Dim conn As New SqlConnection("Data Source=PC-MAURIZIO; Initial Catalog=NOTIFICHE;Integrated Security=SSPI")
Dim command1 As New SqlCommand("select loc_comune from localita", conn)
conn.Open()
Dim dr As SqlDataReader = command1.ExecuteReader()
comune.DataSource = dr
comune.DataBind()
dr.Close()
End Sub

<asp:DropDownList ID="comune"
DataValueField="loc_codice"
DataTextField="loc_comune"
runat="server" AppendDataBoundItems="true"
BackColor="#FFFFCC"
Font-Bold="True" Font-Names="Calibri" Font-Size="Large" style="margin-left: 51px"
Width="600px" >
<asp:ListItem Value="0"> - Seleziona - </asp:ListItem>

</asp:DropDownList>

Grazie, Maurizio

paoval72 Profilo | Senior Member

Ciao. da quanto posso vedere, hai assegnato una stringa senza valore alla tua textbox (senza il resto del codice però non posso dire molto di più). E vai poi a fare un confronto con una data.
Sub checkdataini() Dim StrDate As String //Qui StrDate non è valorizzato: vale Nothing Dim D As Date //Qui Date non è valorizzato: vale #12:00:00 AM#, cioè nulla dataini.Text = StrDate //associ alla tua textbox un valore null(cioè quello di StrDate)

Poi, se stai usando un webform, il comando più indicato per la stampa a video è Response.Write(messaggio) .

If Date.TryParse(StrDate, D) Then Else Response.Write(StrDate & " la data di presunto inizio non è una data valida!") End If End Sub

Passiamo alla DDL, sempre basandomi sul codice che hai postato. Da quel che vedo, secondo me, il problema sta nella query:
Dim command1 As New SqlCommand("select loc_comune from localita", conn)
Questa estrae i dati della colonna "loc_comune" della tabella "localita". ma nella DropDownList hai dichiarato due campi dati:
DataValueField="loc_codice" DataTextField="loc_comune"
Quindi, manca la colonna loc_codice, che serve per impostare il value di ogni item. Se cambi la query in "Select loc_comune, loc_codice from localita" e rifai il bind, tutti i dati dovrebbero essere associati secondo le chiavi valore-testo.
Fammi sapere, o posta un po' di codice in più, se non sono le soluzioni giuste.
Ciao!
PV

mauri1961 Profilo | Senior Member

Ti ringrazio per l'aiuto, tuttavia pur inserendo nella select il secondo campo continua a non visualizzare la finestrina con i dati, mentre per quanto riguarda il test sulle date non riesco a capire come fare a valorizzare il campo strdate....tieni presente che il primo form che scrivo...la mia esperienza è totalmente nel mondo cobol evoluto...
Se sei cosi cortese da dare un'occhiata al codice per intero Te lo invio in allegato.

Grazie, Maurizio

paoval72 Profilo | Senior Member

Ciao. pensa che io un paio d'anni fa volevo passare al Cobol! E comunque, solo da 3 anni lavoro in .Net (anche se in C#)
Torniamo a noi:
le select non sono corrette sintatticamente. mancano le virgole a separare le colonne selezionate (sub crea_form e sub :
select loc_codice, loc_comune from localita

anche in questa della sb estrai():
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


Anche le insert vanno corrette con le virgole. Inoltre, mi sembra che ci sia una colonna in più (16) rispetto ai value (15) . La penultima colonna, infatti, è la "not_comune", a cui però non associ valori
Se ho capito bene (anche perchè sei stato bravo a mantenere la corrispondenza tra nome colonna e nome campo), la query dovrebbe essere:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

in questa è inutile il ; (punto e virgola) concatenato alla fine:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

nella sub esegui, sarebbe preferibile inizializzare le variabili, anche se VisualStudio ti dà solo un avvertimento. In teoria, se tutti i tuoi if venissero saltati, le variabili manderebbero in errore l'applicazione perchè non sono inizializzate. basta farlo con 2 righe:
Dim strconn As String Dim strdiv As String Dim strsql As String strsql = "" 'inizializzo la stringa come vuota strdiv = "" 'inizializzo la stringa come vuota
Al massimo, se eseguo la query, non mi restituirà nulla: ma non andrà in errore.

Nel prossimo posto passeremo al controllo date.
A dopo!
PV

mauri1961 Profilo | Senior Member

GRAZIE !!! Aspetto il prossimo post

Maurizio

paoval72 Profilo | Senior Member

Rieccomi. Spero che quanto scritto prima sia chiaro e che funzioni tutto 8o almeno quasi!).
Campo data. Ti suggerirei di usare le Regula Expressions: sono costrutti ad hoc per fare controlli sui tipi (ad esempio: è una data? è un numero intero? è una stringa? etc...) o per fare ricerche complesse (ad esempio: nella mia stringa di 400 caratteri esiste la stringa "bello"?).
prima o poi riuscirò a leggermi il manualetto per capirne bene la sintassi e il costrutto, per ora mi accontento di usare questo sito:

http://www.regexlib.com/DisplayPatterns.aspx?cattabindex=2&categoryId=3

Ci sono già regex bell'e pronte, per quasi tutte le richieste. poi, con un po' di pratica si riesce ad interpretarle un minimo e ad adattarle.
Ma visto che anch'io ho dovuto testare una data, ti presento una soluzione pronta. Modificherei però un po' il codice.
Prima cosa, importo la libreria delle regular expressions nel progetto:
<%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <%@ Import System.Text.RegularExpressions %> <!--questa è la libreria delle regex-->

poi, trasformo la checkdataini da sub in function, visto che controlla e mi restituisce un risultato booleano (true o false): e le passo anche la stringa della data, così mi evito di istanziare oggetti, variabili e simili:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Qui approfondisco:
A) la regex:
1) Se vuoi la data in formato "italiano" (gg/mm/aaaa)
^([0]?[1-9]|[1|2][0-9]|[3][0|1])[.\/-]([0]?[1-9]|[1][0-2])[.\/-]([0-9]{4}|[0-9]{2})$
2) Se vuoi la data in formato anglosassone (mm/gg/aaaa)
^([0]?[1-9]|[1][0-2])[.\/-]([0]?[1-9]|[1|2][0-9]|[3][0|1])[.\/-]([0-9]{4}|[0-9]{2})$
B) mi sono permesso una gestione diversa per visualizzare il messaggio di errore. Con la function visualizzaMessaggio (a cui devo passare la stringa col testo che voglio visualizzare), lancio semplicemente un alert javascript (le tipiche finestrelle di avviso). Mi sembra più carino che schiantare una scritta in testa alla pagina. la nuova funzione non fa altro che registrare uno script javascript nella pagina:
Sub visualizzaMessaggio(ByVal msg As String) Dim scr As String scr = "<script language='javascript'>" scr += "alert('" & msg & "');" scr += "</script>" Page.ClientScript.RegisterStartupScript(scr.GetType(), "salva", scr) End Sub

Ultimo passo, la modifica della chiamata in sub esegui:
Sub esegui(ByVal sender As Object, ByVal e As EventArgs) If (checkdataini(dataini.Text) = False) Then visualizzaMessaggio("la data di presunto inizio non è una data valida!") Exit Sub End If 'da qui il codice è uguale al tuo If Page.IsValid Then Dim strconn As String ...
Con l'Exit Sub non eseguo il resto del codice, ma visualizzo il messaggio di errore se la data non è ben formattata.

Ora vado a pranzo.
Se qualcosa non funziona, posta pure domande o codice: vedrò di fare il possibile, anche se il VB non è proprio il mio linguaggio.
Ciao,
PV

mauri1961 Profilo | Senior Member

Ho effettuato le modifiche sul codice cosi come mi hai cortesemente suggerito.

Tuttavia mi segnala alcuni errori che Ti elenco (in allegato rimetto il codice modificato)

1:Questa istruzione non può trovarsi nel corpo di un metodo. Verrà interpretata come fine del metodo.

si riferisce alla chiusura script che hai inserito nella sub visuamessaggio ( scr += ""</script>") inoltre segnala anche un warning sulla fine script successiva (penso perchè ne trova due consecutivi).

2: il formato del blocco server non è corretto.
si riferisce all'import system.text.regularexpressions, ho provato anche a cambiare la sintassi aggiungendo " o inserendo namespace= ma il risultato non cambia (non sarà che devo scaricare qualche libreria?).

altri due warning sono figli dell'errore qui sopra descritto:
Avviso 2 Convalida (ASP.Net): 'System.Text.RegularExpressions' non è un attributo valido dell'elemento 'Import'.
Avviso 1 Convalida (ASP.Net): questo nome di attributo deve essere seguito da un segno di uguale ( = ) e da un valore. Se il valore è racchiuso tra virgolette, queste devono corrispondere.

Inoltre la dropdown list continua a latitare, sul form mi compare "seleziona" nella finestrina ma cliccando sulla freccetta a destra non appaiono le voci della tabella.

Cmq Ti ringrazio infinitamente e devo dire che guardando un po di codice comincio (anche se a fatica) ad addentrarmi un po' nel modo di sviluppare. Certamente il cobol ha prerogative e definizione molto ma molto differenti.

Aspetto, quando puoi, una Tua risposta.

Saluti, Maurizio.

mauri1961 Profilo | Senior Member

Ho effettuato le modifiche sul codice cosi come mi hai cortesemente suggerito.

Tuttavia mi segnala alcuni errori che Ti elenco (in allegato rimetto il codice modificato)

1:Questa istruzione non può trovarsi nel corpo di un metodo. Verrà interpretata come fine del metodo.

si riferisce alla chiusura script che hai inserito nella sub visuamessaggio ( scr += ""</script>") inoltre segnala anche un warning sulla fine script successiva (penso perchè ne trova due consecutivi).

2: il formato del blocco server non è corretto.
si riferisce all'import system.text.regularexpressions, ho provato anche a cambiare la sintassi aggiungendo " o inserendo namespace= ma il risultato non cambia (non sarà che devo scaricare qualche libreria?).

altri due warning sono figli dell'errore qui sopra descritto:
Avviso 2 Convalida (ASP.Net): 'System.Text.RegularExpressions' non è un attributo valido dell'elemento 'Import'.
Avviso 1 Convalida (ASP.Net): questo nome di attributo deve essere seguito da un segno di uguale ( = ) e da un valore. Se il valore è racchiuso tra virgolette, queste devono corrispondere.

Inoltre la dropdown list continua a latitare, sul form mi compare "seleziona" nella finestrina ma cliccando sulla freccetta a destra non appaiono le voci della tabella.

Cmq Ti ringrazio infinitamente e devo dire che guardando un po di codice comincio (anche se a fatica) ad addentrarmi un po' nel modo di sviluppare. Certamente il cobol ha prerogative e definizione molto ma molto differenti.

Aspetto, quando puoi, una Tua risposta.

Saluti, Maurizio.

mauri1961 Profilo | Senior Member

aggiorno quanto affermato in precedenza ho trovato in un codice che inputando:

%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Text.RegularExpressions" %>

mentre per la sub ho provato a levare la fine script ma in fase di esecuzione dopo che clicco sul button ritorna la pagina e non esegue la sub esegui ma non mostra il message.

peraltro se inserisco una data esatta tenta di memorizzare e cio significa che la function funziona.

Per concludere i problemi la sub esegui viene interrotta dal messaggio

ExecuteNonQuery: la proprietà CommandText non è stata inizializzata

il debug segnala command.ExecuteNonQuery()



Saluti, Maurizio

paoval72 Profilo | Senior Member

Ciao.Purtroppo non vedo il tuo nuovo codice allegato. Perciò, andrò "a naso"!
Ti chiedo scusa per l'importazione della libreria delle regular expressions, avevo dimenticato un passaggio nella fretta: ma vedo che hai risolto brillantemente da solo.
Riguardo alla sub visualizzaMessaggio, coi colleghi abbiamo capito che Visual Studio probabilmente ha un bachetto: perciò, riconosce il carattere "/" sempre, raddoppiando i doppi apici. Per farla breve, abbiamo risolto con un escamotage: il carattere ASCII corrispondente, che per il "/" è il char 47.
Prova così, a me funziona:

Sub visualizzaMessaggio(ByVal msg As String) Dim scr As String scr = "<script language='javascript'>" scr += "alert('" & msg & "');" scr += "<" & Chr(47) & "script>" Page.ClientScript.RegisterStartupScript(scr.GetType(), "salva", scr) End Sub

>Per concludere i problemi la sub esegui viene interrotta dal
>messaggio
>
>ExecuteNonQuery: la proprietà CommandText non è stata inizializzata
>
>il debug segnala command.ExecuteNonQuery()
da quanto vedo nel tuo codice, la scelta di quale query effettuare (coiè il commandText) è guidata dalla textbox con ID="operazione".
tu fai degli if controllando il testo di questa textbox, come ad esempio:
If operazione.Text = "modifica" Then....
Solo che da quanto vedo "operazione" è il campo in cui inserisci una data: perciò non avrà MAI nessun testo ("modifica", "inserisci", "elimina") di quelli che stati testando.
Ti segnalo anche un altro possibile problema che potresti incontrare: la possibile assenza di alcuni valori per alcune colonne. in particolare, nel tuo update hai trattato tutte le colonne con dati di tipo varchar(ovvero, racchiusi tra apici singoli: ad esempio "not_impresa=' " & impresa.Text & " ', "), ma credo che sul DB alcune siano dichiarate numeriche. Meglio sempre controllare che i campi siano valorizzati o, nel caso non lo siano, passare un dato da inserire sul DB: oppure non fare l'aggiornamento per quel campo.
Infine, Visual Studio mi segnala una mal formattazione in html.
<p> </p> &nbsp;<p> </div> <asp:Button ID="Button1" runat="server" BackColor="#FFFF99" Font-Bold="True" Font-Names="Calibri" Font-Size="Medium" ForeColor="#FF3300" style="margin-left: 443px; margin-top: 0px" Text="Conferma Inserimento" Width="210px" OnClick="esegui" /> </div> </p>
Dovresti correggerlo, direi eliminando il <p>, oppure spostando la sua apertura e la sua chiusura completamente dentro o completamente fuori da altri tag:
<p> </p> &nbsp; </div> <asp:Button ID="Button1" runat="server" BackColor="#FFFF99" Font-Bold="True" Font-Names="Calibri" Font-Size="Medium" ForeColor="#FF3300" style="margin-left: 443px; margin-top: 0px" Text="Conferma Inserimento" Width="210px" OnClick="esegui" /> </div> <p> &nbsp;</p>
Prova e fammi sapere.
Ciao,
PV

mauri1961 Profilo | Senior Member

Ti ringrazio moltissimo, oggi ho la giornata strapiena di lavoro ma in serata provo e Ti faccio sapere.

Ancora grazie.

Ciao, Maurizio

p.s. se un giorno avessi bisogno di consulenze sul cobol sono, chiaramente, a disposizione...

mauri1961 Profilo | Senior Member

RingraziandoTi ancora una volta per l’aiuto, Ti aggiorno su quanto accaduto allegandoTi nuovamente il codice sperando che questa volta sia leggibile.

Innanzitutto il controllo sulle date funziona correttamente e l’ho anche sdoppiato per controllare la data fine.
Per quanto riguarda il campo “operazione.text” ho riscontrato che effettivamente causa lo schianto in esecuzione, tuttavia non riesco a capire quale data dovrebbe esserci in questo campo in base a quanto mi segnali.
Ho provato a “forzare” il campo nella sub esegui inserendogli un “ins” ed effettivamente in questo modo l’esecuzione avanza fino a segnalarmi un altro tipo di errore che Ti riporto di seguito e che, in tutti i casi, si rifà senz’altro all’avviso che mi facevi sulla identificazione numerica di alcuni campi.
In effetti nel database il campo “importo” è logicamente numerico ed è l’unico presente tra quelli inseriti nel codice. Ho provveduto prima dell’ultima compilazione a modificare il campo importo segnalandolo come “integer” senza alcun risultato. ("not_importo=' & importo.integer & ', " & _)

Tirando le somme al momento i problemi in ballo sono tre:
Continua a non mostrarmi la finestra dei comuni nella dropdownlist

Sub modifica()
…..
Dim command1 As New SqlCommand("select loc_codice, loc_comune from localita", conn)
conn.Open()
Dim dr As SqlDataReader = command1.ExecuteReader()
comune.DataSource = dr
comune.DataBind()
dr.Close()
Sub crea_form()
risultato.Visible = True
gv.Visible = False
form_blocco.Visible = True

operazione.Text = "ins"

Dim conn As New SqlConnection("Data Source=PC-MAURIZIO; Initial Catalog=NOTIFICHE;Integrated Security=SSPI")
Dim command1 As New SqlCommand("select * from localita", conn)
conn.Open()
Dim dr As SqlDataReader = command1.ExecuteReader()
comune.DataSource = dr
comune.DataBind()
dr.Close()
End Sub….
<asp:DropDownList ID="comune"
DataValueField="loc_codice"
DataTextField="loc_comune"
runat="server" AppendDataBoundItems="true"
BackColor="#FFFFCC"
Font-Bold="True" Font-Names="Calibri" Font-Size="Large" style="margin-left: 51px"
Width="600px" >
<asp:ListItem Value="0"> - Seleziona - </asp:ListItem>

</asp:DropDownList>

Non soddisfa i test nel campo operazione.text e quindi segnala l’errore sulla mancata inizializzazione del command.text
Nel caso io vada ad inserire a forza “ins” nel campo operazione.text nella sub esegui segnala questo altro errore pur avendo modificato il campo importo che è numerico nel database.
“Errore durante la conversione del tipo di dati da varchar a numeric”.



paoval72 Profilo | Senior Member

>RingraziandoTi ancora una volta per l’aiuto, Ti aggiorno su quanto
>accaduto allegandoTi nuovamente il codice sperando che questa
>volta sia leggibile.

Ciao. Se quel che sto facendo ti è d'aiuto, va benissimo.
partiamo...
1) Controllo sulle date: la programmazione ad oggetti è interessante proprio perchè permette di risparmiare righe di codice, che può essere riutilizzato.
Così, non sdioppiare la function. Piutosto dalle un nome generico

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
E la puoi richiamare duvunque ti serva nel codice, passandole divolta in volta la stringa che ti interessa controllare:
If (checkdata(dataini.Text) = False) Then visualizzaMessaggio("la data di presunto inizio non è una data valida!") Exit Sub End If If (checkdata(datafin.Text) = False) Then visualizzaMessaggio("la data di presunta fine non è una data valida!") Exit Sub End If

2) comuni nella DDL: partiamo da una situazione di nuovo inserimento. nel tuo pageload " Request.QueryString("op") " vale null la prima volta: quindi non carica nulla, perchè non corrisponde a nessuno delgli if successivi.
Potresti forzarglielo, in modo che se l'utente entra per la prima volta, il form si carica coi valori di default:
If Request.QueryString("op") Is Nothing Then varop = "ins" Else varop = Request.QueryString("op") End If

3)
>In effetti nel database il campo “importo” è logicamente numerico
>ed è l’unico presente tra quelli inseriti nel codice. Ho provveduto
>prima dell’ultima compilazione a modificare il campo importo
>segnalandolo come “integer” senza alcun risultato. ("not_importo='
>& importo.integer & ', " & _)

Mancano i doppi apici. E poi, se vuoi un integer, devi convertire il text come nella riga successiva:
"not_importo=' " & CInt(importo.Text) & "', " & _
"where not_opera=" & CInt(ubicazione.Text) & " "
ATTENZIONE: la conversione potrebbe andare in errore se il dato inserito non è un integer, ma ad esempio un decimal. O, ancora peggio, una stringa del tipo "a73453,934578.923984". Per questo ti consigliavo di fare dei controlli sui dati prima di creare ogni riga del sqlCommand.
Il consiglio è quelo di costruire i tuoi comandi sql testando prima ogni campo, come fai per le date:
Innanzitutto, se il campo è obbligatorio, non deve essere nullo o vuoto.
Se ha dei dati, controlli che siano corretti (es.: se vuoi un integer, con una Regular expression testi il dato: se non lo è, lanci un messaggio di errore)
Se non è un dato obbligatorio, controlli:
Se è vuoto, lo scarti dai tuoi insert o update
Se ha dei dati, controlli che siano corretti (es.: se vuoi un integer, con una Regular expression testi il dato: se non lo è, lanci un messaggio di errore) .
Se è tutto ok, aggiungi alla tua query il dato.
3) campo "operazione". Scusa, avevo visto male!

Resto a disposizione, anche solo per analizzare un problema alla volta, sennò rischio anch'io di mandarti in confusione!
Ciao,
PV

mauri1961 Profilo | Senior Member

Eccomi di nuovo qui...

allora per quanto riguarda i campi del database tutti quelli che sono obbligatori nella form ho inserito il REQUIRED FIELD VALIDATOR che inibisce la convalida senza aver inserito nulla, ho modificato anche la sintassi per la conversione del campo importo.
Il solito importo non è un campo obbligatorio, quindi mi basterebbe che all'apertura fosse inizializzato a zero per evitare problemi di conversione. Posso inserirlo cosi --- importo.text = "0" nella crea_form ---- o devo usare un'altra sintassi?.

Invece per quanto riguarda la forzatura nella page_load che dovrebbe prevedere "ins" nel campo VAROP, l'ho eseguita ma continua a segnalarmi il solito errore di inizializzazione sulla command.executenonquery() quindi non riesco ad andare avanti e controllare se l'aggiornamento dei campi sul database funziona...

Ti rimando il solito codice che sicuramente comincerà a turbare i tuoi sonni oltre che i miei.... purtroppo non ho il tempo di dedicarmici assiduamente...ma prima o poi funzionerà...

Saluti, Maurizio

paoval72 Profilo | Senior Member

Ciao. L'executeNonQuery lo utilizzi in un solo punto del tuo codice, quindi concentriamoci su quello.
A questo punto, ti chiedo se puoi indicarmi di che tipo è definita ogni colonna della tua tabella "notifiche_01". Probabilmente stai passando un dato in un formato non corretto. Non è così impossibile, soprattutto con le date, che danno sempre problemi.
Aspetto le tue info!
Buona giornata,
PV

mauri1961 Profilo | Senior Member

La struttura della tabella che dovrebbe essere aggiornata è composta in questo modo:

not_comunicazione : date (non consente null)
not_opera : nvarchar(250) (non consente null)
not_indirizzo : nvarchar(100)
not_localita : nvarchar(50) (non conente null)
not_committente : nvarchar(50)
not_comm_cf : nvarchar(16)
not_responsabile : nvarchar(50)
not_resp_cf : nvarchar(16)
not_coord1 : nvarchar(50)
not_cor1_cf : nvarchar(16)
not_inizio : date
not_fine : date
not_impresa : nvarchar(50)
not_impr_cf : nvarchar(16)
not_comune : nvarchar(50)
not_importo : numeric(18, 2)


Tuttavia, mi da l'idea che ancora si schianti il programma perchè trova un valore fasullo nei testi tra INSERIMENTO, MODIFICA, CANCELLAZIONE in quanto provando a mettere brutalmente "INS" e andando cosi a creare un record in quel caso mi dava lo specifico errore di passaggio errato di dati.

Grazie ancora, Maurizio

paoval72 Profilo | Senior Member

Un primo problema dovrebbe riguardare questo campo:

not_localita : nvarchar(50) (non conente null)

nella tua query risulta così:
" & comune.SelectedValue & ",

Cioè, senza apici, che sono necessarie per un campo nvarchar.

'" & comune.SelectedValue & "',
Iniziamo da questo, poi vediamo. hai anche un esempio dei dati che inserisci? Non è per farmi gli affari tuoi, ma solo per capire quali campi potrebbero andare in crash.
PV

mauri1961 Profilo | Senior Member

Effettivamente il campo comune (nel form comune2) e' una seconda dropdown list contenente gli stessi campi della prima che ancora non ho attivato perche' non funziona la prima che è il campo not_localita (nel form comune2).

Comunque i campi che gestisco sono un codice numerico e il comune:

es.

001 IMPERIA
002 SAN REMO
003 BORDIGHERA
004 VENTIMIGLIA

ecc.

tieni presente che con visual web developer vedo correttamente il contenuto della tabella presente nel database, ma non la riesco a visualizzare nella finestra dropdownlist.

Ti ripasso la palla...

ciao, Maurizio

paoval72 Profilo | Senior Member

Allora, prima risolviamo il problema delle DDL.

prova ad intercettare eventuali errori nel crea_form con un try/catch:

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

Dimmi se in alto nella pagina appare qualche messaggio di errore ed eventualmente postamelo.
PV

mauri1961 Profilo | Senior Member

tentativo eseguito ma all'apparire del form non compare nessun messaggio di errore.

Ti allego nuovamente il codice.

Ciao, Maurizio

paoval72 Profilo | Senior Member

Ma il datareader ti restituisce effettivamente delle righe?
prova ad inserire questo codice tra l'execute reader e l'associazione di "comune" al datasource:

Dim dr As SqlDataReader = command1.ExecuteReader() Dim conta As Int16 = 0 Do While dr.Read conta = conta + 1 Loop Response.Write(CStr(conta)) comune.DataSource = dr
Dovrebbe scriverti in alto nella pagina un numero (quello delle righe)

mauri1961 Profilo | Senior Member

se per datareader intendi quanto risulta dalla try catch non si vede nulla. Per testare l'effettiva connessione al database ho scritto un codice dove si ricerca un campo e con una grid view deve mostrare tutti i comuni uguali a quello da me digitato. Il programma funziona e quanto inserito in tabella viene regolarmente mostrato.
Tieni presente che la tabella che deve essere popolata da questa form invece è vuota.

Ciao, Maurizio.

paoval72 Profilo | Senior Member

Scusa se ti rompo, ma purtroppo, non avendo il tuo db qui, ovviamente ti chiedo di fare dei tentativi per conto mio.
Allora, prova a modificare la crea_form così:

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

E poi scrivimi se ti appare la finestrella e che numero contiene (sono le righe estratte nel datareader)

mauri1961 Profilo | Senior Member

ora devo uscire dall'ufficio, ti rispondo in serata.

p.s. ci mancherebbe che rompi....sono io semmai che sto stressando....

grazie, Maurizio

mauri1961 Profilo | Senior Member

anche in questo caso ho inserito quanto mi hai segnalato ma non mostra assolutamente nulla.

Per mio sfizio, e non so se correttamente, ho inserito una visualizzazione del campo varop ma anche in questo caso non mi mostra nulla.


????

Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
If Not Page.IsPostBack Then
Dim varop As String
If Request.QueryString("op") Is Nothing Then
varop = "ins"
Else
varop = Request.QueryString("op")
End If

If varop = "est" Then operazione.Text = "est"
estrai()
If varop = "ins" Then operazione.Text = "ins"
crea_form()
If varop = "mod" Then operazione.Text = "mod"
modifica()
If varop = "del" Then operazione.Text = "del"
elimina()


End If
visualizzaMessaggio(operazione.Text)

End Sub


Ciao, Maurizio

paoval72 Profilo | Senior Member

Ciao, mi sono accorto di una cosa. Manca l'attivazione per la gestione degli eventi! Per sviluppare io uso Visual Studio (ora il 2008), che in automatico mi gestisce questo attributo: così, non me ne sono accorto! E per questo non passa neanche dal Load della pagina: carica solo l'html, creandoti solo la struttura del form.
Puoi agire in due modi (il secondo è preferibile ed è quello utilizzato da Visual Studio):
1) O attivi l'attributo AutoEventWireup della Page:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

2) O associ al page_load l'handle degli eventi
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Puoi riportare la tua sub crea_form allo stato iniziale (lasciando magari il try/catch che tanto male non fa!):
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Prova ora!
Ciao,
PV

mauri1961 Profilo | Senior Member

PERFETTO !!!

ORA MOSTRA LA DROP DOWN LIST, AGGIORNA CORRETTAMENTE LA TABELLA.

VERIFICO UIN PO' DI COSE E AL LIMITE MI FACCIO RISENTIRE (SE VEDI UN'ALTRA THREAD NEL FORUM MAGARI SE HAI VOGLIA RISPONDIMI)

TI RINGRAZIO PER IL PREZIOSO AIUTO..

CIAO, MAURIZIO

paoval72 Profilo | Senior Member

Scusa se non me ne sono accorto prima, ma è l'abitudine a lavorare in un ambiente dove è già tutto settato e si dà tutto per scontato.
resto a disposizione.
Ciao e buona giornata,
PV
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