SALVAR CAMPO DATA VAZIO ACCESS

ALANTB 31/08/2010 12:38:02
#351807
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=
MARCOSLING 31/08/2010 13:07:18
#351812
tem que gravar nulo no campo.

como vc está fazendo o insert e update?
ALANTB 31/08/2010 13:19:45
#351815
MARCOS, como assim gravar nulo no campo? Tem de configurar isso nas propriedades do campo no ACCESS também ?
ALANTB 31/08/2010 13:36:39
#351818
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
FERRAZ 31/08/2010 14:32:20
#351827
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.
ALANTB 31/08/2010 16:27:49
#351845
FERRAZ, Now é a hora do sistema ,correto? e o [Ô]C[Ô].
MARCELO.TREZE 31/08/2010 16:39:32
#351847
use o IIf para isto

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 & [Ô][Ô]
ALANTB 01/09/2010 16:47:51
#351953
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????
IRENKO 01/09/2010 17:10:08
#351958
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.
FERRAZ 01/09/2010 17:11:24
#351959
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.
ALANTB 01/09/2010 17:42:07
#351964
IRENKO, data1 se refere ao nome do campo na tabela ou no form??
Página 1 de 3 [27 registro(s)]
Tópico encerrado , respostas não são mais permitidas