ERRO OVERFLOW 6 UPDATE FIREBIRD

ADRIANOM 14/01/2014 09:39:06
#433008
Olha eu aí.... Pesquisei no google mas nada... e deu um branco agora...


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!
MARCELO.TREZE 14/01/2014 10:35:16
#433010
Eu acredito que quando se trata de data voce deva colocar NULL e não empty, teste esta alteração.

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[Ô]) & [Ô][ô][Ô])
ADRIANOM 14/01/2014 11:18:46
#433013
Marcelo Treze...

... 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...
KERPLUNK 14/01/2014 11:24:35
#433015
Você está a uns 4 tópicos na mesma query e não está chegando a lugar algum. Mesmo assim, vou repetir o que já disse: Use parametrização e não concatenação.
ADRIANOM 14/01/2014 11:32:40
#433018
Kerplunk...

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!
KERPLUNK 14/01/2014 15:36:10
#433038
  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
ADRIANOM 14/01/2014 15:47:38
#433044
KERPLUNK

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.
OMAR2011 14/01/2014 16:05:24
#433045
Complete, mas coloque deste jeito.
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.
FILMAN 14/01/2014 18:13:55
#433057
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
ADRIANOM 15/01/2014 14:19:48
#433090
Filman,

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!
FILMAN 15/01/2014 15:07:27
#433096
Resposta escolhida
Faz um teste assim o problema deve estar no IIF.

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
Página 1 de 2 [19 registro(s)]
Tópico encerrado , respostas não são mais permitidas