PREENCHER UM MESMO COMBO COM DADOS DIFERENTES
Prezados,
Sim, sou eu novamente com dúvida sobre combo, porém com uma condição inédita em minha linha de programação.
Nunca precisei preencher um combo com dados distintos de uma mesma tabela do banco de dados.
Gostaria de preencher o combo [Ô]cboNome[Ô] com os dados da tabela de Clientes: [Ô]Nome[Ô] e [Ô]Fantasia[Ô] e ignorar os casos em que os dados estiverem [Ô]Null[Ô]. Pois quando você cadastra um cliente [Ô]Pessoa FÃsica[Ô] o programa deixa Null o nome Fantasia, e quando cadastra um cliente [Ô]Pessoa JurÃdica[Ô] o programa deixa Null o Nome do cliente.
Analisem o código que utilizei para preencher, mas ele dá erro quando analisa os casos Null:
O que devo fazer...?
Sim, sou eu novamente com dúvida sobre combo, porém com uma condição inédita em minha linha de programação.
Nunca precisei preencher um combo com dados distintos de uma mesma tabela do banco de dados.
Gostaria de preencher o combo [Ô]cboNome[Ô] com os dados da tabela de Clientes: [Ô]Nome[Ô] e [Ô]Fantasia[Ô] e ignorar os casos em que os dados estiverem [Ô]Null[Ô]. Pois quando você cadastra um cliente [Ô]Pessoa FÃsica[Ô] o programa deixa Null o nome Fantasia, e quando cadastra um cliente [Ô]Pessoa JurÃdica[Ô] o programa deixa Null o Nome do cliente.
Analisem o código que utilizei para preencher, mas ele dá erro quando analisa os casos Null:
Private Sub CarregarClientes()
With ConConexao
.ActiveConnection = CONEXAO
.CommandType = adCmdText
.CommandText = [Ô]SELECT NOME, FANTASIA FROM CLIENTES;[Ô]
Set RSClientes = .Execute
End With
Do While Not RSClientes.EOF
On Error Resume Next
cboNome.AddItem RSClientes!NOME
cboNome.AddItem RSClientes!FANTASIA
RSClientes.MoveNext
Loop
If cboNome.ListCount < 1 Then Exit Sub
cboNome.ListIndex = 0
cboNome.Text = [Ô][Ô]
RSClientes.Close
End Sub
O que devo fazer...?
Vc pode fazer uma verificação antes de adicionar no combo:
Vc também pode fazer na sua query isso, e evitar esse If no Loop. Qual o banco que vc está usando?
Acredito que o melhor de tudo, é mudar o modelo do teu banco se possÃvel. Por exemplo, vc pode ter uma tabela genérica chamada Pessoa e mais duas tabelas sendo uma PessoaFisica e PessoaJuridica. Dá uma estuda em generalização e especialização. Esse link ajuda um pouco: Generalização e Especialização
Do While Not RSClientes.EOF
On Error Resume Next
If Trim(RSClientes!NOME) = [Ô][Ô] Then
cboNome.AddItem RSClientes!FANTASIA
Else
cboNome.AddItem RSClientes!NOME
End If
RSClientes.MoveNext
Loop
Vc também pode fazer na sua query isso, e evitar esse If no Loop. Qual o banco que vc está usando?
Acredito que o melhor de tudo, é mudar o modelo do teu banco se possÃvel. Por exemplo, vc pode ter uma tabela genérica chamada Pessoa e mais duas tabelas sendo uma PessoaFisica e PessoaJuridica. Dá uma estuda em generalização e especialização. Esse link ajuda um pouco: Generalização e Especialização
LLAIA
Uso o Banco de dados Firebird.
Uso o Banco de dados Firebird.
eu faria um pouquinho diferente veja
Do While Not RSClientes.EOF
On Error Resume Next
cboNome.AddItem IIF(IsNull(RSClientes!NOME) = True, RSClientes!FANTASIA, RSClientes!NOME)
RSClientes.MoveNext
Loop
Llaia,
Obrigado pela presteza!
Sua sugestão funcionou, porém ele preencheu o combo com uma linha em branco quando esta estava cadastrada como [Ô]Null[Ô]. Como se fosse um entrer de uma linha para outra.
Marcelo Treze
Eita.... deu certinho sua sugestão.
Mais uma vez obrigado!!
Obrigado pela presteza!
Sua sugestão funcionou, porém ele preencheu o combo com uma linha em branco quando esta estava cadastrada como [Ô]Null[Ô]. Como se fosse um entrer de uma linha para outra.
Marcelo Treze
Eita.... deu certinho sua sugestão.
Mais uma vez obrigado!!
Tópico encerrado , respostas não são mais permitidas