Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

hugoee

Erro a fazer Update por parametros (Resolvido)

Mensagens Recomendadas

hugoee

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

não te posso ajudar....pois eu é mais postgreSQL, mas...os espaços não estarão mal??? há sitios que tens espaçamentos diferentes...

CUMPS


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jpaulino

O primeiro está bem (à partida) o segundo está errado. O sintaxe correcto é:

UPDATE leitores SET nome=?, morada=? ... WHERE ID=?

De qualquer forma em ambos os caso não estás a mostrar como depois indicas os valores dos parametros.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jpaulino

não te posso ajudar....pois eu é mais postgreSQL, mas...os espaços não estarão mal??? há sitios que tens espaçamentos diferentes...

CUMPS

Isso não interessa

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
hugoee

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
hugoee

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
renafi

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmaster

O Refani disse para pores plicas  '    '  em todos os campos que forem texto. por exemplo:

nome=  '  "  & txtnome.Text & "  '

Espero não ter entendido mal  :cheesygrin:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Xetly

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. :P

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
hugoee

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmaster

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Xetly

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
hugoee

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
hugoee

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmaster

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 :P

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jpaulino

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

Muito Obrigado!!!!!

Cumps

Então experimenta colocar no nome O'Brien

Usando parameters fica muito mais organizado e resolve vários problemas com datas, números, etc. Fazer concatenação de strings dessa forma não é de todo recomendado!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jpaulino

ok, com esse O'Brien

da erro na uniao das strings =((

:cheesygrin:

Agora experimenta mudar o computador para Inglês (por exemplo) e vê se grava bem as datas/números com os novos formatos?

E depois, para completar o teste, usas parameters e vê se os problemas continuam.

Perde um pouco de tempo porque vale a pena :P

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.