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

Chamuanza

Erro de sintaxe na instrução UPDATE.

Mensagens Recomendadas

Chamuanza    2
Chamuanza

Estou a ficar  :wallbash:

Ao tentar actualizar um registo aparece-me o erro "Erro de sintaxe na instrução UPDATE"

 Private Sub GuardarAlteraçãoToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GuardarAlteraçãoToolStripMenuItem.Click



        'Actualizar Registo
        Dim ConnectionString As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Application.StartupPath & "\ChamuanzasNet.mdb")

        Dim Busca As String = "UPDATE ListaChamuanzas SET [Nome] = @Nome, [Apelido] = @Apelido, [Morada] = @Morada, [Localidade] = @Localidade, [Cidade] = @Cidade, [CodigoPostal] = @CodigoPostal, [idaUltramar] = @IdaUltramar, [RegressoUltramar] = @RegressoUltramar, [Telefone] = @Telefone, [Telemovel] = @Telemovel, [Email] = @Email, [Especialidade] = @Especialidade, WHERE Id = @Id"

        Dim command As New OleDbCommand(Busca, ConnectionString)

        command.Parameters.Add("@Nome", OleDbType.VarChar).Value = Me.DataGridView1.Item(1, Me.DataGridView1.CurrentRow.Index).ToString
        command.Parameters.Add("@Apelido", OleDbType.VarChar).Value = Me.DataGridView1.Item(2, Me.DataGridView1.CurrentRow.Index).ToString
        command.Parameters.Add("@Morada", OleDbType.VarChar).Value = Me.DataGridView1.Item(3, Me.DataGridView1.CurrentRow.Index).ToString
        command.Parameters.Add("@Localidade", OleDbType.VarChar).Value = Me.DataGridView1.Item(4, Me.DataGridView1.CurrentRow.Index).ToString
        command.Parameters.Add("@Cidade", OleDbType.VarChar).Value = Me.DataGridView1.Item(5, Me.DataGridView1.CurrentRow.Index).ToString
        command.Parameters.Add("@CodigoPostal", OleDbType.VarChar).Value = Me.DataGridView1.Item(6, Me.DataGridView1.CurrentRow.Index).ToString
        command.Parameters.Add("@IdaUltramar", OleDbType.VarChar).Value = Me.DataGridView1.Item(7, Me.DataGridView1.CurrentRow.Index).ToString
        command.Parameters.Add("@RegressoUltramar", OleDbType.VarChar).Value = Me.DataGridView1.Item(8, Me.DataGridView1.CurrentRow.Index).ToString
        command.Parameters.Add("@Telefone", OleDbType.VarChar).Value = Me.DataGridView1.Item(9, Me.DataGridView1.CurrentRow.Index).ToString
        command.Parameters.Add("@Telemovel", OleDbType.VarChar).Value = Me.DataGridView1.Item(10, Me.DataGridView1.CurrentRow.Index).ToString
        command.Parameters.Add("@Email", OleDbType.VarChar).Value = Me.DataGridView1.Item(11, Me.DataGridView1.CurrentRow.Index).ToString
        command.Parameters.Add("@Especialidade", OleDbType.VarChar).Value = Me.DataGridView1.Item(12, Me.DataGridView1.CurrentRow.Index).ToString

        ' Actualiza apenas os dados do cliente que consta na Textbox
        command.Parameters.Add("@Id", OleDbType.VarChar).Value = Me.DataGridView1.Item(0, Me.DataGridView1.CurrentRow.Index).ToString
        ConnectionString.Open()

        Dim x As Integer = command.ExecuteNonQuery()

        If x < 1 Then
            MessageBox.Show("Erro ao actualizar", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Else
            MessageBox.Show("Actualizado com sucesso!", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If

        ConnectionString.Close()
        command = Nothing
    End Sub

Já bati varias vezes o codigo e não descortino o erro.

Alguem pode dar uma vista de olhos a fim de dar com o erro?

Obrigado

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Chamuanza    2
Chamuanza

Oi Caça Obrigado pela dica deve ser de estar a algum tempo a bater tecla

Mas agora da-me erro na actualização, mas nãome diz qual

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ribeiro55    44
ribeiro55

Daqui para a frente pode ser muita coisa.

Reparo de repente que estás a indicar VarChar para todos os parâmetros.

Deverás indicar em conformidade com o tipo de dados existente na tabela.

Sugiro step-debug para perceberes que dados estão efectivamente a ser passados para os parâmetros.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bioshock    170
bioshock

Todos os campos dão do tipo texto a excepção do ID que é numerico

Exacto..e tu colocas:

command.Parameters.Add("@Id", OleDbType.VarChar).Value

Não te parece estar aí algo errado..?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Chamuanza    2
Chamuanza

Testei assim e dá erro

 command.Parameters.Add("@Id", OleDbType.Numeric).Value = Me.DataGridView1.Item(0, Me.DataGridView1.CurrentRow.Index).Value

"O campo é demasiado pequeno para aceitar o volume de dados que tentou adicionar. Tente inserir ou colar menos dados."

Se retirar o ultimo Value da o erro

  command.Parameters.Add("@Id", OleDbType.Numeric).Value = Me.DataGridView1.Item(0, 
Me.DataGridView1.CurrentRow.Index)

Failed to convert parameter value from a DataGridViewTextBoxCell to a Decimal.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bioshock    170
bioshock

Escreve:

MsgBox(Me.DataGridView1.Item(0, Me.DataGridView1.CurrentRow.Index).Value)

Num button qualquer e vê se isso te está a devolver o que tu queres.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bioshock    170
bioshock

Então em vez de alterares os campos todos, altera apenas dois ou três para verificares onde mora o problema. Tens de ir por exclusões de parte.

Já agora atenção também à seguinte linha:

command.Parameters.Add("@IdaUltramar", OleDbType.VarChar).Value = Me.DataGridView1.Item(7, Me.DataGridView1.CurrentRow.Index).ToString

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Chamuanza    2
Chamuanza

Oi bioshock

Segui o teu conselho e fiz apenas para um campo:

 'Actualizar Registo
        Dim ConnectionString As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Application.StartupPath & "\ChamuanzasNet.mdb")

        Dim Busca As String = "UPDATE ListaChamuanzas SET [Nome] = @Nome WHERE Id = @Id" 
Dim command As New OleDbCommand(Busca, ConnectionString)

        command.Parameters.Add("@Nome", OleDbType.VarChar).Value = Me.DataGridView1.Item(1, Me.DataGridView1.CurrentRow.Index)

command.Parameters.Add("@Id", OleDbType.VarChar).Value = TextBox1.Text.ToString

Com VarChar ou Numeric, ou Variant da erro "Failed to convert parameter value from a DataGridViewTextBoxCell to a String.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Chamuanza    2
Chamuanza

Olá bioshock

Fui tentar alterar outro campo "Apelido" e o curioso é que depois de proceder a alteração que validou apareceu na celula correspondente este texto "DataGridViewTextBoxCell { ColumnIndex=2, RowIndex=4 }"

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bioshock    170
bioshock

No código que colocaste em cima esqueceste de referir o .value

Coloca assim:

 command.Parameters.Add("@Nome", OleDbType.VarChar).Value = Me.DataGridView1.Item(1, Me.DataGridView1.CurrentRow.Index).Value

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Chamuanza    2
Chamuanza

Isto não para de dar problemas

Agora aceita a Actualização mas não grava na BD, acho que tenho aqui um problema com o caminho da BD

A BD encontra-se na pasta Debug mas o ChamuanzasNetDataSet.xsd está em D:\ChamuanzasNet

Será por causa disto?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Chamuanza    2
Chamuanza

Já fui e não está a actualizar, por isso e que digo que está aqui um berbicacho, não sei como nem porquê

Já alterei  o caminho

 'Actualizar Registo
        Dim ConnectionString As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D:\ChamuanzasNet\bin\Debug\ChamuanzasNet.mdb")

e não actualiza

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ribeiro55    44
ribeiro55

Se achas que pode ser disso, utiliza antes:

Dim ConnectionString As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & My.Application.Info.DirectoryPath & "\ChamuanzasNet.mdb")

Assim garantes que estás no sítio certo.

Para teres a certeza de qual é o ficheiro que está a ser utilizado, basta-te colocar:

MsgBox(My.Application.Info.DirectoryPath)

E verificas se é o mesmo caminho por onde tens estado à espera de actualizações.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Chamuanza    2
Chamuanza

Oi Caça Bom dia

Vou fazer como dizes mas antes quero passar esta informação.

Fiz a alteração de um dos registos em dois campos para teste, validou a alteração, saio do Form e entro e a alteração está na Datagrid, mas vou a BD e não está a alteração feita no respectivo registo.

Isto pode ser?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ribeiro55    44
ribeiro55

Pode, se estiveres a olhar para a base de dados errada.

Faz o que te disse para teres a certeza.

E já agora, não me chames Caça. Guarda isso para o Caça mesmo :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Chamuanza    2
Chamuanza

Desculpa lá esta troca de nome

Parace que resultou.

Vou paratir para a construção do form para inserir novo registo e utilizar o mesmo caminho e verificar se fica tudo em ordem

Obrigado

Partilhar esta mensagem


Link 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 a nossa Política de Privacidade