View Full Version : sql... :s


Py_
06-03-2008, 18:42
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.



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_

Bluestrattos
06-03-2008, 19:35
é 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 ?

Py_
07-03-2008, 00:55
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_

Feiticeiro
07-03-2008, 01:05
Não falta " no final da sintaxe?

Py_
07-03-2008, 10:39
...Where n_doente=" & txtndoente.Text

Não. No final não tem porque estou a concatenar a string com uma textbox...

mOrSa
07-03-2008, 11:58
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

Py_
07-03-2008, 12:36
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

Boxxer
07-03-2008, 16:57
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")?

Py_
07-03-2008, 17:03
Boa pergunta ñ tinha pensado nisso... Vou experimentar... obrigado...

Py_
07-03-2008, 17:20
Era mesmo uma palavra reservada... Obrigadíssimo pela ajuda...

Cumprimentos,
Py_

Boxxer
07-03-2008, 18:48
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 ;)