SALVAR CAMPO DATA VAZIO ACCESS
Oi pessoal, estou tendo dificuldades em trabalhar com campo data/hora em branco no VB6 com ACCESS. Como fazer seleção, gravar, atualizar, etc.No meu formulário tenho dois campos um txtAdmissao.text e txtRescisao.txt. Ao cadastrar um funcionário é claro que somente o campo Admissao é preenchido e o Rescisao fica em branco e somente é preenchido quando o funcionário é desligado da empresa.Como configurar no ACCESS, no VB6 e em qual ou quais eventos eu uso para fazer essa manutenção, fica melhor textbox ou MaskedBox????
PS: Achei esse tópico, mas não consegui implementar, pra mim ficou meio vago.Ao menos daria para detalhar mais: http://www.vbmania.com.br/pages/index.php?varModulo=Forum&varMethod=abrir&varID=315477&varWorld=
PS: Achei esse tópico, mas não consegui implementar, pra mim ficou meio vago.Ao menos daria para detalhar mais: http://www.vbmania.com.br/pages/index.php?varModulo=Forum&varMethod=abrir&varID=315477&varWorld=
tem que gravar nulo no campo.
como vc está fazendo o insert e update?
como vc está fazendo o insert e update?
MARCOS, como assim gravar nulo no campo? Tem de configurar isso nas propriedades do campo no ACCESS também ?
minha rotina de gravacao/update, segue:
Private Sub GravarDados()
Dim cnnComando As New ADODB.Command
Dim vConfMsg As Integer
Dim vErro As Boolean
On Error GoTo errGravacao
[ô]Inicializa as variáveis auxiliares:
vConfMsg = vbExclamation + vbOKOnly + vbSystemModal
vErro = False
[ô]Verifica os dados digitados:
[ô]If txtnome.Text = Empty Then
[ô]MsgBox [Ô]O campo Nome não foi preenchido.[Ô], vConfMsg, [Ô]Erro[Ô]
[ô]vErro = True
[ô]End If
[ô]Se aconteceu um erro de digitação, sai da sub sem gravar:
If vErro Then Exit Sub
Screen.MousePointer = vbHourglass
With cnnComando
.ActiveConnection = conn
.CommandType = adCmdText
[ô]Verifica a operação e cria o comando SQL correspondente:
If vInclusao Then
[ô]Inclusão:
[ô]NovoCodigo
.CommandText = [Ô]INSERT INTO tbcontrato [Ô] & _
[Ô](ContratoNro,Matricula, CodCargo,CodFuncao,CodSetor,DtAdmissao,DtRescisao,Funcionario,CodTipoContrato,DtConcurso,CodAto,NroAto, [Ô] & _
[Ô]DtAto) VALUES ([ô][Ô] & _
txtMatricula.Text & [Ô][ô],[ô][Ô] & _
txtCodCargo.Text & [Ô][ô],[ô][Ô] & _
txtCodFuncao.Text & [Ô][ô],[ô][Ô] & _
txtCodSetor.Text & [Ô][ô],[ô][Ô] & _
txtAdmissao.Text & [Ô][ô],[ô][Ô] & _
txtRescisao.Text & [Ô][ô],[ô][Ô] & _
Combo1.Text & [Ô][ô],[ô][Ô] & _
txtCodTipoContrato.Text & [Ô][ô],[ô][Ô] & _
txtDataConcurso.Text & [Ô][ô],[ô][Ô] & _
txtCodAto.Text & [Ô][ô],[ô][Ô] & _
txtNroAto.Text & [Ô][ô],[ô][Ô] & _
txtDataAto.Text & [Ô][ô]);[Ô]
Else
Alteração:
.CommandText = [Ô]update tbcontrato set [Ô] & _
[Ô]CodCargo =[ô][Ô] & txtCodCargo.Text & [Ô][ô],[Ô] & _
[Ô]CodFuncao = [ô][Ô] & txtCodFuncao & [Ô][ô],[Ô] & _
[Ô]CodSetor =[ô][Ô] & txtCodSetor & [Ô][ô],[Ô] & _
[Ô]DtAdmissao = [ô][Ô] & txtAdmissao.Text & [Ô][ô],[Ô] & _
[Ô]DtRescisao = [ô][Ô] & txtRescisao.Text & [Ô][ô],[Ô] & _
[Ô]Funcionario= [ô][Ô] & Combo1.Text & [Ô][ô],[Ô] & _
[Ô]codTipoContrato= [ô][Ô] & txtCodTipoContrato.Text & [Ô][ô],[Ô] & _
[Ô]DtConcurso = [ô][Ô] & txtDataConcurso.Text & [Ô][ô],[Ô] & _
[Ô]CodAto = [ô][Ô] & txtCodAto.Text & [Ô][ô],[Ô] & _
[Ô]NroAto = [ô][Ô] & txtNroAto.Text & [Ô][ô],[Ô] & _
[Ô]DtAto = [ô][Ô] & txtDataAtoAto.Text & [Ô][ô][Ô] & _
[Ô]where Matricula = [Ô] & txtMatricula.Text & [Ô][Ô]
End If
.Execute
End With
MsgBox [Ô]Gravação concluÃda com sucesso.[Ô], _
vbApplicationModal + vbInformation + vbOKOnly, _
[Ô]Gravação OK[Ô]
[ô]Chama a sub que limpa os dados do formulário:
[ô]Limpar_Campos
Saida:
Screen.MousePointer = vbDefault
Set cnnComando = Nothing
Exit Sub
errGravacao:
With Err
If .Number <> 0 Then
MsgBox [Ô]Houve um erro durante a gravação dos dados na tabela.[Ô], _
vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Erro[Ô]
.Number = 0
GoTo Saida
End If
End With
End Sub
Private Sub GravarDados()
Dim cnnComando As New ADODB.Command
Dim vConfMsg As Integer
Dim vErro As Boolean
On Error GoTo errGravacao
[ô]Inicializa as variáveis auxiliares:
vConfMsg = vbExclamation + vbOKOnly + vbSystemModal
vErro = False
[ô]Verifica os dados digitados:
[ô]If txtnome.Text = Empty Then
[ô]MsgBox [Ô]O campo Nome não foi preenchido.[Ô], vConfMsg, [Ô]Erro[Ô]
[ô]vErro = True
[ô]End If
[ô]Se aconteceu um erro de digitação, sai da sub sem gravar:
If vErro Then Exit Sub
Screen.MousePointer = vbHourglass
With cnnComando
.ActiveConnection = conn
.CommandType = adCmdText
[ô]Verifica a operação e cria o comando SQL correspondente:
If vInclusao Then
[ô]Inclusão:
[ô]NovoCodigo
.CommandText = [Ô]INSERT INTO tbcontrato [Ô] & _
[Ô](ContratoNro,Matricula, CodCargo,CodFuncao,CodSetor,DtAdmissao,DtRescisao,Funcionario,CodTipoContrato,DtConcurso,CodAto,NroAto, [Ô] & _
[Ô]DtAto) VALUES ([ô][Ô] & _
txtMatricula.Text & [Ô][ô],[ô][Ô] & _
txtCodCargo.Text & [Ô][ô],[ô][Ô] & _
txtCodFuncao.Text & [Ô][ô],[ô][Ô] & _
txtCodSetor.Text & [Ô][ô],[ô][Ô] & _
txtAdmissao.Text & [Ô][ô],[ô][Ô] & _
txtRescisao.Text & [Ô][ô],[ô][Ô] & _
Combo1.Text & [Ô][ô],[ô][Ô] & _
txtCodTipoContrato.Text & [Ô][ô],[ô][Ô] & _
txtDataConcurso.Text & [Ô][ô],[ô][Ô] & _
txtCodAto.Text & [Ô][ô],[ô][Ô] & _
txtNroAto.Text & [Ô][ô],[ô][Ô] & _
txtDataAto.Text & [Ô][ô]);[Ô]
Else
Alteração:
.CommandText = [Ô]update tbcontrato set [Ô] & _
[Ô]CodCargo =[ô][Ô] & txtCodCargo.Text & [Ô][ô],[Ô] & _
[Ô]CodFuncao = [ô][Ô] & txtCodFuncao & [Ô][ô],[Ô] & _
[Ô]CodSetor =[ô][Ô] & txtCodSetor & [Ô][ô],[Ô] & _
[Ô]DtAdmissao = [ô][Ô] & txtAdmissao.Text & [Ô][ô],[Ô] & _
[Ô]DtRescisao = [ô][Ô] & txtRescisao.Text & [Ô][ô],[Ô] & _
[Ô]Funcionario= [ô][Ô] & Combo1.Text & [Ô][ô],[Ô] & _
[Ô]codTipoContrato= [ô][Ô] & txtCodTipoContrato.Text & [Ô][ô],[Ô] & _
[Ô]DtConcurso = [ô][Ô] & txtDataConcurso.Text & [Ô][ô],[Ô] & _
[Ô]CodAto = [ô][Ô] & txtCodAto.Text & [Ô][ô],[Ô] & _
[Ô]NroAto = [ô][Ô] & txtNroAto.Text & [Ô][ô],[Ô] & _
[Ô]DtAto = [ô][Ô] & txtDataAtoAto.Text & [Ô][ô][Ô] & _
[Ô]where Matricula = [Ô] & txtMatricula.Text & [Ô][Ô]
End If
.Execute
End With
MsgBox [Ô]Gravação concluÃda com sucesso.[Ô], _
vbApplicationModal + vbInformation + vbOKOnly, _
[Ô]Gravação OK[Ô]
[ô]Chama a sub que limpa os dados do formulário:
[ô]Limpar_Campos
Saida:
Screen.MousePointer = vbDefault
Set cnnComando = Nothing
Exit Sub
errGravacao:
With Err
If .Number <> 0 Then
MsgBox [Ô]Houve um erro durante a gravação dos dados na tabela.[Ô], _
vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Erro[Ô]
.Number = 0
GoTo Saida
End If
End With
End Sub
Citação:e o Rescisao fica em branco e somente é preenchido quando o funcionário é desligado da empresa.
ALANTB, vc pode fazer assim para contornar este erro:
No access, substitua o campo DtRescisao que eh do tipo [Ô]Data/Hora[Ô] por tipo [Ô]Texto[Ô] e depois format seu campo no vb para receber o valor que deseja desta forma exemplo: txtRescisao.Text = Format$(Now, [Ô]C[Ô]).
Assim vc nao tera problemas ao gravar registros nesse campo, pois o access nao permitirar que vc grave se o campo for do tipo Data/Hora.
Valeu.
FERRAZ, Now é a hora do sistema ,correto? e o [Ô]C[Ô].
use o IIf para isto
veja
veja
CommandText = [Ô]INSERT INTO tbcontrato [Ô] & _
[Ô](ContratoNro,Matricula, CodCargo,CodFuncao,CodSetor,DtAdmissao,DtRescisao,Funcionario,CodTipoContrato,DtConcurso,CodAto,NroAto, [Ô] & _
[Ô]DtAto) VALUES ([ô][Ô] & _
txtMatricula.Text & [Ô][ô],[ô][Ô] & _
txtCodCargo.Text & [Ô][ô],[ô][Ô] & _
txtCodFuncao.Text & [Ô][ô],[ô][Ô] & _
txtCodSetor.Text & [Ô][ô],[Ô] & _
IIf(txtAdmissao.Text = [Ô][Ô], [Ô]NULL[Ô], Format(txtAdmissao.Text, [Ô]#mm/dd/yyyy#[Ô])) & [Ô],[Ô] & _
IIf(txtRescisao.Text = [Ô][Ô], [Ô]NULL[Ô], Format(txtRescisao.Text, [Ô]#mm/dd/yyyy#[Ô])) & [Ô],[ô][Ô] & _
Combo1.Text & [Ô][ô],[ô][Ô] & _
txtCodTipoContrato.Text & [Ô][ô],[ô][Ô] & _
txtDataConcurso.Text & [Ô][ô],[ô][Ô] & _
txtCodAto.Text & [Ô][ô],[ô][Ô] & _
txtNroAto.Text & [Ô][ô],[ô][Ô] & _
txtDataAto.Text & [Ô][ô]);[Ô]
Alteração:
.CommandText = [Ô]update tbcontrato set [Ô] & _
[Ô]CodCargo =[ô][Ô] & txtCodCargo.Text & [Ô][ô],[Ô] & _
[Ô]CodFuncao = [ô][Ô] & txtCodFuncao & [Ô][ô],[Ô] & _
[Ô]CodSetor =[ô][Ô] & txtCodSetor & [Ô][ô],[Ô] & _
[Ô]DtAdmissao = [Ô] & IIf(txtAdmissao.Text = [Ô][Ô], [Ô]NULL[Ô], Format(txtAdmissao.Text, [Ô]#mm/dd/yyyy#[Ô])) & [Ô],[Ô] & _
[Ô]DtRescisao = [Ô] & IIf(txtRescisao.Text = [Ô][Ô], [Ô]NULL[Ô], Format(txtRescisao.Text, [Ô]#mm/dd/yyyy#[Ô])) & [Ô],[ô][Ô] & _
[Ô]Funcionario= [ô][Ô] & Combo1.Text & [Ô][ô],[Ô] & _
[Ô]codTipoContrato= [ô][Ô] & txtCodTipoContrato.Text & [Ô][ô],[Ô] & _
[Ô]DtConcurso = [ô][Ô] & txtDataConcurso.Text & [Ô][ô],[Ô] & _
[Ô]CodAto = [ô][Ô] & txtCodAto.Text & [Ô][ô],[Ô] & _
[Ô]NroAto = [ô][Ô] & txtNroAto.Text & [Ô][ô],[Ô] & _
[Ô]DtAto = [ô][Ô] & txtDataAtoAto.Text & [Ô][ô][Ô] & _
[Ô]where Matricula = [Ô] & txtMatricula.Text & [Ô][Ô]
MARCELO-TREZE, copie o codigo como tu retornaste, mas dá erro na hora de gravar.Não sei se é problema de caracteres na rotina SQL ou se devo alterar as propriedades do campo no ACCESS. Já alterei para texto, de novo para dara/hora, mas mesmo assim só da erro de gravação.Existe outra forma de fazer isso????
Cara eu faço assim sem erro na gravação de um campo vazio:
Sql = Sql & [Ô]Data1=[Ô] & IIf(Not IsDate(TxtData.Text), [Ô]null[Ô], [Ô][ô][Ô] + Format(TxtData.Text, [Ô]dd/mm/yyyy[Ô]) + [Ô][ô][Ô]) & [Ô],[Ô]
vê se ajuda.
Sql = Sql & [Ô]Data1=[Ô] & IIf(Not IsDate(TxtData.Text), [Ô]null[Ô], [Ô][ô][Ô] + Format(TxtData.Text, [Ô]dd/mm/yyyy[Ô]) + [Ô][ô][Ô]) & [Ô],[Ô]
vê se ajuda.
ALANTB, bom sua pergunta nao foi bem esta certo, pois seu problema esta em fazer UPdate na sua tabela ok.
Agora vou te dizer o porque do [Ô]C[Ô], a sintase = Format$(Expression,[Format],... eu coloco [Ô]Now[Ô] onde seria a Expression e onde eh o formato do campo eu coloco o [Ô]C[Ô] e funciona na boa e fica com uma cara mais clara, pois sempre vamos associar o [Ô]Now[Ô] com o relegio do sistema operacional. Entendou o porque amigo.
Na verdade eu te deu uma dica de como vc pode fazer resolver seu problema, tenta isso quando tiver tempo.
A instrucao do Marcelo vai te dar outra visao de como vc pode resolver, posta o erro que esta dando ae, assim fica mais facil da galera pode te ajudar melhor.
Agora vou te dizer o porque do [Ô]C[Ô], a sintase = Format$(Expression,[Format],... eu coloco [Ô]Now[Ô] onde seria a Expression e onde eh o formato do campo eu coloco o [Ô]C[Ô] e funciona na boa e fica com uma cara mais clara, pois sempre vamos associar o [Ô]Now[Ô] com o relegio do sistema operacional. Entendou o porque amigo.
Na verdade eu te deu uma dica de como vc pode fazer resolver seu problema, tenta isso quando tiver tempo.
A instrucao do Marcelo vai te dar outra visao de como vc pode resolver, posta o erro que esta dando ae, assim fica mais facil da galera pode te ajudar melhor.
IRENKO, data1 se refere ao nome do campo na tabela ou no form??
Tópico encerrado , respostas não são mais permitidas