SALVAR CAMPO DATA VAZIO ACCESS
testeou meu exemplo modicicando seu código
Cara, Data1 é meu campo na tabela do meu banco. O seu campo deve estar configurado (Type) como DateTime, testa ae.
MARCELO-TREZE, como disse na em msg anterior copie o teu código e executei, mas ele se me retorna a msg de erro que coloquei abaixo da rotina de inclusao e updadate [Ô] HOUVE UM ERRO DURANTE A GRAVAÇÃO DE DADOS NA TABELA[Ô].No momento estou travado na INCLUSAO, nem tentei o UPDATE ainda.E realmente não grava os dados.Não sei se ao copiar do forum alterou algum caractere, espaço, aspas, etc.Como deve ficar a configuração do campo dentro do ACCESS: tipo data ou texto; comprimento zero: sim ou não. Esse exemplo funciona tambem com MASKEDBOX???
Na ajuda do ACCESS diz que: quando for gravar campo em branco usar aspas duplas sem espaço entre elas, mas como fazer para escrever no codigo do vb6 ex: txtdata = [Ô][ô] , ou seja gravar essas aspas no banco via código???
Na ajuda do ACCESS diz que: quando for gravar campo em branco usar aspas duplas sem espaço entre elas, mas como fazer para escrever no codigo do vb6 ex: txtdata = [Ô][ô] , ou seja gravar essas aspas no banco via código???
Pessoal, tirei as mensagens de erro no meu código para poder localizar melhor o erro. Tentei incluir dados e o erro foi o seguinte:
[Ô]Erro de sintaxe(operador faltando) na expressão de consulta [ô]3007mm/dd/yyyy5[ô],DtRescisao=NULL[Ô].Não entendi patavinas da onde puxou aquele 3007 e o 5 na linha de erro. No access os campos data estão no tipo data/hora e no vb6 ta assim para gravar:
.CommandText = [Ô]INSERT INTO tbcontrato [Ô] & _
[Ô](ContratoNro, Matricula, CodCargo, CodFuncao, CodSetor, DtAdmissao, DtDesligado, Funcionario, CodTipoContrato, DtConcurso, CodAto, NroAto, [Ô] & _
[Ô]DtAto) VALUES ([ô][Ô] & _
txtnrocontrato.Text & [Ô][ô],[ô][Ô] & _
txtMatricula.Text & [Ô][ô],[ô][Ô] & _
txtCodCargo.Text & [Ô][ô],[ô][Ô] & _
txtCodFuncao.Text & [Ô][ô],[ô][Ô] & _
txtCodSetor.Text & [Ô][ô],[ô][Ô] & _
IIf(Not IsDate(txtAdmissao.Text), [Ô]null[Ô], [Ô][ô][Ô] + Format(txtAdmissao.Text, [Ô]dd/mm/yyyy[Ô]) + [Ô][ô][Ô]) & [Ô],[Ô] & _
IIf(Not IsDate(txtDesligado.Text), [Ô]null[Ô], [Ô][ô][Ô] + Format(txtDesligado.Text, [Ô]dd/mm/yyyy[Ô]) + [Ô][ô][Ô]) & [Ô],[Ô] & _
Combo1.Text & [Ô][ô],[ô][Ô] & _
txtCodTipoContrato.Text & [Ô][ô],[ô][Ô] & _
txtDataConcurso.Text & [Ô][ô],[ô][Ô] & _
txtCodAto.Text & [Ô][ô],[ô][Ô] & _
txtNroAto.Text & [Ô][ô],[ô][Ô] & _
txtDataAto.Text & [Ô][ô]);[Ô]
[Ô]Erro de sintaxe(operador faltando) na expressão de consulta [ô]3007mm/dd/yyyy5[ô],DtRescisao=NULL[Ô].Não entendi patavinas da onde puxou aquele 3007 e o 5 na linha de erro. No access os campos data estão no tipo data/hora e no vb6 ta assim para gravar:
.CommandText = [Ô]INSERT INTO tbcontrato [Ô] & _
[Ô](ContratoNro, Matricula, CodCargo, CodFuncao, CodSetor, DtAdmissao, DtDesligado, Funcionario, CodTipoContrato, DtConcurso, CodAto, NroAto, [Ô] & _
[Ô]DtAto) VALUES ([ô][Ô] & _
txtnrocontrato.Text & [Ô][ô],[ô][Ô] & _
txtMatricula.Text & [Ô][ô],[ô][Ô] & _
txtCodCargo.Text & [Ô][ô],[ô][Ô] & _
txtCodFuncao.Text & [Ô][ô],[ô][Ô] & _
txtCodSetor.Text & [Ô][ô],[ô][Ô] & _
IIf(Not IsDate(txtAdmissao.Text), [Ô]null[Ô], [Ô][ô][Ô] + Format(txtAdmissao.Text, [Ô]dd/mm/yyyy[Ô]) + [Ô][ô][Ô]) & [Ô],[Ô] & _
IIf(Not IsDate(txtDesligado.Text), [Ô]null[Ô], [Ô][ô][Ô] + Format(txtDesligado.Text, [Ô]dd/mm/yyyy[Ô]) + [Ô][ô][Ô]) & [Ô],[Ô] & _
Combo1.Text & [Ô][ô],[ô][Ô] & _
txtCodTipoContrato.Text & [Ô][ô],[ô][Ô] & _
txtDataConcurso.Text & [Ô][ô],[ô][Ô] & _
txtCodAto.Text & [Ô][ô],[ô][Ô] & _
txtNroAto.Text & [Ô][ô],[ô][Ô] & _
txtDataAto.Text & [Ô][ô]);[Ô]
Fiz umas modificações, tente assim:
Dim strSQL As String
strSQL = [Ô]INSERT INTO tbcontrato (ContratoNro, Matricula, CodCargo, CodFuncao, CodSetor, DtAdmissao, DtDesligado, Funcionario,[Ô]
strSQL = strSQL & [Ô]CodTipoContrato, DtConcurso, CodAto, NroAto, DtAto)[Ô]
strSQL = strSQL & [Ô]VALUES([Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtnrocontrato.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtMatricula.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtCodCargo.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtCodFuncao.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtCodSetor.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & IIf(Not IsDate(txtAdmissao.Text), Null, Format(txtAdmissao.Text, [Ô]dd/mm/yyyy[Ô])) & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & IIf(Not IsDate(txtDesligado.Text), Null, Format(txtDesligado.Text, [Ô]dd/mm/yyyy[Ô])) & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & Combo1.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtCodTipoContrato.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtDataConcurso.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtCodAto.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtNroAto.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtDataAto.Text & [Ô][ô])[Ô]
SuaConexao.BeginTrans
SuaConexao.Execute (strSQL)
SuaConexao.CommitTrans
Dim strSQL As String
strSQL = [Ô]INSERT INTO tbcontrato (ContratoNro, Matricula, CodCargo, CodFuncao, CodSetor, DtAdmissao, DtDesligado, Funcionario,[Ô]
strSQL = strSQL & [Ô]CodTipoContrato, DtConcurso, CodAto, NroAto, DtAto)[Ô]
strSQL = strSQL & [Ô]VALUES([Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtnrocontrato.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtMatricula.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtCodCargo.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtCodFuncao.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtCodSetor.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & IIf(Not IsDate(txtAdmissao.Text), Null, Format(txtAdmissao.Text, [Ô]dd/mm/yyyy[Ô])) & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & IIf(Not IsDate(txtDesligado.Text), Null, Format(txtDesligado.Text, [Ô]dd/mm/yyyy[Ô])) & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & Combo1.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtCodTipoContrato.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtDataConcurso.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtCodAto.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtNroAto.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtDataAto.Text & [Ô][ô])[Ô]
SuaConexao.BeginTrans
SuaConexao.Execute (strSQL)
SuaConexao.CommitTrans
Pessoal, já virei do avesso aqui e não saio do lugar. Sendo assim vou postar meu projeto para os colegas verificarem, senão a coisa não vai adiante. Para facilitar, a maneira que estou executando é a seguinte:
Executar o projeto, no menu CADASTRO selecionar CADASTRO DE CONTRATOS
no campo Nº CONTRATO digito 7 (que é o próximo numero de contrato no BD), e nos próximos campos faço uma seleção aleatória nos listviews, nos campos com data preencho a data de admissão e os outros deixo vazio, no combo SIM ou NÃO , preencho um tipo de ato e um numero e tento incluir, mas da erro, ou até mesmo tive situações em que me exibiu a msg gravação OK, mas no bd não apareceu nada. Peço aos colegas que dêem uma olhada..
Executar o projeto, no menu CADASTRO selecionar CADASTRO DE CONTRATOS
no campo Nº CONTRATO digito 7 (que é o próximo numero de contrato no BD), e nos próximos campos faço uma seleção aleatória nos listviews, nos campos com data preencho a data de admissão e os outros deixo vazio, no combo SIM ou NÃO , preencho um tipo de ato e um numero e tento incluir, mas da erro, ou até mesmo tive situações em que me exibiu a msg gravação OK, mas no bd não apareceu nada. Peço aos colegas que dêem uma olhada..
ALANTB no access você precisa Obrigatoriamente:
1- Definir o campo da tabela para aceitar: Requerido = Sim
2- Se indexar o campo colocar duplicação autorizada
3- O campo deve ser definido como DATA e não texto, do contrário não conseguirá realizar pesquisas por perÃodos no banco
4- Ao montar sua SQL no VB, colocar a data entre # # se não não funciona
5- Por último pode incluir Null sim, não assim no VB:
[Ô]UPDATE tabela sete campoData = Null .......[Ô]
Isso é o necessário, do contrário terá problemas realmente.
1- Definir o campo da tabela para aceitar: Requerido = Sim
2- Se indexar o campo colocar duplicação autorizada
3- O campo deve ser definido como DATA e não texto, do contrário não conseguirá realizar pesquisas por perÃodos no banco
4- Ao montar sua SQL no VB, colocar a data entre # # se não não funciona
5- Por último pode incluir Null sim, não assim no VB:
[Ô]UPDATE tabela sete campoData = Null .......[Ô]
Isso é o necessário, do contrário terá problemas realmente.
ALANTB, o problema estava aqui:
Private Sub txtDesligado_LostFocus()
[ô]If txtDesligado.Text = [Ô][Ô] Then Exit Sub
[ô]txtDesligado.Text = Format(txtDesligado, [Ô]00/00/0000[Ô])
End Sub
comentei as linhas e esta gravando normalmente na alteração. Mudei o código, veja o anexo.
Private Sub txtDesligado_LostFocus()
[ô]If txtDesligado.Text = [Ô][Ô] Then Exit Sub
[ô]txtDesligado.Text = Format(txtDesligado, [Ô]00/00/0000[Ô])
End Sub
comentei as linhas e esta gravando normalmente na alteração. Mudei o código, veja o anexo.
o erro é o seguinte quando se trata de access estas são as regras:
quando é um campo do tipo texto vc salva entre aspas simples, ex:
nome = [ô] Marcelo [ô]
quanfor numero ou nulo(Null) não se usa aspas, ex:
codigo = 1234
ou
codigo = Null
se for do tipo Data/Hora o campo de estar entre o caractere(#) no formato mm/dd/yyyy, ex:
data = #07/31/2010#
lógico a data deve eser uma data válida, um erro de digitação pode lhe causar erro
então o mais certoa para sua função é:
bom eu mesmo havia colocado errado da ultimavez, pois coloquei o (#) dentro do format, da forma acima dará certo, ou seja:
traduzindo o IIf
será a mesma coisa que
entendeu, teste novamente, só que desta vez com o código posta acima, tenho certeza que funcionará
quando é um campo do tipo texto vc salva entre aspas simples, ex:
nome = [ô] Marcelo [ô]
quanfor numero ou nulo(Null) não se usa aspas, ex:
codigo = 1234
ou
codigo = Null
se for do tipo Data/Hora o campo de estar entre o caractere(#) no formato mm/dd/yyyy, ex:
data = #07/31/2010#
lógico a data deve eser uma data válida, um erro de digitação pode lhe causar erro
então o mais certoa para sua função é:
strSQL = [Ô]INSERT INTO tbcontrato (ContratoNro, Matricula, CodCargo, CodFuncao, CodSetor, DtAdmissao, DtDesligado, Funcionario,[Ô]
strSQL = strSQL & [Ô]CodTipoContrato, DtConcurso, CodAto, NroAto, DtAto)[Ô]
strSQL = strSQL & [Ô]VALUES([Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtnrocontrato.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtMatricula.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtCodCargo.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtCodFuncao.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtCodSetor.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][Ô] & IIf(txtAdmissao.Text=[Ô][Ô], [Ô]Null[Ô], [Ô]#[Ô] & Format(txtAdmissao.Text, [Ô]dd/mm/yyyy[Ô]) & [Ô]#[Ô]) & [Ô],[Ô]
strSQL = strSQL & [Ô][Ô] & IIf(txtDesligado.Text=[Ô][Ô], [Ô]Null[Ô], [Ô]#[Ô] & Format(txtDesligado.Text, [Ô]dd/mm/yyyy[Ô]) & [Ô]#[Ô]) & [Ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & Combo1.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtCodTipoContrato.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtDataConcurso.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtCodAto.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtNroAto.Text & [Ô][ô],[Ô]
strSQL = strSQL & [Ô][ô][Ô] & txtDataAto.Text & [Ô][ô])[Ô]
SuaConexao.BeginTrans
SuaConexao.Execute (strSQL)
SuaConexao.CommitTrans
bom eu mesmo havia colocado errado da ultimavez, pois coloquei o (#) dentro do format, da forma acima dará certo, ou seja:
traduzindo o IIf
IIf(txtAdmissao.Text=[Ô][Ô], [Ô]Null[Ô], [Ô]#[Ô] & Format(txtAdmissao.Text, [Ô]dd/mm/yyyy[Ô]) & [Ô]#[Ô]) & [Ô],[Ô]
será a mesma coisa que
If txtAdmissao.Text = [Ô][Ô] then
strSQL = strSQL & [Ô]Null[Ô]
Else
strSQL = strSQL & [Ô]#07/31/2010#[Ô]
End if
entendeu, teste novamente, só que desta vez com o código posta acima, tenho certeza que funcionará
MARCELO-TREZE, fiz conforme código acima e exibe erro de operador faltando na expressao de consulta.Tirando o campo Admissao, os outros campos com data eventualmente também podem ser incluidoatualizados em branco.Continuo fazendo testes e contando com a colaboração dos colegas do forum...
Tópico encerrado , respostas não são mais permitidas