ERRO OVERFLOW 6 UPDATE FIREBIRD
Clico no botão para salvar... e retorna o seguinte erro:
Run-time error [ô]6[ô]
Overflow
Debugo, e ele me arremete a linha de código do item ADMISSÃO.
Segue o Código e a seta indicando onde ocorre o erro (imagino, também, que as linhas abaixo com o mesmo tipo de rotina devem apresentar erros similares...)
Citação:
sSQL = [Ô][Ô]
sSQL = sSQL & [Ô]UPDATE FUNCIONARIOS SET NOME = [ô][Ô] & txtNome.Text & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]ENDERECO = [ô][Ô] & cboEndereco.Text & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]NUMERO = [ô][Ô] & txtNumero.Text & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]BAIRRO = [ô][Ô] & cboBairro.Text & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]CIDADE = [ô][Ô] & cboCidade.Text & [Ô][ô][Ô]
sSQL = sSQL & [Ô]TELEFONE = [ô][Ô] & IIf(txtTel.Text = [Ô][Ô], Empty, txtTel.Text) & [Ô][ô][Ô]
sSQL = sSQL & [Ô]CELULAR = [ô][Ô] & IIf(txtCel.Text = [Ô][Ô], Empty, txtCel.Text) & [Ô][ô][Ô]
sSQL = sSQL & [Ô]ADMISSAO = [ô][Ô] & IIf(txtAdmissao.Text = [Ô][Ô], Empty, Format(txtAdmissao.Text, [Ô]yyyy/mm/dd[Ô])) & [Ô][ô][Ô]
sSQL = sSQL & [Ô]DEMISSAO = [ô][Ô] & IIf(txtDemissao.Text = [Ô][Ô], Empty, Format(txtDemissao.Text, [Ô]yyyy/mm/dd[Ô])) & [Ô][ô][Ô]
sSQL = sSQL & [Ô]DEMISSAO = [ô][Ô] & IIf(chkFuncionario.Value = vbChecked, 1, 0) & [Ô][ô][Ô]
sSQL = sSQL & [Ô]DEMISSAO = [ô][Ô] & txtObservacao.Text & [Ô][ô][Ô]
sSQL = sSQL & [Ô]WHERE CODIGO = [ô][Ô] & txtCodigo.Text & [Ô][ô][Ô]
With ConConexao
.ActiveConnection = CONEXAO
.CommandType = adCmdText
.CommandText = sSQL
CNN.BeginTrans
.Execute
CNN.CommitTrans
End With
Ajudem o cara com amnésia!
sSQL = sSQL & [Ô]ADMISSAO = [Ô] & IIf(txtAdmissao.Text = [Ô][Ô], [Ô]NULL[Ô],[Ô][ô][Ô] & Format(txtAdmissao.Text, [Ô]yyyy/mm/dd[Ô]) & [Ô][ô][Ô])
sSQL = sSQL & [Ô]DEMISSAO = [Ô] & IIf(txtDemissao.Text = [Ô][Ô], [Ô]NULL[Ô],[Ô][ô][Ô] & Format(txtDemissao.Text, [Ô]yyyy/mm/dd[Ô]) & [Ô][ô][Ô])
... meu amigo, obrigado pela presteza, mas.... não funcionou não....
O erro continua o mesmo.
Pensei que pudesse ser um erro na posição das aspas, fiz a modificação também, e nada...
Estou no 0 a 0 ainda...
Agradeço a observação... porém são situações diferentes, que para não causar confusão, pede-se trabalhar separadamente...
Sua observação foi levada em consideração, mas quero evitar o que acontece muito aqui: começam a falar de banco de dados e termina falando de ocx... Isso prejudica na busca por possÃveis erros que outros usuários já postaram, e dificulta encontrar algo que ajude nos mesmos...
Sou um usuário que sempre pesquisa antes de postar algo... ao contrário do que muitos não fazem...
Acho que antes de me abordar de tal forma, deve-se apurar tópicos com o mesmo assunto, postado por usuários diferentes...
Novamente, repito, pode ser a mesma query, porém são situações diferentes e pede-se, para uma melhor organização, ser trabalhada separadamente.
Estou certo de que posso contar com sua compreensão...
... A respeito de parametrização....
eu nunca trabalhei de tal forma, e se fiz, foi adquirida por meio de exemplos (mas sem ter a noção da nomenclatura [ô]parametrização[ô])
Serei grato, se puder exemplificar baseado na minha linha de código para que eu compreenda melhor, agradecerei!
Dim cn As New ADODB.Connection
Set cn = New ADODB.Connection
cn.ConnectionString = [Ô]sua connectionstring aqui[Ô]
Dim cmd As New ADODB.Command
cmd.ActiveConnection = cn
cmd.CommandText = [Ô]Update funcionarios set Nome = @Nome, Endereco = @Endereco[Ô]
Dim parNome As New ADODB.Parameter
Set parNome = New ADODB.Parameter
parNome.Value = [Ô]valor para nome[Ô]
parNome.Name = [Ô]@Nome[Ô]
cmd.Parameters.Append parNome
[ô]outros parametros aqui
cmd.Execute
Tentei fazer isso antes de chegar ao produto final que postei acima.... agradeço, novamente, a presteza, porém não obtive êxito no prazo de execução.
A transferência dos outros dados, vinculados a esta query, tornaram-se mais lenta; e em grande escala (o propósito do meu projeto) demandará um prazo maior - não sendo atrativo para meu cliente.
Não sei ao certo o que causa esta lentidão no sistema - (e confesso que para o presente momento não posso averiguar pelo prazo de entrega), mas gostaria muito de te [Ô]explorar[Ô] um pouco no estudo da forma que implementei.
Acredito que meu pecado (erro) acima seja primário... mas como estou de cabeça quente não consigo enxergá-lo.
Conto com sua contribuição.
OBS: não descartei sua resposta, apenas havia feito desta forma e me retornou uma transação de dados que demanda um prazo maior. Certo é que assim que entregar esta versão, a atualização de revisão que sempre proponho aos meus clientes (e recebo para isso... rs), buscarei localizar a causa desta demora... mas no mais....é o que tenho para o presente.
sSql = [Ô]UPDATE FUNCIONARIOS SET NOME = [ô][Ô] & txtNome.Text & [Ô][ô],ENDERECO = [ô][Ô] & cboEndereco.Text & [Ô][ô],NUMERO = [ô][Ô] & txtNumero.Text & [Ô][ô],BAIRRO = [ô][Ô] & cboBairro.Text & [Ô][ô],CIDADE = [ô][Ô] & cboCidade.Text & [Ô][ô],TELEFONE = [ô][Ô] & txtTel.Text & [Ô][ô],CELULAR = [ô][Ô] & txtCel.Text & [Ô][ô],ADMISSAO = [ô][Ô] & Format(txtAdmissao.Text, [Ô]yyyy/mm/dd[Ô]) & [Ô][ô] WHERE CODIGO = [ô][Ô] & txtCodigo.Text
Não use,
sSQL = sSQL & [Ô]DEMISSAO = [Ô] & IIf(txtDemissao.Text = [Ô][Ô], [Ô]NULL[Ô],[Ô][ô][Ô] & Format(txtDemissao.Text, [Ô]yyyy/mm/dd[Ô]) & [Ô][ô][Ô])
De ouvidos ao Famigerado.
Ele é um Deus do Vb.
sSQL = [Ô][Ô]
sSQL = sSQL & [Ô]UPDATE FUNCIONARIOS SET NOME = [ô][Ô] & txtNome.Text & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]ENDERECO = [ô][Ô] & cboEndereco.Text & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]NUMERO = [ô][Ô] & txtNumero.Text & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]BAIRRO = [ô][Ô] & cboBairro.Text & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]CIDADE = [ô][Ô] & cboCidade.Text & [Ô][ô][txt-color=#e80000],[/txt-color][Ô]
sSQL = sSQL & [Ô]TELEFONE = [ô][Ô] & IIf(txtTel.Text = [Ô][Ô], [Ô]Null[Ô], txtTel.Text) & [Ô][ô][txt-color=#e80000],[/txt-color][Ô]
sSQL = sSQL & [Ô]CELULAR = [ô][Ô] & IIf(txtCel.Text = [Ô][Ô], [Ô]Null[Ô], txtCel.Text) & [Ô][ô][txt-color=#e80000],[/txt-color][Ô]
sSQL = sSQL & [Ô]ADMISSAO = [ô][Ô] & IIf(txtAdmissao.Text = [Ô][Ô], [Ô]Null[Ô], Format(txtAdmissao.Text, [Ô]yyyy/[txt-color=#e80000]MM[/txt-color]/dd[Ô])) & [Ô][ô][txt-color=#e80000],[/txt-color][Ô]
sSQL = sSQL & [Ô][txt-color=#e80000]DEMISSAO[/txt-color] = [ô][Ô] & IIf(txtDemissao.Text = [Ô][Ô], [Ô]Null[Ô], Format(txtDemissao.Text, [Ô]yyyy/[txt-color=#e80000]MM[/txt-color]/dd[Ô])) & [Ô][ô][txt-color=#e80000],[/txt-color][Ô]
sSQL = sSQL & [Ô][txt-color=#e80000]DEMISSAO[/txt-color] = [ô][Ô] & IIf(chkFuncionario.Value = vbChecked, 1, 0) & [Ô][ô][txt-color=#e80000],[/txt-color][Ô]
sSQL = sSQL & [Ô][txt-color=#e80000]DEMISSAO[/txt-color] = [ô][Ô] & txtObservacao.Text & [Ô][ô][Ô]
sSQL = sSQL & [Ô] WHERE CODIGO = [ô][Ô] & txtCodigo.Text & [Ô][ô][Ô]
repare os pontos em vermelho e veja o que encontrei de inconsistente.
e na frente do WHERE deve haver um espaço para que a clausula seja validada corretamente!
qualquer duvida poste ai
ainda não pude testar, mas creio que este erro ainda não foi o fator determinante, pois ele joga na linha onde está o campo de Admissão... o código que você me mostrou o erro ainda não foi simulado pelo VB,...
mas averiguarei.. e retorno....
Obrigado!
Habilite o seu Immediate (Ctrl + G)
Coloque um BreakPoint na linha ADMISSAO
quando o sistema parar vai abrir a janela do Immediate logo abaixo. Faça o seguinte
copie a expressão [txt-color=#e80000]IIf(txtAdmissao.Text = [Ô][Ô], [Ô]Null[Ô], Format(txtAdmissao.Text, [Ô]yyyy/MM/dd[Ô]))[/txt-color]
e no Immediate você cola com um ponto de interrogação na frente. Vai ficar assim.
[txt-color=#e80000]?[/txt-color]IIf(txtAdmissao.Text = [Ô][Ô], [Ô]Null[Ô], Format(txtAdmissao.Text, [Ô]yyyy/MM/dd[Ô]))
e dê um ENTER
veja o resultado que vai dar
Caso haja a mensagem de erro OverFlow é porque a expressão IIF esta com problema e pode ser o FORMAT