UPDATE EM TABELA

JPAULO101 27/05/2010 17:18:12
#342987
Boa tarde amigos!

pessoal é o seguinte, quando gravo um novo registro na tabela, deixando os campos [Ô]MANUTENCAO E REPARO[Ô], como vazio, e tento fazer alguma alteração em outro campo vai dereto para linha de erro, mais se preencho os dois campos que são do tipo Data/Hora, vaz a alteração normal, é como não aceitasse alterar com esses dois campos vazio. Alguém pode mim ajuda a resolver esse probleminha. Segue o código.

Private Sub cmdAlterar_Click()

Dim sSQL As String
On Error GoTo erro

Msg1 = [Ô][Ô]
Msg1 = Msg1 & [Ô] ** AVISO ** [Ô] & vbNewLine & vbNewLine
Msg1 = Msg1 & [Ô]Confirmar alteração do cadastro [Ô] & Format(rs.Fields([Ô]codigo[Ô]), [Ô]000[Ô]) & [Ô].[Ô] & vbNewLine
If MsgBox(Msg1, vbInformation + vbYesNo, [Ô]Pocket[Ô]) = vbYes Then

con.BeginTrans
sSQL = sSQL & [Ô]UPDATE tblpocket SET [Ô]
sSQL = sSQL & [Ô]sml=[ô][Ô] & atxtSml & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]escritorio=[ô][Ô] & atxtEscritorio & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]aparelho=[ô][Ô] & atxtAparelho & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]sn=[ô][Ô] & atxtsn & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]imei=[ô][Ô] & atxtImei & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]chiptimnovo=[ô][Ô] & atxtChip & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]responsavel=[ô][Ô] & atxtResp & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]manutencao=#[Ô] & Format(atxtManut, [Ô]mm/dd/yyyy[Ô]) & [Ô]#,[Ô]
sSQL = sSQL & [Ô]reparo=#[Ô] & Format(atxtReparo, [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô]
sSQL = sSQL & [Ô] WHERE codigo=[Ô] & atxtCodigo & [Ô];[Ô]
con.Execute sSQL
con.CommitTrans
MsgBox [Ô]Cadastro alterado com sucesso![Ô]
End If
Exit Sub
erro:
con.RollbackTrans
MsgBox [Ô]Ocorreu um erro ao alterar o cadastro[Ô] & vbCrLf & Err.Description, vbExclamation, [Ô]Erro[Ô]

End Sub
JONATHANSTECKER 27/05/2010 17:23:47
#342988
Você tem que tratar o campo NULL,
tente dessa forma...

Private Sub cmdAlterar_Click()

Dim sSQL As String
On Error GoTo erro

Msg1 = [Ô][Ô]
Msg1 = Msg1 & [Ô] ** AVISO ** [Ô] & vbNewLine & vbNewLine
Msg1 = Msg1 & [Ô]Confirmar alteração do cadastro [Ô] & Format(rs.Fields([Ô]codigo[Ô]), [Ô]000[Ô]) & [Ô].[Ô] & vbNewLine
If MsgBox(Msg1, vbInformation + vbYesNo, [Ô]Pocket[Ô]) = vbYes Then

con.BeginTrans
sSQL = sSQL & [Ô]UPDATE tblpocket SET [Ô]
sSQL = sSQL & [Ô]sml=[ô][Ô] & atxtSml & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]escritorio=[ô][Ô] & atxtEscritorio & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]aparelho=[ô][Ô] & atxtAparelho & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]sn=[ô][Ô] & atxtsn & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]imei=[ô][Ô] & atxtImei & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]chiptimnovo=[ô][Ô] & atxtChip & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]responsavel=[ô][Ô] & atxtResp & [Ô][ô],[Ô]
sSQL = sSQL & IIf(atxtManut.Text = [Ô][Ô], [Ô]Null,[Ô],[Ô]#[Ô] & [Ô]manutencao=#[Ô] & Format(atxtManut, [Ô]mm/dd/yyyy[Ô]) & [Ô]#,[Ô])
sSQL = sSQL & IIf(atxtReparo.Text = [Ô][Ô], [Ô]Null,[Ô],[Ô]#[Ô] & [Ô]reparo=#[Ô] & Format(atxtReparo, [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô])
sSQL = sSQL & [Ô] WHERE codigo=[Ô] & atxtCodigo & [Ô];[Ô]
con.Execute sSQL
con.CommitTrans
MsgBox [Ô]Cadastro alterado com sucesso![Ô]
End If
Exit Sub
erro:
con.RollbackTrans
MsgBox [Ô]Ocorreu um erro ao alterar o cadastro[Ô] & vbCrLf & Err.Description, vbExclamation, [Ô]Erro[Ô]

End Sub
JPAULO101 27/05/2010 17:55:15
#342992
OLá JONATHANSTECKER, fiz do jeito que passou, mais continua dando o erro.
EDERMIR 27/05/2010 18:14:34
#342997
Resposta escolhida
Faça desta foma (é diferente da anterior):


 sSQL = sSQL & [Ô]chiptimnovo=[ô][Ô] & atxtChip & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]responsavel=[ô][Ô] & atxtResp & [Ô][ô],[Ô]
sSQL = sSQL & [Ô]manutencao=[Ô] & IIf(atxtManut.Text = [Ô][Ô], [Ô]Null[Ô],[Ô]#[Ô] & Format(atxtManut, [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô]) & [Ô],[Ô]
sSQL = sSQL & [Ô]reparo=[Ô] & IIf(atxtReparo.Text = [Ô][Ô], [Ô]Null[Ô],[Ô]#[Ô] & Format(atxtReparo, [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô])
sSQL = sSQL & [Ô] WHERE codigo=[Ô] & atxtCodigo & [Ô];[Ô]
con.Execute sSQL


Note que o último NULL não tem a vírgula no final e as palavras NULL não estão entre [Ô]#[Ô].
MARCELO.TREZE 27/05/2010 19:41:31
#343003
o colega jonathanstecker ja respondeu é apenas uma correçãozinha que farei e funcionará

sSQL = sSQL & IIf(atxtManut.Text = [Ô][Ô], [Ô]manutecao=Null,[Ô],[Ô]manutencao=#[Ô] & Format(atxtManut, [Ô]mm/dd/yyyy[Ô]) & [Ô]#,[Ô])
sSQL = sSQL & IIf(atxtReparo.Text = [Ô][Ô], [Ô]reparo=Null[Ô],[Ô]reparo=#[Ô] & Format(atxtReparo, [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô])


apesar que a diferença de meu código pro edemir é apenas uma virgula que ele esqueceu

ps: meu código está certo porem o EDERMIR respondeu primeiro, ponto pra ele OK
JPAULO101 28/05/2010 08:25:01
#343021
VALEU AMIGOS PELA AJUDA DE TODOS,
Tópico encerrado , respostas não são mais permitidas