PREENCHER UM MESMO COMBO COM DADOS DIFERENTES

ADRIANOM 19/02/2014 13:48:38
#434984
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:

  
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...?
LLAIA 19/02/2014 14:07:53
#434985
Vc pode fazer uma verificação antes de adicionar no combo:

    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
ADRIANOM 19/02/2014 14:32:40
#434986
LLAIA

Uso o Banco de dados Firebird.
MARCELO.TREZE 19/02/2014 15:46:10
#434990
Resposta escolhida
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
ADRIANOM 19/02/2014 16:07:56
#434994
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!!
Tópico encerrado , respostas não são mais permitidas