Due errori nello stesso form in visual studio 2005

lunedì 06 ottobre 2008 - 11.54

Mau67 Profilo | Expert

Ho due errori nello stesso form e da 2 giorni che cerco di capire il perchè ma non riesco a venirne fuori, mi date una mano?

Vi posto codice ed errori:

Questo codice è legato a un combobox

objConnection.Open()
ds.Reset()
sqlString = "SELECT * FROM ForzaArmata order by ForzaArmata"
myCommand.Connection = objConnection
myCommand.CommandText = sqlString
myAdapter.SelectCommand = myCommand
myAdapter.Fill(ds, "ForzaArmata")
maxrows = ds.Tables("ForzaArmata").Rows.Count
counter = 0
'ds.Tables.Add(Table2)

Dim ds5 As DataSet = New DataSet("ListTypes")
ds5.Tables.Add("ListTypes")

With ds5.Tables(0)
.Columns.Add("Key", GetType(String))
.Columns.Add("Value", GetType(String))
CmbForzaArmata.Items.Add("")
.Rows.Add(0, "")

While counter < maxrows
IdFA = ds.Tables("ForzaArmata").Rows(counter).Item("ForzaArmata")
Desc = ds.Tables("ForzaArmata").Rows(counter).Item("Descrizione")

CmbForzaArmata.Items.Add(Desc)
.Rows.Add(IdFA, Desc)

IdFA = ""
counter += 1
End While
End With
CmbForzaArmata.ValueMember = "Key"
CmbForzaArmata.DisplayMember = "Value"
CmbForzaArmata.DataSource = ds5.Tables(0).DefaultView
CmbForzaArmata.Select()

ERRORE
I dati di tipo string o binary verrebbero troncati.
L'istruzione è stata interrotta.


Quest'altro dovrebbe eseguire l'UPDATE ma genere l'errore:


objCommand.CommandText = "UPDATE Anagrafica" & _
"SET IDAmministrato=@IDAmministrato, CodiceFiscale=@CodiceFiscale, CodGrado=@CodGrado, CodFA=@CodFA, Cognome=@Cognome," & _
"Nome=@Nome, LuogoNascita=@LuogoNascita, ProvNascita=@ProvNascita," & _
"DataNascita=@DataNascita, Pagamento=@Pagamento, Banca=@Banca," & _
"Agenzia=@Agenzia, IndirizzoIstituto=@IndirizzoIstituto, LuogoIstituto=@LuogoIstituto," & _
"CapIstituto=@CapIstituto, Prov=@Prov, Agenzia=@Agenzia, IndirizzoIstituto=@IndirizzoIstituto," & _
"LuogoIstituto=@LuogoIstituto, Cap=@Cap," & _
"Naz=@Naz, CinE=@CinE, Cin=@Cin, Abi=@Abi," & _
"Cab=@Cab, CC=@CC, Indirizzo=@Indirizzo, Cap=@Cap," & _
"Città=@Città, Provincia=@Provincia, EnteAmm=@EnteAmm, IndirizzoAmm=@IndirizzoAmm," & _
"CapAmm=@CapAmm, CittàAmm=@CittàAmm, ProvinciaAmm=@ProvinciaAmm, TaskForce=@TaskForce," & _
" Luogo=@Luogo, Cellulare@Cellulare, FineMix=@FineMix WHERE IDAmministrato=@IDAmministrato"



ERRORE
Sintassi non corretta in prossimità di 'IDAmministrato'.

Ringrazio in anticipo Ciao

Mau67

rossimarko Profilo | Guru

Ciao

>ERRORE
>I dati di tipo string o binary verrebbero troncati.
>L'istruzione è stata interrotta.

Questo errore compare quando i dati che stai passando a db sono sovradimensionati rispetto alla dimensione del campo. Ad esempio se una colonna di tipo stringa come lunghezza massima ha 50 caratteri questo errore ti viene ritornato se passi ad esempio una stringa di 60 caratteri

>Quest'altro dovrebbe eseguire l'UPDATE ma genere l'errore:
>objCommand.CommandText = "UPDATE Anagrafica" & _
>"SET IDAmministrato=@IDAmministrato, CodiceFiscale=@CodiceFiscale, CodGrado=@CodGrado, CodFA=@CodFA, >Cognome=@Cognome," & _

In questo caso verifica la sintassi perchè mi sembra che manchi uno spazio prima della parola chiave SET. Dovrebbe essere così:
objCommand.CommandText = "UPDATE Anagrafica" & _
" SET IDAmministrato=@IDAmministrato, CodiceFiscale=@CodiceFiscale, CodGrado=@CodGrado, CodFA=@CodFA,
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Mau67 Profilo | Expert

Se metto lo spazio mi genera il seguente errore

Sintassi non corretta in prossimità di ' '.


l'altro errore se lo scrivo in questo modo funziona però nalla combobox mi visualizza l'ID e non la descrizione

objConnection.Open()
ds.Reset()
sqlString = "SELECT * FROM ForzaArmata order by ForzaArmata"
myCommand.Connection = objConnection
myCommand.CommandText = sqlString
myAdapter.SelectCommand = myCommand
myAdapter.Fill(ds, "ForzaArmata")
maxrows = ds.Tables("ForzaArmata").Rows.Count
counter = 0
'ds.Tables.Add(Table2)

Dim ds5 As DataSet = New DataSet("ListTypes")
ds5.Tables.Add("ListTypes")

With ds5.Tables(0)
.Columns.Add("Key", GetType(String))
.Columns.Add("Value", GetType(String))
CmbForzaArmata.Items.Add("")
.Rows.Add(0, "")

While counter < maxrows
IdFA = ds.Tables("ForzaArmata").Rows(counter).Item("Descrizione") Qui ho invertito
Desc = ds.Tables("ForzaArmata").Rows(counter).Item("ForzaArmata")

CmbForzaArmata.Items.Add(Desc)
.Rows.Add(IdFA, Desc)

IdFA = ""
counter += 1
End While
End With
CmbForzaArmata.ValueMember = "Key"
CmbForzaArmata.DisplayMember = "Value"
CmbForzaArmata.DataSource = ds5.Tables(0).DefaultView
CmbForzaArmata.Select()


Grazie

Mau67

rossimarko Profilo | Guru

>
>l'altro errore se lo scrivo in questo modo funziona però nalla
>combobox mi visualizza l'ID e non la descrizione

Come mai prima popoli la combo prima all'interno del ciclo
>CmbForzaArmata.Items.Add(Desc)
e poi impostando il datasource?
>CmbForzaArmata.ValueMember = "Key"
>CmbForzaArmata.DisplayMember = "Value"
>CmbForzaArmata.DataSource = ds5.Tables(0).DefaultView

Penso che il problema di visualizzazione sia questo, nel secondo caso imposti come displayMember il Value e quindi è quella la colonna utilizzata in fase di visualizzazione

-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Mau67 Profilo | Expert

E' un codice che ho trovato ed ho provato ad adattarlo nel mio progetto (sono autodidatta) se hai un altra soluzione te ne sarei grato

Sai stò imparando

Ciao grazie
Mau67

rossimarko Profilo | Guru

>E' un codice che ho trovato ed ho provato ad adattarlo nel mio
>progetto (sono autodidatta) se hai un altra soluzione te ne sarei
>grato
>
>Sai stò imparando

Beh, se hai la tabella già pronta non serve il ciclo per popolare la combo, basta impostare il datasource e i nomi delle colonne che conterrano il valore e il testo descrittivo, come fai già in questo punto:

CmbForzaArmata.ValueMember = "Key" CmbForzaArmata.DisplayMember = "Value" CmbForzaArmata.DataSource = ds5.Tables(0).DefaultView

Se poi i nomi delle colonne ("Key" per il valore e "Value" per il testo visualizzato) sono sbagliati allora correggili pure nelle righe di codice che ti ho riportato

Una domanda: la combo deve visualizzare i dati della tabella ds.Tables("ForzaArmata") ?

Perchè in questo caso puoi impostare questa tabella direttamente come datasource della combo
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Mau67 Profilo | Expert

Scusa non riesco potresti modificare il codice?

objConnection.Open()
ds.Reset()
sqlString = "SELECT ForzaArmata, Descrizione FROM ForzaArmata order by ForzaArmata"
myCommand.Connection = objConnection
myCommand.CommandText = sqlString
myAdapter.SelectCommand = myCommand
myAdapter.Fill(ds, "ForzaArmata")
maxrows = ds.Tables("ForzaArmata").Rows.Count
counter = 0
'ds.Tables.Add(Table2)

Dim ds5 As DataSet = New DataSet("ListTypes")
ds5.Tables.Add("ListTypes")

With ds5.Tables(0)
.Columns.Add("Key", GetType(String))
.Columns.Add("Value", GetType(String))
CmbForzaArmata.Items.Add("")
.Rows.Add(0, "")

While counter < maxrows
IdFA = ds.Tables("ForzaArmata").Rows(counter).Item("Descrizione") Qui ho invertito
Desc = ds.Tables("ForzaArmata").Rows(counter).Item("ForzaArmata")

CmbForzaArmata.Items.Add(Desc)
.Rows.Add(IdFA, Desc)

IdFA = ""
counter += 1
End While
End With
CmbForzaArmata.ValueMember = "Key"
CmbForzaArmata.DisplayMember = "Value"
CmbForzaArmata.DataSource = ds5.Tables(0).DefaultView
CmbForzaArmata.Select()

Grazie


Mau67

rossimarko Profilo | Guru

Dovrebbe bastare questo:

sqlString = "SELECT ForzaArmata, Descrizione FROM ForzaArmata order by ForzaArmata" myCommand.Connection = objConnection myCommand.CommandText = sqlString myAdapter.SelectCommand = myCommand myAdapter.Fill(ds, "ForzaArmata") CmbForzaArmata.ValueMember = "ForzaArmata" CmbForzaArmata.DisplayMember = "Descrizione" CmbForzaArmata.DataSource = ds.Tables("ForzaArmata")

Purtroppo non posso provarlo..

Una domanda: ho visto che c'è il codice di apertura della connessione, c'è anche quello di chiusura? E' importante chiudere la connessione non appena è stata usata e non serve più
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Mau67 Profilo | Expert

Si c'è anche la chiusura, però purtroppo non funziona ancora anche con la modifica che mi hai suggerito.

Il problema dell'update lo risolto è rimasto solo il problema combobox.

Altre idee?

grazie
Mau67

rossimarko Profilo | Guru

Il combo box che problema ti da? sempre le colonne invertite?
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Mau67 Profilo | Expert

Si le colonne invertite.

In pratica il campo "ForzaArmata" è il valore id che deve memorizzare nella tabella invece in
campo "Descrizione" è quello che deve visualizzare nel combobox.

Grazie
Mau67

rossimarko Profilo | Guru

>Si le colonne invertite.
>
>In pratica il campo "ForzaArmata" è il valore id che deve memorizzare
>nella tabella invece in
>campo "Descrizione" è quello che deve visualizzare nel combobox.
>

E' proprio quello che ti ho riportato nel codice:
CmbForzaArmata.ValueMember = "ForzaArmata" CmbForzaArmata.DisplayMember = "Descrizione" CmbForzaArmata.DataSource = ds.Tables("ForzaArmata")

Quando poi devi prelevare il valore basta usare la proprietà CmbForzaArmata.SelectedValue
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Mau67 Profilo | Expert

Il codice che mi hai consigliato lo inserito nel Form_Load è esatta la posizione?

Ti allego un file in word dove ti faccio vedere visivamente il form magari ti può essere d'aiuto

Grazie
Mau67

rossimarko Profilo | Guru

Si va bene nel form load. Una domanda, ma quando nella form rimane la lettera "C" se apri il menu a tendina della combo cosa vedi? I valori corretti?

Prova a commentare il codice dove viene impostato il datasource della combo, per verificare che non venga popolata da qualche altra parte..
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Mau67 Profilo | Expert

Quando apro il menù a tendina i valori li visualizzo correttamente.
Ma se seleziono il valore va in errore perchè a mio avviso tenta di salvare la descrizione e non l'ID cioè (la "C").
Mau67

rossimarko Profilo | Guru

>Quando apro il menù a tendina i valori li visualizzo correttamente.
>Ma se seleziono il valore va in errore perchè a mio avviso tenta
>di salvare la descrizione e non l'ID cioè (la "C").
>Mau67

Ma tu vuoi lasciare all'utente la possibilità di scrivere qualcosa nella combo? Valuta la possibilità di cambiare la proprietà DropDownStile della combo in "DropDownList"
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Mau67 Profilo | Expert

No la combo non deve essere editabile quindi ho cambiato la proprietà da DropDownStile in "DropDownList"
però ancora non ci siamo.






Mau67

rossimarko Profilo | Guru

La procedura di salvataggio che valore legge? Adesso che hai cambiato la proprietà cosa viene visualizzato nella combo?
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Mau67 Profilo | Expert

Credo sia proprio questo il problema la lettura in fase di salvataggio ti posto il codice perchè non so come agire

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.ToolStripStatusLabel1.Text = (sqlString) 'Questo è solo per verificare!
sr.Close()

Dim objConnection As New SqlConnection(sqlString)

' Declare local variables and objects...
Dim intPosition As Integer
Dim objCommand As SqlCommand = New SqlCommand()

' Save the current record position...
intPosition = objCurrencyManager.Position
Try

' Set the SqlCommand object properties...
objCommand.Connection = objConnection
objCommand.CommandText = "UPDATE Anagrafica" & _
" SET CodiceFiscale=@CodiceFiscale, CodGrado=@CodGrado, CodFA=@CodFA, Cognome=@Cognome," & _
"Nome=@Nome, LuogoNascita=@LuogoNascita, ProvNascita=@ProvNascita, DataNascita=@DataNascita," & _
"Pagamento=@Pagamento, Banca=@Banca, Agenzia=@Agenzia, IndirizzoIstituto=@IndirizzoIstituto, LuogoIstituto=@LuogoIstituto, CapIstituto=@CapIstituto," & _
"Prov=@Prov, Naz=@Naz, CinE=@CinE," & _
"Cin=@Cin, Abi=@Abi, Cab=@Cab, CC=@CC, Indirizzo=@Indirizzo, Cap=@Cap, Città=@Città, Provincia=@Provincia," & _
"EnteAmm=@EnteAmm, IndirizzoAmm=@IndirizzoAmm, CapAmm=@CapAmm, CittàAmm=@CittàAmm, ProvinciaAmm=@ProvinciaAmm," & _
"TaskForce=@TaskForce, Luogo=@Luogo, Cellulare=@Cellulare, FineMix=@FineMix WHERE IDAmministrato=@IDAmministrato"


objCommand.CommandType = CommandType.Text

' Add parameters for the placeholders in the SQL in the
' CommandText property...



' Parameter for the type column
objCommand.Parameters.AddWithValue("@CodiceFiscale", txtCodiceFiscale.Text)


' Parameter for the type column
objCommand.Parameters.AddWithValue("@CodGrado", CmbForzaArmata.Text)

' Parameter for the type column
objCommand.Parameters.AddWithValue("@CodFA", CmbForzaArmata.Text) IL PROBLEMA PENSO SIA QUI
' Parameter for the price column...
objCommand.Parameters.AddWithValue("@Cognome", txtCognome.Text)

' Parameter for the price column...
objCommand.Parameters.AddWithValue("@Nome", txtNome.Text)

' Parameter for the price column...
objCommand.Parameters.AddWithValue("@LuogoNascita", txtLuogoNascita.Text)

' Parameter for the price column...
objCommand.Parameters.AddWithValue("@ProvNascita", txtProvNascita.Text)

' Parameter for the pubdate column
objCommand.Parameters.AddWithValue("@DataNascita", cmbDataNascita.Text).DbType _
= DbType.DateTime

' Parameter for the title column...
objCommand.Parameters.AddWithValue("@Pagamento", CmbPagamento.Text)

' Parameter for the type column
objCommand.Parameters.AddWithValue("@Banca", txtIstituto.Text)

' Parameter for the price column...
objCommand.Parameters.AddWithValue("@Agenzia", txtAgenzia.Text)

' Parameter for the price column...
objCommand.Parameters.AddWithValue("@IndirizzoIstituto", txtIndirizzoBanca.Text)

' Parameter for the price column...
objCommand.Parameters.AddWithValue("@LuogoIstituto", txtLuogo.Text)

' Parameter for the title column...
objCommand.Parameters.AddWithValue("@CapIstituto", txtCapIstituto.Text)

' Parameter for the type column
objCommand.Parameters.AddWithValue("@Prov", txtProvIstituto.Text)

' Parameter for the price column...
objCommand.Parameters.AddWithValue("@Naz", txtPaese.Text)

' Parameter for the price column...
objCommand.Parameters.AddWithValue("@CinE", txtCinEstero.Text)

' Parameter for the price column...
objCommand.Parameters.AddWithValue("@Cin", txtCin.Text)

' Parameter for the pubdate column
objCommand.Parameters.AddWithValue("@Abi", txtAbi.Text)

' Parameter for the title column...
objCommand.Parameters.AddWithValue("@Cab", txtCab.Text)

' Parameter for the type column
objCommand.Parameters.AddWithValue("@CC", txtCC.Text)


' Parameter for the price column...
objCommand.Parameters.AddWithValue("@Indirizzo", txtIndirizzo.Text)

' Parameter for the price column...
objCommand.Parameters.AddWithValue("@Cap", txtCap.Text)


' Parameter for the title column...
objCommand.Parameters.AddWithValue("@Città", txtCittà.Text)

' Parameter for the type column
objCommand.Parameters.AddWithValue("@Provincia", txtProvincia.Text)

' Parameter for the price column...
objCommand.Parameters.AddWithValue("@EnteAmm", txtEnte.Text)


' Parameter for the price column...
objCommand.Parameters.AddWithValue("@IndirizzoAmm", txtIndirizzoEnte.Text)

' Parameter for the price column...
objCommand.Parameters.AddWithValue("@CittàAmm", txtCittàEnte.Text)

' Parameter for the price column...
objCommand.Parameters.AddWithValue("@CapAmm", txtCapEnte.Text)

' Parameter for the price column...
objCommand.Parameters.AddWithValue("@ProvinciaAmm", txtProvinciaEnte.Text)

' Parameter for the price column...
objCommand.Parameters.AddWithValue("@TaskForce", txtTaskForce.Text)

' Parameter for the price column...
objCommand.Parameters.AddWithValue("@Luogo", txtLuogoTaskForce.Text)

' Parameter for the price column...
objCommand.Parameters.AddWithValue("@Cellulare", txtCellulare.Text)


' Parameter for the price column...
objCommand.Parameters.AddWithValue("@FineMix", "01/01/1900").DbType _
= DbType.DateTime


' Parameter for the title_id field...
objCommand.Parameters.AddWithValue _
("@IDAmministrato", BindingContext(objDataView).Current("IDAmministrato"))


' Open the connection...
objConnection.Open()

' Execute the SqlCommand object to update the data...
objCommand.ExecuteNonQuery()

' Close the connection...
objConnection.Close()

' Fill the DataSet and bind the fields...
FillDataSetAndView()
BindFields()
' Set the record position to the one that you saved...
objCurrencyManager.Position = intPosition


' Show the current record position...
ShowPosition()


MsgBox("Record Modificato")

Catch ex As Exception
MsgBox("Modifica record fallita")

End Try

End Sub
Mau67

rossimarko Profilo | Guru

Si, il problema è nel salvataggio. Come valore viene passato il testo:

>' Parameter for the type column
>objCommand.Parameters.AddWithValue("@CodGrado", CmbForzaArmata.Text)

usa invece il SelectedValue

objCommand.Parameters.AddWithValue("@CodGrado", CmbForzaArmata.SelectedValue)
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Mau67 Profilo | Expert

Ok perfetto grazie per la pazienza

Ciao
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