INNER JOIN

JORGESALES 26/11/2016 20:16:12
#469261
Pessoal boa noite, estou fazendo uma busca em uma tabela e gostaria que, se houvesse compras para o registro
ele mostrasse, o problema é que se não houver compras ele não busca, claro que sei que o erro está na consulta
e por isso estou aqui, segue código:
rs.Open [Ô]select tblCad.*,tbPedidos.Codcli from tblCad inner join tbPedidos on tblCad.Codigo=tbPedidos.CodCli where [Ô] & Campo & [Ô] Like[ô][Ô] & Replace(TEXTO, [Ô][ô][Ô], [Ô][ô][ô][Ô]) & [Ô]%[ô] Order by SIT Asc, Prev_Comp, Nome[Ô], db, 3, 3

Eu pretendo exibir as compras em uma listview separada, no momento já estou fazendo isso com
o envento Click da listview, só que toda vez que um registro é selecionado há uma consulta ao banco de dados
e sei que isso pode ser evitado.

Um dia pretendo trabalhar com banco de dados MySql ou qualquer outro online, por isso estou aprendendo
a evitar ao maximo ficar abrindo e fechando com consultas desnecessárias.

Desde já agradeço a todos pela atenção.
KERPLUNK 26/11/2016 21:25:05
#469265
Você faz a pesquisa normalmente. Antes de buscar qualquer valor no recordset, você verifica se ele possui registros. Caso não possua, as propriedades EOF e BOF estarão ambas com valor [Ô]true[Ô]. Então basta testar:

if rs.EOF = True and rs.BOF = True
[ô]mensagem dizendo que não tem registros
else
[ô]faz o que quiser pois tem registros a consulta.
end if
KERPLUNK 26/11/2016 21:29:24
#469266
E mais uma coisa bem importante:
Bancos de dados mais [Ô]parrudos[Ô] como o MySQL, não são necessariamente para serem usados de forma online. Aliás, deixar um banco de dados online com portas abertas publicamente, é bem arriscado, pois existem ataques bem especializados para derrubar seu banco. E acredite a mulecada derruba só pela diversão. O mais apropriado, é usar uma WebAPI e isso implicaria em um [Ô]upgrade[Ô] para .NET, coisa que já vi que você já deu uma olhada, ainda que por cima. Garanto 100%, que você vai gostar MUITO mais de .NET que do VB6/VBA que está usando agora. Vai por mim, quanto antes você migrar, melhor. Sei que você não trabalha com programação em tempo integral, mas com total e absoluta certeza, .NET é muito, mas muito melhor de fazer praticamente tudo que você faz. Coisas que você demorar dias e até semanas com VB6, fazendo em .NET, leva literalmente minutos e fica mais rápido, mais [Ô]aberto[Ô] à melhorias e muito mais simples de ser lido como código.
JORGESALES 26/11/2016 21:55:41
#469269
Kerplunk, mais uma vez sou muito grato por sua atenção...
Minha ideia era exibir todos os dados de clientes que tenham ou
não compras cadastradas, mas você me deu uma ideia que vou
tentar amadurecer aqui...
Quanto ao .NET, só tenho boas experiencias e é algo que está em
meus planos para estudos futuros.
Vou tentar o C#, estou acompanhando os cursos do professor Gustavo
Guanabara
que são quase tão bons quanto os do professor Mário Andrade
(o quase é porque eles são gratuitos e por isso não oferece suporte ou algo mais aprofundado, mas dá pra aprender muito)
e estou estudando POO em PHP pois é paracido com o C#.
KERPLUNK 26/11/2016 22:52:10
#469272
Na verdade entendendo o POO, qualquer linguagem fica praticamente tudo a mesma coisa. PHP, C#, VB, Delphi, F#, Java, C++, fica tudo praticamente a mesma coisa. Tem vezes que nem se nota que linguagem está escrevendo.
JORGESALES 27/11/2016 00:01:47
#469273
Melhor ainda, comecei com C# mas vi que o PHP é quase a mesma coisa, POO é fundamental nos dias
de hoje, mas não adianta querer dominar o mundo, prefiro ser [Ô]especialista[Ô] em uma ou duas linguagens....
KERPLUNK 27/11/2016 00:18:14
#469276
Aí é que está o engano. Em se tratando de programação, por incrível que pareça, não se estuda linguagem, mas sim conceitos. é o erro mais comum entre quem tem pouco domínio de conceitos. Uma analogia bem simples é com línguas faladas. Espanhol, português e italiano, são todas línguas oriundas predominantemente do latim vulgar. Então dominando latim vulgar, você terá uma facilidade maior para domínio de todas as línguas oriundas dessa. Você estuda conceitos, como a língua funciona e as demais vem meio que [Ô]de carona[Ô].
DUMMIES 28/11/2016 12:15:59
#469291
Resposta escolhida
Jorge.
Vi seu problema e eu normalmente uso o LEFT JOIN ao invés de INNER JOIN.
Inner Join, eu só uso onde eu tenho certeza que existe informações relacionadas entre tabelas. No geral faço uso do LEFT JOIN trato da informação apresentada da forma que eu achar melhor.
No seu caso eu alteraria o select:

De:
rs.Open [Ô]select tblCad.*,tbPedidos.Codcli from tblCad inner join tbPedidos on tblCad.Codigo=tbPedidos.CodCli where [Ô] & Campo & [Ô] Like[ô][Ô] & Replace(TEXTO, [Ô][ô][Ô], [Ô][ô][ô][Ô]) & [Ô]%[ô] Order by SIT Asc, Prev_Comp, Nome[Ô], db, 3, 3


Para:
rs.Open [Ô]select tblCad.*,tbPedidos.Codcli from tblCad left join tbPedidos on tblCad.Codigo=tbPedidos.CodCli where [Ô] & Campo & [Ô] Like[ô][Ô] & Replace(TEXTO, [Ô][ô][Ô], [Ô][ô][ô][Ô]) & [Ô]%[ô] Order by SIT Asc, Prev_Comp, Nome[Ô], db, 3, 3

Tente isso e veja o resultado.

[]s

JCM0867 29/11/2016 22:37:16
#469319
Entendendo sobre Inner Join, Right Join, Left Join, etc.




[txt-color=#0000f0]Precisando de um Sistema de Gestão Educacional?[/txt-color]
Desenvolvido em VB.NET + SQL Server + Crystal Reports
Conheça nossa Solução: www.cjsystem.com.br




JORGESALES 30/11/2016 23:59:28
#469343
[txt-color=#0000f0]DUMMIES[/txt-color], obrigado pela dica, até o momento usar o Inner Join já
foi um grande avanço, quanto mais estudo mais vejo que tenho que
estudar mais. Vou testar aqui e postarei o resultado.
[txt-color=#0000f0]JCM0867 [/txt-color]obrigado pela ilustração, farei bom proveito dela.
JORGESALES 07/12/2016 21:05:37
#469497
[txt-color=#0000f0]DUMMIES[/txt-color] muito obrigado por sua cooperação,
funcionou perfeitamente.
Tópico encerrado , respostas não são mais permitidas