CAMPOS NULOS

FRATA 03/08/2016 13:41:40
#465433
Prezados colegas:
Estou tentando adaptar um código de cadastro de receitas que não aceita campos nulos, porém necessito que no novo programa possam ser inseridos campos nulos, deixando apenas os dois primeiros, que são nome e endereço não recebendo campos nulos, os demais podem ser nulos. Será que alguém pode me ajudar.
Antecipadamente agradeço a todos.
Abaixo estou postando o código. Obrigado!

[ô]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
ACCIOLLY 03/08/2016 14:12:37
#465437
Olha se for MySQL você pode definir um campo como não nulo e definir também um valor padrão. Ou seja, na hora do INSERT se não for inserido nada nesse campo, ele assume esse valor padrão. Não sei se em outros bancos tem essa opção.
PERCIFILHO 03/08/2016 15:19:41
#465441
Foi postado já várias dúvidas à respeito disso e eu me lembro que também já respondi sobre isso.
Aqui tem uma postagem, veja se te ajuda.

Salvar Data Null

ou

Insert Into Null ou Data

Mas a melhor maneira que você poderia fazer o seu Insert, é através de comandos parametrizados, evita muitos erros e é mais seguro.
PERCIFILHO 11/08/2016 07:57:38
#465714
Conseguiu resolver o seu problema?

string conseguiu;
if (conseguiu == [Ô]sim[Ô])
{
EncerraTopico(true);
}
else
{
EncerraTopico(false);
}

Tópico encerrado , respostas não são mais permitidas