Jump to content

Erro a fazer Update por parametros (Resolvido)


hugoee
 Share

Recommended Posts

Boas,

Tenho este codigo e quero passar por parametros, alguem me pode ajudar a ver o que que está errado?!!

   Dim SQL As String
                If EstadoRegisto = "Novo" Then
                    SQL = "INSERT INTO leitores (nome , morada, idade, telemovel, cod_postal, n_contribuinte, n_bi, localidade) VALUES (?,?,?,?,?,?,?,?)"
                Else
                    SQL = "Update leitores SET(nome=? ,morada=? ,idade=? , telemovel=? , cod_postal=? , n_contribuinte=? , n_bi=? , localidade=? )  VALUES(?,?,?,?,?,?,?,?)"
                End If

Cumps

Link to comment
Share on other sites

isto para mostrar

 Using connection As New OleDbConnection(myConnectionString)
                
                    Dim command As New OleDbCommand(Sql, connection)
                    command.Parameters.Add("nome", OleDbType.VarChar).Value = TextBox1.Text
                    command.Parameters.Add("morada", OleDbType.VarChar).Value = TextBox3.Text
                    command.Parameters.Add("idade", OleDbType.VarChar).Value = TextBox4.Text
                    command.Parameters.Add("telemovel", OleDbType.VarChar).Value = TextBox5.Text
                    command.Parameters.Add("cod_postal", OleDbType.VarChar).Value = TextBox6.Text
                    command.Parameters.Add("n_contribuinte", OleDbType.VarChar).Value = TextBox7.Text
                    command.Parameters.Add("n_bi", OleDbType.VarChar).Value = TextBox8.Text
                    command.Parameters.Add("localidade", OleDbType.VarChar).Value = TextBox9.Text
...

mesmo assim com o where e sem os (  e dá erro na mesma

Link to comment
Share on other sites

SQL = "UPDATE leitores SET nome=" & txtnome.Text & ", morada=" & txtmorada.Text & ", idade=" & txtidade.Text & ", telemovel=" & txtTele.Text & ", cod_postal=" & txtCodPostal.Text & ", n_contribuinte=" & txtNContri.Text & " ,n_bi=" & txtNbi.Text & " ,localidade=" & txtLocalidade.Text & " WHERE n_leitor=" & TextBox2.Text & " "

tentei com esse tambem nao deu, diz operador em falta :s

Link to comment
Share on other sites

SQL = "UPDATE leitores SET nome=" & txtnome.Text & ", morada=" & txtmorada.Text & ", idade=" & txtidade.Text & ", telemovel=" & txtTele.Text & ", cod_postal=" & txtCodPostal.Text & ", n_contribuinte=" & txtNContri.Text & " ,n_bi=" & txtNbi.Text & " ,localidade=" & txtLocalidade.Text & " WHERE n_leitor=" & TextBox2.Text & " "

tentei com esse tambem nao deu, diz operador em falta :s

Tentar colocar ' ' nos campos de texto:

ex: "update leitores set nome='" & txtnome.text & "',............

Oracle Certified Professional - AdministraçãoOracle Certified Professional - Pl/sqlMCPD - Microsoft Certified Professional DeveloperMCTS - Microsoft Certified Technology Specialist

Link to comment
Share on other sites

Boas

o update tem que tar em "(" pk esta a inserir um valor "string" e em cada parametro tem que introduzir " ' " para que o parametro seja introduzido na base de dados.

E convem fazer um replace para eles as  " ' " serem introduzidas direitas. 😛

mais alguma coisa eu tenho aki um exemplo para puder ajudar!

Link to comment
Share on other sites

Assim? :

SQL =  "(UPDATE leitores SET nome="  & txtnome.Text & ", morada=" & txtmorada.Text & ", idade=" &  txtidade.Text & ", telemovel=" &  txtTele.Text & ", cod_postal=" &  txtCodPostal.Text & ", n_contribuinte=" & txtNContri.Text  & " ,n_bi=" &  txtNbi.Text & " ,localidade=" &  txtLocalidade.Text & " WHERE n_leitor=" & TextBox2.Text  & ") "

? :S

Link to comment
Share on other sites

A tua query penso que esta correcta da seguinte maneira, e não precisas das " (  ) "

SQL =   "(UPDATE leitores SET nome='"   & txtnome.Text & "', morada='" & txtmorada.Text & "', idade=" &   txtidade.Text & ", telemovel=" &   txtTele.Text & ", cod_postal='" &   txtCodPostal.Text & "', n_contribuinte='" & txtNContri.Text   & "' ,n_bi=" &   txtNbi.Text & " ,localidade='" &   txtLocalidade.Text & "' WHERE n_leitor=" & TextBox2.Text   & ") "

Tenta desta forma, que á primeira vista esta correcto.

Se não funcionar tenta ver que o problema pode ser um conflito quando inseres os dados. Podendo ser o problema com algum tipo de dados ou a formatação de valores inseridos.

Link to comment
Share on other sites

Aqui esta o codigo da function que fiz para actualizar neste caso para uma biblioteca.

Public Shared Function actulizarLivros(ByVal id As Integer, ByVal nome As String, ByVal autor As String, ByVal ano As Date, ByVal editora As String, ByVal categoria As String, ByVal isbn As String) As Boolean
        Dim res As Boolean = False
        Dim cn As SqlConnection = Nothing
        Dim cmd As SqlCommand = Nothing
        Dim dr As SqlDataReader = Nothing
        Dim actualizou As Boolean = False

        Try
            cn = New SqlConnection(_cs)
            cn.Open()
            cmd = New SqlCommand("Select ID from Livro Where Nome = " & nome & ";")
            dr = cmd.ExecuteReader
            If dr.HasRows Then
                While dr.Read
                    If CType(dr.Item(0), Integer) <> id Then
                        actualizou = False
                    End If
                End While
            End If
            If actualizou Then
                Dim sb As New StringBuilder
                sb.Append("update Livro Set Nome='").Append(nome).Append("', Autor='").Append(autor).Append("', AnoPublicacao='").Append(ano).Append("', Editora='").Append(editora).Append("', TipodeLivro='").Append(categoria).Append("', ISBN='").Append(isbn).Append(" where ID=").Append(id).Append(";")
                cmd = New SqlCommand(sb.ToString, cn)
                cmd.ExecuteNonQuery()
                res = True
            End If
        Catch ex As Exception
            clsTools.sendTolLog(ex.Message.ToString)
        Finally
            If Not dr Is Nothing Then
                dr.Close()

            End If
            If Not cn Is Nothing Then
                cn.Close()
            End If
        End Try
        Return res
    End Function

Agora vou colocar aki o problema da normalizaçao de strings e no meu caso do sentolog

Public Shared Sub sendTolLog(ByVal mensagem As String)
        'escrever o erro no FX de log
        Dim errorLog As StreamWriter = File.AppendText(_fx)
        Dim textoDeErro As New StringBuilder
        textoDeErro.Append(My.Computer.Clock.LocalTime).Append(" /\ ").Append(clsWork.Utilizador).Append(" /\ ").Append(mensagem.ToString)
        errorLog.WriteLine(textoDeErro.ToString)
        errorLog.Close()
    End Sub
   
Public Shared Function normalizarstrings(ByVal valor As String)

        Return valor.Replace("'", "''")

    End Function
Link to comment
Share on other sites

Eu acho que o código está bem, mas estou com certos problemas que não vejo onde pode estar a dar  o erro!

Por exemplo eu tenho campos como nome, morada e localidade, então em certos leitores eu para mudar o nome tenho de mudar tambem a localidade e morada para ele aceitar mudar os dados! :S

Por exemplo na morada meto o nome de uma rua e ele diz capacidade excedida, quando os valores na base de dados estão com 255 caracteres e nao estou a limitar esses campos no vb:S

Outra coisa estupida, coloco a localidade tipo "AAA" e aparece a idade do leitor, e não tenho nada a apontar do leitor para aquele campo? :S

oOOO

Link to comment
Share on other sites

A tua query penso que esta correcta da seguinte maneira, e não precisas das " (  ) "

SQL =   "(UPDATE leitores SET nome='"   & txtnome.Text & "', morada='" & txtmorada.Text & "', idade=" &   txtidade.Text & ", telemovel=" &   txtTele.Text & ", cod_postal='" &   txtCodPostal.Text & "', n_contribuinte='" & txtNContri.Text   & "' ,n_bi=" &   txtNbi.Text & " ,localidade='" &   txtLocalidade.Text & "' WHERE n_leitor=" & TextBox2.Text   & ") "

Tenta desta forma, que á primeira vista esta correcto.

Se não funcionar tenta ver que o problema pode ser um conflito quando inseres os dados. Podendo ser o problema com algum tipo de dados ou a formatação de valores inseridos.

Como o PmMaster disse está a dar bem!!!

Muito Obrigado!!!!!

Cumps

Link to comment
Share on other sites

Por exemplo na morada meto o nome de uma rua e ele diz capacidade excedida, quando os valores na base de dados estão com 255 caracteres e nao estou a limitar esses campos no vb:S

Para este problema a textbox tem a propriedade Maxlenght, e que podes definir quantos caracteres queres que ela aceite 😛

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.