Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: Errore su Update

  1. #1
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    Errore su Update

    Facendo l'update di una tabella ottengo l'errore:
    Nessun valore specificato per alcuni parametri necessari

    la procedura è:
    codice:
        Private Sub aggiornaDatiAccesso(ByVal comando As OleDbCommand)
    
            'l'utente connesso non può modificarsi il privilegio 7, in servizio, abilitato
    
            Dim sql$ = ""
            Dim abilitato As Boolean
    
            Try
                If CInt(Me.id_utente) = j.id_utente Then
                    abilitato = True
                Else
                    abilitato = Me.c_abilitato.Checked
                End If
    
                sql = "UPDATE UTENTI_REGIONE SET [NOME_COMPLETO] = ?, [SIGLA] = ?, [TELEFONO] = ?, [TITOLO_STUDIO] = ?, [NOTE] = ?, [ABILITATO] = ? WHERE [ID_UTENTE] = ? "
                comando.CommandText = sql
                comando.Parameters.Clear()
    
                comando.Parameters.Add("nome_completo", OleDbType.VarChar, 50).Value = Libreria.StringNullToDBNull(Me.c_nome_completo.Text)
                comando.Parameters.Add("sigla", OleDbType.VarChar, 5).Value = Libreria.StringNullToDBNull(Me.c_sigla.Text)
                comando.Parameters.Add("telefono", OleDbType.VarChar, 60).Value = Libreria.StringNullToDBNull(Me.c_telefono.Text)
                comando.Parameters.Add("titolo_studio", OleDbType.VarChar, 40).Value = Libreria.StringNullToDBNull(Me.c_titolo_studi.Text)
                comando.Parameters.Add("note", OleDbType.VarChar, 200).Value = Libreria.StringNullToDBNull(Me.c_note.Text)
                comando.Parameters.Add("abilitato", OleDbType.Boolean).Value = abilitato
                comando.Parameters.Add("id_utente", OleDbType.Integer).Value = Me.id_utente
    
                comando.ExecuteNonQuery()
    
    
            Catch ex As Exception
                Throw
            End Try
        End Sub
    Ho verificato col debug che id_utente è un id valido

    Non riesco a capire Mi date una mano?

    Pietro

  2. #2
    Così come hai fatto tu è più bello, concordo.
    Perchè invece di aggiungere i parametri non li scrvi all'interno della stringa sql come si faceva con il vecchio asp? E' solo una prova. Poi torniamo indietro. Non ci sono altri campi che non accettano null sul tuo db?

    Fammi sapere
    Ciao
    K
    Kalman

  3. #3
    pietro posso farti una domanda sulle stored procedure?

    Oggi ho inziato a lavorarci ma gia mi sono stufato di scriverle.

    E' possibile che ogni volta devo scrivermi:

    codice:
    OracleCommand objCmd = new OracleCommand("nome stored procedur", objConn);
    objCmd.CommandType = CommandType.StoredProcedure;
    
    e poi tutta la trafila:
    comando.Parameters.Add("nome_completo", OleDbType.VarChar, 50).Value
    comando.Parameters.Add("nome_completo", OleDbType.VarChar, 50).Value
    comando.Parameters.Add("nome_completo", OleDbType.VarChar, 50).Value
    comando.Parameters.Add("nome_completo", OleDbType.VarChar, 50).Value
    ma è obbligatorio mettergli il tipo, la lunghezza ecc?

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da Kalman
    Così come hai fatto tu è più bello, concordo.
    Perchè invece di aggiungere i parametri non li scrvi all'interno della stringa sql come si faceva con il vecchio asp? E' solo una prova. Poi torniamo indietro. Non ci sono altri campi che non accettano null sul tuo db?

    Fammi sapere
    Ciao
    K
    Per prima ti ringrazio della tua risposta. Sto facendo delle prove facendo l'update campo per campo per vedere dove dà l'errore. Poi faccio sapere.

    Allora, questo modo di procedere, l'ho imparato dall'amico legnetto (che saluto ) e, onestamente credo che sia il migliore.
    Pietro

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da Daniele80
    pietro posso farti una domanda sulle stored procedure?

    Oggi ho inziato a lavorarci ma gia mi sono stufato di scriverle.

    E' possibile che ogni volta devo scrivermi:

    codice:
    OracleCommand objCmd = new OracleCommand("nome stored procedur", objConn);
    objCmd.CommandType = CommandType.StoredProcedure;
    
    e poi tutta la trafila:
    comando.Parameters.Add("nome_completo", OleDbType.VarChar, 50).Value
    comando.Parameters.Add("nome_completo", OleDbType.VarChar, 50).Value
    comando.Parameters.Add("nome_completo", OleDbType.VarChar, 50).Value
    comando.Parameters.Add("nome_completo", OleDbType.VarChar, 50).Value
    ma è obbligatorio mettergli il tipo, la lunghezza ecc?
    Ci sono diversi modi di fare. Io, in base ai miei errori uso quasi sempre i parametri. Ci sono diversi modi di utilizzarli ma, i più semplici mi hanno dato problemi in access e in oracle, perciò utilizzo SEMPRE quella sintassi che, a lungo andare credo che ripaghi


    Ti mando un po' di codice su cui sto lavorando adesso. Nota che se devi aggiornare più tabelle con una transazione, funziona che è una meraviglia
    codice:
    Private Sub link_emetti_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles link_emetti.Click
    	If Me.solo_lettura Then
    		Me.messaggioJS = Libreria.toStringaJS("Non si hanno le autorizzazioni per modificare i dati.")
    		Exit Sub
    	End If
    
    	If Me.id_utente = "" Or Me.c_id_utente.SelectedValue = "" Then
    		Me.messaggioJS = "Devi selezionare un utente e un settore"
    		Exit Sub
    	End If
    
    	Dim Connessione As OleDbConnection
    	Dim Comando As OleDbCommand
    	Dim Transazione As OleDbTransaction
    	Dim Parametro As OleDbParameter
    	Dim Sql$ = ""
    	Dim flag_7, in_servizio, abilitato As Boolean
    
    	Try
    		'l'utente connesso non può modificarsi il privilegio 7, in servizio, abilitato
    		If CInt(Me.id_utente) = j.id_utente Then
    			flag_7 = True
    			in_servizio = True
    			abilitato = True
    		Else
    			flag_7 = Me.c_flag_7.Checked
    			in_servizio = Me.c_in_servizio.Checked
    			abilitato = Me.c_abilitato.Checked
    		End If
    
    		Connessione = New OleDbConnection(StringaConnessione)
    		Connessione.Open()
    		Transazione = Connessione.BeginTransaction()
    		Sql = "INSERT INTO DETTAGLIO_UTENTI (ID_SETTORE, QUALIFICA, IN_SERVIZIO,FLAG_1,FLAG_2,FLAG_3,FLAG_4,FLAG_5,FLAG_6,FLAG_7,FLAG_8,FLAG_9,FLAG_10,ID_UTENTE,DATA_STATO) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) "
    		Comando = New OleDbCommand(Sql, Connessione, Transazione)
    
    		Comando.Parameters.Clear()
    
    		Comando.Parameters.Add("id_settore", OleDbType.Integer).Value = Me.c_id_settore.SelectedValue
    		Comando.Parameters.Add("qualifica", OleDbType.VarChar, 80).Value = Libreria.StringNullToDBNull(Me.c_qualifica.Text)
    		Comando.Parameters.Add("IN_SERVIZIO", OleDbType.Boolean).Value = in_servizio
    		Comando.Parameters.Add("flag_1", OleDbType.Boolean).Value = Me.c_flag_1.Checked
    		Comando.Parameters.Add("flag_2", OleDbType.Boolean).Value = Me.c_flag_2.Checked
    		Comando.Parameters.Add("flag_3", OleDbType.Boolean).Value = Me.c_flag_3.Checked
    		Comando.Parameters.Add("flag_4", OleDbType.Boolean).Value = Me.c_flag_4.Checked
    		Comando.Parameters.Add("flag_5", OleDbType.Boolean).Value = Me.c_flag_5.Checked
    		Comando.Parameters.Add("flag_6", OleDbType.Boolean).Value = Me.c_flag_6.Checked
    		Comando.Parameters.Add("flag_7", OleDbType.Boolean).Value = flag_7
    		Comando.Parameters.Add("flag_8", OleDbType.Boolean).Value = Me.c_flag_8.Checked
    		Comando.Parameters.Add("flag_9", OleDbType.Boolean).Value = Me.c_flag_9.Checked
    		Comando.Parameters.Add("flag_10", OleDbType.Boolean).Value = Me.c_flag_10.Checked
    
    		Comando.Parameters.Add("id_utente", OleDbType.Integer).Value = Me.c_id_utente.SelectedValue
    		Comando.Parameters.Add("data_stato", OleDbType.Date).Value = DateTime.Now
    
    		Comando.ExecuteNonQuery()
    
    		aggiornaDatiAccesso(Comando)
    
    		'Transazione.Commit()
    		Transazione.Rollback() 'sono in debug
    
    		messaggioJS = "Aggiornato con successo il profilo utente"
    
    
    	Catch ex As Exception
    		Transazione.Rollback()
    		'Me.messaggioJS = Libreria.toStringaJS(ex.ToString)
    		Me.messaggioJS = Libreria.toStringaJS(ex.Message)
    
    
    	Finally
    		If (Not (Connessione Is Nothing)) Then Connessione.Close()
    		Me.BindData()
    	End Try
    End Sub
    
    
    Private Sub aggiornaDatiAccesso(ByVal comando As OleDbCommand)
    
    	'l'utente connesso non può modificarsi il privilegio 7, in servizio, abilitato
    
    	Dim sql$ = ""
    	Dim abilitato As Boolean
    
    	Try
    		If CInt(Me.id_utente) = j.id_utente Then
    			abilitato = True
    		Else
    			abilitato = Me.c_abilitato.Checked
    		End If
    
    		sql = "UPDATE UTENTI_REGIONE SET [NOME_COMPLETO] = ?, [SIGLA] = ?, [TELEFONO] = ?, [TITOLO_STUDIO] = ?, [NOTE] = ?, [ABILITATO] = ? WHERE [ID_UTENTE] = ? "
    		comando.CommandText = sql
    		comando.Parameters.Clear()
    
    		comando.Parameters.Add("nome_completo", OleDbType.VarChar, 50).Value = Libreria.StringNullToDBNull(Me.c_nome_completo.Text)
    		comando.Parameters.Add("sigla", OleDbType.VarChar, 5).Value = Libreria.StringNullToDBNull(Me.c_sigla.Text)
    		comando.Parameters.Add("telefono", OleDbType.VarChar, 60).Value = Libreria.StringNullToDBNull(Me.c_telefono.Text)
    		comando.Parameters.Add("titolo_studio", OleDbType.VarChar, 40).Value = Libreria.StringNullToDBNull(Me.c_titolo_studi.Text)
    		comando.Parameters.Add("note", OleDbType.VarChar, 200).Value = Libreria.StringNullToDBNull(Me.c_note.Text)
    		comando.Parameters.Add("abilitato", OleDbType.Boolean).Value = abilitato
    		comando.Parameters.Add("id_utente", OleDbType.Integer).Value = Me.id_utente
    
    		comando.ExecuteNonQuery()
    
    
    	Catch ex As Exception
    		Throw
    	End Try
    End Sub
    
    Private Sub button_refresh_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles button_refresh.Click
    	InizializzaComboBox()
    	Libreria.SelectItemFromValue(Me.c_id_utente, Me.id_utente_nuovo.Value)
    	c_id_utente_SelectedIndexChanged(c_id_utente, Nothing)
    End Sub
    
    Private Sub link_elimina_utente_ServerClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles link_elimina_utente.ServerClick
    	Dim Connessione As OleDbConnection
    	Dim Comando As OleDbCommand
    	Dim Transazione As OleDbTransaction
    	Dim Sql$ = ""
    	Dim id_utente$ = ""
    	Dim i%
    	Dim tabelle$() = {"PROTOCOLLO", "ASSEGNAZIONE_PRATICHE", "INFORTUNI", "VERBALI_PRESCRIZIONI"}
    	Try
    		id_utente = Me.c_id_utente.SelectedValue
    		If id_utente = "" Then
    			Me.messaggioJS = Libreria.toStringaJS("Bisogna selezionare un utente")
    			Exit Sub
    		End If
    
    		Connessione = New OleDbConnection(StringaConnessione)
    		Connessione.Open()
    		Transazione = Connessione.BeginTransaction()
    		Comando = New OleDbCommand(Sql, Connessione, Transazione)
    		Comando.Parameters.Clear()
    
    		'controllo le tabelle correlate: se esiste id_utente esco
    		For i = 0 To tabelle.GetUpperBound(0)
    			If CInt(Libreria.RisultatoAggregazioneSQL(Comando, String.Format("SELECT COUNT(*) FROM {0} WHERE [ID_UTENTE] = {1} ", tabelle(i), id_utente))) > 0 Then
    				Me.messaggioJS = Libreria.toStringaJS("Non si può eliminare l'utente perchè è referenziato nella tabella PROTOCOLLO")
    				Exit Sub
    			End If
    
    		Next
    
    		Sql = "DELETE FROM [DETTAGLIO_UTENTI] WHERE [ID_UTENTE] = " & id_utente
    		Comando.CommandText = Sql
    		Comando.Parameters.Clear()
    		Comando.ExecuteNonQuery()
    
    
    		Sql = "DELETE FROM [UTENTI_REGIONE] WHERE [ID_UTENTE] = " & id_utente
    		Comando.CommandText = Sql
    		Comando.Parameters.Clear()
    		Comando.ExecuteNonQuery()
    
    
    		Transazione.Commit()
    		'Transazione.Rollback()
    		InizializzaComboBox()
    		Me.messaggioJS = Libreria.toStringaJS("Utente eliminato con successo")
    
    	Catch ex As Exception
    		Transazione.Rollback()
    		Me.messaggioJS = Libreria.toStringaJS(ex.Message)
    
    	Finally
    		If (Not (Connessione Is Nothing)) Then Connessione.Close()
    
    	End Try
    End Sub
    
    End Class
    Pietro

  6. #6
    si non è quello a me scoccia di scrivere sempre

    OracleParameter prm1 = new OracleParameter("P_idarea", OracleType.Number);
    prm1.Direction = ParameterDirection.Input;
    prm1.Value = drpIDArea.SelectedValue;
    objCmd.Parameters.Add(prm1);

    conta che ho una marea di parametri uff..

    è possibile che per ogni parametro devo fare cosi?


    Forse con il data provider di oracle questa sintassi non riesco ad averla:
    Comando.Parameters.Add("id_settore", OleDbType.Integer).Value = ...

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116


    Pietro

  8. #8
    Non contestavo affatto il modo di procedere anzi scrivere in quelo modo aumenta la chiarezza di lettura del codice un domani che devi modificarlo!
    Dicevo solo che per testare dove andasse in errore o quale parametro di desse dei problemi sarebbe stato più comodo scivere il parametro direttamente nella stringa sql per poi testarla su access/sql/oracle direttamente.

    Ciao
    K
    Kalman

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da Kalman
    Non contestavo affatto il modo di procedere anzi scrivere in quelo modo aumenta la chiarezza di lettura del codice un domani che devi modificarlo!
    Dicevo solo che per testare dove andasse in errore o quale parametro di desse dei problemi sarebbe stato più comodo scivere il parametro direttamente nella stringa sql per poi testarla su access/sql/oracle direttamente.

    Ciao
    K
    Hai ragione, dopotutto ci sono solo due ore per scoprire che il problema era solo il nome di un campo sbagliato , due ore per scoprire che non è [TITOLO_STUDIO] ma [TITOLO_STUDI]

    Ciao
    Pietro

  10. #10
    pietro!!!!


    Input string was not in a correct format.

    se io ho questi paramentri di INPUT

    P_idarea number,
    P_oggettoattivita varchar2,
    P_datarichiesta date,


    quando scrivo:

    OracleParameter prm16 = new OracleParameter("idarea", OracleType.Number);
    prm16.Direction = ParameterDirection.Input;
    prm16.Value = idarea; //idarea di tipo stringa
    objCmd.Parameters.Add(prm16);


    percaso devo castare le mie var prima di settarle nel value? penso proprio di no, vero?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.