sql... :s

Py_

Power Member
Boas, estou a criar uma consulta em sql para aceder a uma base de dados através do vb 2005 mas ela está constantemente a dar erro e não consigo perceber a razão.

A consulta é :

UPDATE TabDoente
set frkestado_civil=@frkestado_civil, data_obervacao=@data_obervacao, entrevistador=@entrevistador, data_nascimento=@data_nascimento, local=@local, origem=@origem, sexo=@sexo, ocupacao=@ocupacao, anos_instrucao=@anos_instrucao, reforma=@reforma, idade_reforma=@idade_reforma
Where n_doente=" & txtndoente.Text

O parametro passado no final pela caixa de texto é nnumérico por isso não precisa de nenhuma formatação especial.

os outros parametros estão todos bem formatados.

Código:
            dbCmd.Parameters.Add("@frkestado_civil", OleDbType.VarChar)
            dbCmd.Parameters("@frkestado_civil").Value = (cbestadocivil.SelectedItem).ToString

            dbCmd.Parameters.Add("@data_obervacao", OleDbType.Date)
            dbCmd.Parameters("@data_obervacao").Value = CDate(txtdataobservacao.Text)

            dbCmd.Parameters.Add("@entrevistador", OleDbType.VarChar)
            dbCmd.Parameters("@entrevistador").Value = (txtnentrevistador.Text).ToString

            dbCmd.Parameters.Add("@data_nascimento", OleDbType.Date)
            dbCmd.Parameters("@data_nascimento").Value = CDate(txtdatadenascimento.Text)

            dbCmd.Parameters.Add("@local", OleDbType.VarChar)
            dbCmd.Parameters("@local").Value = (caixalocal.SelectedItem).ToString

            dbCmd.Parameters.Add("@origem", OleDbType.VarChar)
            dbCmd.Parameters("@origem").Value = (caixaorigem.SelectedItem).ToString

            dbCmd.Parameters.Add("@sexo", OleDbType.VarChar)
            dbCmd.Parameters("@sexo").Value = (caixaSexo.SelectedItem).ToString

            dbCmd.Parameters.Add("@ocupacao", OleDbType.VarChar)
            dbCmd.Parameters("@ocupacao").Value = txtocupacao.Text

            dbCmd.Parameters.Add("@anos_instrucao", OleDbType.Numeric)
            dbCmd.Parameters("@anos_instrucao").Value = CInt(txtinstrucao.Text)

            dbCmd.Parameters.Add("@reforma", OleDbType.Integer)
            dbCmd.Parameters("@reforma").Value = reforma

            dbCmd.Parameters.Add("@idade_reforma", OleDbType.Integer)
            dbCmd.Parameters("@idade_reforma").Value = idade_reforma



A executar o erro é o seguinte:

"Erro de sintaxe na instrução UPDATE"


sera que alguém me pode ajudar?

cumprimentos,
Py_
 
é erro de escrita, ou existe mesmo um campo chamado "data_obervacao" em vez de "data_observacao" ?

já tentaste executar a query directamente no motor, em vez de a executares através do vb ?
 
Foi erro na base de dados, o campo está mesmo com esse nome... xeguei a conclusão depois de fazer o post que o erro é do campo local mas já conferi com a base de dados, o nome está correcto, executo a query directamente e funcionar correctamente, executo a query no vb sem o campo local e funciona correctamente. Isolo a query com o campo "local" e não funciona... os parametros estão bem definidos, os nomes estão correctos, o caminho da base de dados também, os nomes de tabelas, campos está tudo correcto.... Já aconteceu alguma vez?? Estou mesmo a entrar em paranóia porque o prazo de entrega está a acabar e não percebo o que se passa.... :s...

Agradeço muito a quem puder ajudar...

Cumprimentos,
Py_
 
...Where n_doente=" & txtndoente.Text

Não. No final não tem porque estou a concatenar a string com uma textbox...
 
O parametro passado no final pela caixa de texto é nnumérico por isso não precisa de nenhuma formatação especial.
Na minha maneira de ver, esse é o pior erro que podes fazer! :P É uma maravilha para os amantes do SQL Injection! :P
Comentários à parte, suponho que estejas a colocar a query do "update bla bla bla" em
dbCmd.CommandText = "Update..." . O que eu sugiro é que faças um breakpoint na instrução de dbCmd.CommandText, fazeres um watch e copiares a query directamente para o Access.

Outra coisa que podes fazer é dbCmd.Parameteres.AddWithValue("@parametro", Valor_Parametro) e assim escusas de especificar qual o tipo. Ele gere isso automaticamente.
Outra coisa, verifica se as datas que estás a passar para a BD estão correctas. Tenho problemas quando me esqueço disso. No caso das datas serem nulas um DBNull.Value como valor do parâmetro.
Espero ter ajudado. 1abraço
 
dbCmd.Parameteres.AddWithValue("@parametro", Valor_Parametro) era komo usava anteriormente, defini desta forma que era para especificar melhor para ver se era o vb que não estava a fazer confusão de tipos. as datas estão a paxar correctamente, como já dixe é mesmo no parametro valor mas ñ consigo encontrar o erro...

abraço
 
O nome "local" não será uma palavra reservada ou algo do estilo?
Tipo... o problema não será mesmo o nome (a label, o string "local")?
 
Eu ando muito enferrujado no VB (trabalho com RPG e COBOL em AS400), mas se calhar esse tipo de abstracção até deu jeito para me "distanciar" do problema :P

Como o único problema, pela tua descrição, era com esse campo em concreto e estava tudo bem definido, ocorreu-me que pudesse ser a própria palavra... foi um tiro no escuro, mas ainda bem que chegou ao alvo ;)
 
Back
Topo