NULL

FRATA 06/08/2016 16:01:33
#465565
O código abaixo não aceita salvar o formulário caso todos os campos não estejam preenchidos. Será que alguém sabe como eu modifico isso. Antecipadamente agradeço.
[ô]declarando os objetos necessários
[ô]command e recordset para interagir com o BD
[ô]e declarando variavel para utilizar msgbox
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset
Dim vinfo As Integer
[ô]chamando a sub que carrega a lista com os dados do BD
Private Sub Form_Load()
preenche_list

End Sub

[ô]descarregando os objetos command e recordset quando
[ô]fechar o form e limpando os arquivos temp criados
Private Sub Form_Unload(Cancel As Integer)
Set cmd = Nothing
Set rs = Nothing
Set cnnreceitas = Nothing

If Dir([Ô]c:*.tmp[Ô]) <> [Ô][Ô] Then
On Error Resume Next
Kill [Ô]c:*.tmp[Ô]
End If

End Sub

[ô]quando der duplo click na lista
[ô]filtra as informações no BD e joga nos campos
[ô]para alterar
Private Sub List_receitas_DblClick()
With cmd
.ActiveConnection = cnnreceitas
.CommandType = adCmdText
.CommandText = [Ô]select * from receitas[Ô]
Set rs = .Execute
End With
With rs
.Filter = [Ô] receita like [ô][Ô] & List_receitas.Text & [Ô][ô][Ô]
Frame_cadastro.Visible = True
Frame_Localizar.Visible = False
Toolbar1.Visible = False
Toolbar2.Visible = True
travar_campos
Text_cod = !cod
Text_receita = !receita
Text_ingredientes = !ingredientes
Text_preparo = !preparo
Text_email = !email
End With
End Sub

[ô]codigo que faz a busca na List quando é digitado
[ô]na text
Private Sub Text1_Change()
On Error GoTo trataerro

With cmd
.ActiveConnection = cnnreceitas
.CommandType = adCmdText
.CommandText = [Ô]select * from receitas[Ô]
Set rs = .Execute
End With
With rs
.Filter = [Ô] receita like [ô]%[Ô] & Text1.Text & [Ô]%[ô][Ô]
If .BOF And .EOF Then
MsgBox ([Ô]Sequencia de caracteres não encontrado na lista[Ô])
Else
List_receitas = rs!receita
End If
End With

trataerro:

With Err
If .Number <> 0 Then
.Number = 0

End If
End With

End Sub

[ô]faz as alterações entre as toolbar e os frames
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Index
Case 1
Toolbar1.Visible = False
Toolbar2.Visible = True
Frame_cadastro.Visible = True
Frame_Localizar.Visible = False
Case 2
Frame_Localizar.Visible = True
Text1.Text = [Ô][Ô]


End Select
End Sub

[ô]chama os procedimentos de gravar, inserir ou retornar
[ô]para o outro frame
Private Sub Toolbar2_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Index
Case 1
NOVO
Case 2
Gravar
Case 3
If Text_cod.Text <> [Ô][Ô] Then
liberar_campos
Else
MsgBox ([Ô]Escolha uma receita na lista através do menu Localizar, dê duplo click na receita a ser alterada[Ô])
End If
Case 4
excluir
Case 5
Toolbar2.Visible = False
Toolbar1.Visible = True
Frame_cadastro.Visible = False
limpar_campos
preenche_list
End Select
End Sub

[ô]subprocedimento que prepara a inserção de um novo
[ô]registro no BD
Private Sub NOVO()

vinfo = MsgBox([Ô]Deseja inserir nova receita no Livro de Receitas ?[Ô], vbYesNo + vbQuestion, [Ô]Nova receita[Ô])
If vinfo = vbYes Then

With cmd
.ActiveConnection = cnnreceitas
.CommandType = adCmdText
.CommandText = [Ô]select max(cod) as Mcod from receitas[Ô]
Set rs = .Execute
End With
With rs
If IsNull(rs!Mcod) Then
Text_cod.Text = 1
Else
limpar_campos
preenche_list
Text_cod.Text = !Mcod + 1
End If
End With
Text_receita.Locked = False
Text_ingredientes.Locked = False
Text_preparo.Locked = False
Text_email.Locked = False
Text_receita.SetFocus
End If
End Sub

[ô]subprocedimento para gravar um registro novo
[ô]ou alterar um registro existente
Private Sub Gravar()

[ô]se houver campos em branco informa ao usuario
If Text_receita.Text = [Ô][Ô] Or _
Text_ingredientes.Text = [Ô][Ô] Or _
Text_preparo.Text = [Ô][Ô] Then
MsgBox ([Ô]Existe(m) campo(s) em branco, verifique[Ô])

Else [ô]se não, faz a busca no BD

With cmd
.ActiveConnection = cnnreceitas
.CommandType = adCmdText
.CommandText = [Ô]select * from receitas[Ô]
Set rs = .Execute
End With
With rs
.Filter = [Ô]cod = [Ô] & Text_cod.Text & [Ô] [Ô]
If .BOF And .EOF Then [ô]se não achar identifica
[ô]como inclusão

With cmd
.ActiveConnection = cnnreceitas
.CommandType = adCmdText
.CommandText = [Ô]insert into receitas[Ô] & _
[Ô](cod,email, receita, ingredientes, preparo)values([ô][Ô] & _
Text_cod.Text & [Ô][ô],[ô][Ô] & _
Text_email & [Ô][ô],[ô][Ô] & _
Text_receita & [Ô][ô],[ô][Ô] & _
Text_ingredientes.Text & [Ô][ô],[ô][Ô] & _
Text_preparo.Text & [Ô][ô]);[Ô]
.Execute [ô]grava

vinfo = MsgBox([Ô]Receita salva com sucesso![Ô], vbOKOnly, [Ô]Salvar receita[Ô])

limpar_campos
travar_campos
preenche_list

End With

Else [ô]se achar o registro identifica como alteração

With cmd
.ActiveConnection = cnnreceitas
.CommandType = adCmdText
.CommandText = [Ô] update receitas set [Ô] & _
[Ô]receita = [ô][Ô] & Text_receita.Text & [Ô][ô],[Ô] & _
[Ô]email = [ô][Ô] & Text_email.Text & [Ô][ô],[Ô] & _
[Ô]ingredientes = [ô][Ô] & Text_ingredientes.Text & [Ô][ô],[Ô] & _
[Ô]preparo = [ô][Ô] & Text_preparo.Text & [Ô][ô][Ô] & _
[Ô]where cod = [Ô] & Text_cod.Text & [Ô];[Ô]
.Execute

vok = MsgBox([Ô]Alterações salvas com sucesso![Ô], vbOKOnly, [Ô]Alterar receita[Ô])

limpar_campos
travar_campos
preenche_list

End With

End If
End With
End If
End Sub

[ô]subprocedimento que carrega a lista com os registros
[ô]do BD quando executado no evento Load do Form
Private Sub preenche_list()

With cmd
.ActiveConnection = cnnreceitas
.CommandType = adCmdText
.CommandText = [Ô]select * from receitas[Ô]
Set rs = .Execute
End With
Do While Not rs.EOF
If Not IsNull(rs!receita) Then
List_receitas.AddItem rs!receita
End If
rs.MoveNext
Loop

End Sub

[ô]subprocedimento que quando chamado limpa os controles
[ô]do form
Private Sub limpar_campos()

Text_receita.Text = [Ô][Ô]
Text_email.Text = [Ô][Ô]
Text_ingredientes.Text = [Ô][Ô]
Text_preparo.Text = [Ô][Ô]
Text_cod.Text = [Ô][Ô]
List_receitas.Clear

End Sub

[ô]subprocedimento que trava os textbox
Private Sub travar_campos()

Text_receita.Locked = True
Text_ingredientes.Locked = True
Text_preparo.Locked = True
Text_email.Locked = True


End Sub

[ô]subprocedimento que destrava os textbox
Private Sub liberar_campos()

Text_receita.Locked = False
Text_ingredientes.Locked = False
Text_preparo.Locked = False
Text_email.Locked = False

End Sub

[ô]subprocedimento que faz a exclusão de um registro
[ô]no BD
Private Sub excluir()

[ô]se o campo com o numero do codigo estiver em branco
[ô]não executa nada

If Text_cod.Text = [Ô][Ô] Then
MsgBox ([Ô]Não existe receita para exclusão, verifique.[Ô])
Else [ô]se não estiver em branco solicita a confirmação
[ô]de exclusão do registro
vinfo = MsgBox([Ô]Deseja excluir esta receita ?[Ô], vbYesNo + vbQuestion, [Ô]Excluir receita[Ô])
If vinfo = vbYes Then [ô]se confirmado então exclui
With cmd
.ActiveConnection = cnnreceitas
.CommandType = adCmdText
.CommandText = [Ô] delete from receitas where cod = [Ô] & Text_cod.Text & [Ô];[Ô]
.Execute
End With
End If
limpar_campos [ô]limpa os campos
preenche_list [ô]preenche a lista novamente
End If
End Sub
DS2T 06/08/2016 22:41:15
#465573
Não é por mal não... mas você nem ao menos tentou ler o código né?
Poxa cara... está bem comentado onde existe essa condição.

Ler nunca matou ninguém...
Não saber ler um código até vai.. mas ter má vontade pra ler comentário é preguiça das brabas...
FRATA 08/08/2016 11:51:12
#465621
Prezado colega:
A parte do código especificada abaixo, NÃO é O QUE IMPEDE DO BD RECEBER CAMPOS NULOS.
Por esse motivo solicitei auxílio do Forum.
Se vc também não sabe, então diz que não sabe, porque é feio fazer esse tipo de comentário num local compartilhado onde todos
estão para aprender.
O objetivo do Forum é compartilhamento de informações específicas do tema e não para opiniões particulares sobre os demais companheiros.
Mesmo assim, agradeço pelo seu comentário.

[ô]se houver campos em branco informa ao usuario
If Text_receita.Text = [Ô][Ô] Or _
Text_ingredientes.Text = [Ô][Ô] Or _
Text_preparo.Text = [Ô][Ô] Then
MsgBox ([Ô]Existe(m) campo(s) em branco, verifique[Ô])
IRENKO 08/08/2016 13:25:28
#465623
Tente adaptar, pode ser que ajude.

Private Function vazio(Formulario As MSForms.UserForm, ByRef extControle As Object) As Boolean
Dim controle As Object
On Error Resume Next
vazio = False
For Each controle In Formulario.Controls
If controle.Tag = [Ô]Sim[Ô] Or controle.Tag = [Ô]Tipo[Ô] Then
If Trim(controle.Text) = [Ô][Ô] Then
If Err.Number = 0 Then
vazio = True
controle.BackColor = RGB(250, 250, 194)
End If
Set extControle = controle
Else
If controle.BackColor = RGB(250, 250, 194) Then
controle.BackColor = QBColor(15)
End If
End If
End If
Next controle
End Function [ô]

Dim controle As Object
If vazio(Me, controle) = True Then
MsgBox [Ô]Os campos salientados deverão ser preenchidos corrretamente, não podem haver campos nulos.[Ô]
controle.SetFocus
Exit Sub
End If
KERPLUNK 08/08/2016 14:03:30
#465624
Ok, vamos por partes então:
Você já consegue identificar onde está gravando no banco de dados, certo?
O que você não sabe é como gravar [Ô]null[Ô] ao invés de o valor da textbox, certo?
FRATA 08/08/2016 18:43:32
#465638
Oi, boa noite!
O que está acontecendo é o seguinte:
se eu não preencho todos os campos do formulário, ele me retorna que existem campos vazios.
Mas por ser um cadastro, pode ser que o usuário não tenha um celular.
Ou seu endereço não tenha complemento; ou seja eu preciso que o banco grave apenas os
dados que o usuário colocou no formulário. é só isso.
Antecipadamente agradeço pela atenção.
FRATA 08/08/2016 18:45:05
#465639
Ah, só para complementar, o banco que estou usando é Access. Obrigado!
KERPLUNK 08/08/2016 18:45:58
#465640
Sim, eu entendi o que você quer que aconteça. Mas as perguntas que fiz, continuam valendo:
Citação:

:
Você já consegue identificar onde está gravando no banco de dados, certo?
O que você não sabe é como gravar [Ô]null[Ô] ao invés de o valor da textbox, certo?


IRENKO 08/08/2016 20:47:54
#465646
Para validar os TextBox que não podem ser vazios vc usa a função que lhe passei anteriormente.
Para gravar null, vc usa essa abaixo:

Public Function Nnull(aString As Variant) As String
If IsNull(aString) Or IsEmpty(aString) Then
Nnull = [Ô][Ô]
Else
Nnull = CStr(aString)
End If
End Function

No INSERT Nnull(Text_cod.Text)

Creio que seja isso. Claro que existe outras maneiras.......
KERPLUNK 08/08/2016 20:54:51
#465648
Gente, para realmente ajudar o usuário nesse caso, a pior coisa a ser feita é ficar postando código, só vai confundir ainda mais. Ele já tem praticamente pronto o que ele quer, o que precisa ser feito é mostrar para ele o que precisa ser feito. Não é questão de mais código, mas sim de entendimento de código.
PERCIFILHO 09/08/2016 07:54:45
#465654
Resposta escolhida
Cara, sinceramente, não consegui entender muito bem a sua dúvida.
Se você quer simplesmente que o programa ignore a mensagem de que existem campos vazios para gravar no banco de dados, basta retirar essa condição nesta parte do código:
[ô]se houver campos em branco informa ao usuario
If Text_receita.Text = [Ô][Ô] Or _
Text_ingredientes.Text = [Ô][Ô] Or _
Text_preparo.Text = [Ô][Ô] Then
MsgBox ([Ô]Existe(m) campo(s) em branco, verifique[Ô])

Simples assim.
Agora se você quiser gravar valores nulos na tabela, aí é outra história. Eu já te respondi em um outro tópico anterior seu. Dá uma verificada lá.
Página 1 de 2 [17 registro(s)]
Tópico encerrado , respostas não são mais permitidas