BB ACCESS NOT IN N?O RETORNA VALORES

JORGESALES 13/09/2015 22:50:07
#451347
Meus amigos estou com um probleminha com a seguinte consulta:
esta aqui não retorna nenhum valor:
rs.Open [Ô]Select * from tblBanco where (CelularBD Not in (Select Celular From tblCad)) order by FormaBD[Ô], db, 3, 3

Enquanto que esta aqui (sendo a mesma tabela) retorna mais de mil registros:
rs.Open [Ô]Select * from tblBanco where (NomeBD Not in (Select Nome From tblCad)) order by FormaBD[Ô], db, 3, 3

Sendo que a única diferença é o campo.
Os celulares estão cadastrados assim [txt-color=#0000f0](##)####-####[/txt-color]
e no banco de dados está como texto assim como o campo Nome,
não entendo porque não encontra valores quando consulto pelo celular.
Desde já agradeço a todos que possam ajudar.

JORGESALES 13/09/2015 23:13:42
#451348
Pessoal, fiz uns testes aqui e descobri que se tiver campos vazios
ele não pesquisa, alguém sabe como resolver?
PLUGSOFTSM 14/09/2015 07:58:06
#451352
Amigo... Verifica se na tabela tblBanco o campo celular aparece com valores nulos ou na forma de string vazia
Se for string vazia, povavelmente vc tem um registro com string vazia tb na tabela tblcad... se for isso, não vai te refornar nenhum registro mesmo
daí vc precisa mudar a consulta
SINCLAIR 14/09/2015 08:19:04
#451354
Colega,

No Access não sei como funciona o Coalesce, mas tem a NZ, se não me engano. O objetivo é trocar Null por conteúdo válido.

Bem, o que está havendo é que há conteúdo null na sua tabela e precisa ser convertido para vazio (não confunda vazio com null).

Tente assim, usando o NZ (no PostGreSQL é Coalesce, no Access acho que é também, mas só tenho certeza do NZ):

rs.Open [Ô]Select * from tblBanco where (NZ(CelularBD,[ô][ô]) Not in (Select NZ(Celular,[ô][ô]) From tblCad)) order by FormaBD[Ô], db, 3, 3


Tudo de bom.
PLUGSOFTSM 14/09/2015 08:39:46
#451358
Amigo... Verifica se na tabela tblBanco o campo celular aparece com valores nulos ou na forma de string vazia
Se for string vazia, povavelmente vc tem um registro com string vazia tb na tabela tblcad... se for isso, não vai te refornar nenhum registro mesmo
daí vc precisa mudar a consulta
JORGESALES 14/09/2015 22:06:13
#451400
Citação:

:

rs.Open [Ô]Select * from tblBanco where (NZ(CelularBD,[ô][ô]) Not in (Select NZ(Celular,[ô][ô]) From tblCad)) order by FormaBD[Ô], db, 3, 3



Obrigado pela ajuda mas deu esse erro aí:
FFCOUTO 14/09/2015 23:50:21
#451401
Jorge,
Você vai precisar elimiar os campos nulos da pesquisa principal.
Teste a consulta abaixo:

rs.Open [Ô]SELECT * FROM tblBanco WHERE (NOT CelularBD IS NULL) AND (CelularBD NOT IN (SELECT Celular FROM tblCad)) ORDER BY FormaBD[Ô], db, 3, 3


Se não funcionar, seria melhor vc postar o banco que você está usando com alguns dados, pois isso facilitaria na montagem da consulta.
JABA 15/09/2015 02:52:16
#451402
Resposta escolhida
Citação:

rs.Open [Ô]Select * from tblBanco where (CelularBD Not in (Select Celular From tblCad)) order by FormaBD[Ô], db, 3, 3



JorgeSales, o que acontece é que para cada valor CelularBD em tblBanco, vai se fazer uma comparação com todos os registros da tabela tblCad para o campo Celular. Sendo assim, para que a consulta retorne algum dado, será necessário que não exista qualquer valor correspondente entre as tabelas.

Ex: Com o registros abaixo, a consulta não traria dado algum, pois o valor 1 de tblBanco do campo CelularBD está incluso na tabela tblCad para o campo Celular.
_____________________________________
tblBanco
CelularBD
1
_____________________________________

tblCad
Celular
5
4
3
2
1
_____________________________________

Agora, se estivesse conforme abaixo, aí retornaria um registro, pois o valor 0 não está contido na outra tabela.
_____________________________________
tblBanco
CelularBD
0
_____________________________________

tblCad
Celular
5
4
3
2
1
_____________________________________

Faça o teste manualmente e verifique se existe campos de telefone com os mesmos valores em cada tabela, basta que exista apenas uma igualdade para que o registro não seja selecionado para a consulta.
JORGESALES 15/09/2015 23:18:04
#451440
[txt-color=#0000f0]Fabiano Couto[/txt-color], seu código não apresentou
resultados mas acho que é porque na tblCad também tem campos nulos
no Celular.

[txt-color=#0000f0]JABA[/txt-color], obrigado pela explicação
eu já fiz testes manuais e como postei anteriormente eu percebi
que a questão é por existir campos em branco tando numa tabela
quanto na outra.




JABA 15/09/2015 23:43:08
#451441
Citação:

JABA, obrigado pela explicação
eu já fiz testes manuais e como postei anteriormente eu percebi
que a questão é por existir campos em branco tando numa tabela
quanto na outra.



JORGESALES, os campos vazios também entram como critério no exemplo que coloquei. Tente assim:

rs.Open [Ô]SELECT * FROM tblBanco WHERE CelularBD NOT IN (SELECT Celular FROM tblCad [txt-color=#e80000]WHERE Celular IS NOT NULL[/txt-color]) ORDER BY FormaBD[Ô], db, 3, 3 

ou

rs.Open [Ô]SELECT * FROM tblBanco WHERE CelularBD [txt-color=#e80000]IS NOT NULL AND CelularBD [/txt-color] NOT IN (SELECT Celular FROM tblCad WHERE Celular IS NOT NULL) ORDER BY FormaBD[Ô], db, 3, 3


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