inner join

Delphi

27/04/2005

ESTOU USANDO O CÓDIGO ABAIXO PARA SELECIONAR REGISTROS EM UMA TBL
MESTRE-DETALHE POREM, ELE SÓ RETORNA RESULTADOS QUANDO HÁ, NA TBL
DETALHE ALGUM REGISTRO...
COMO POSSO FAZER PARA QUE ELE MOSTRE TODOS OS REGISTROS INDEPENDENTE
DE QUE HAJA OU NÃO REGISTROS NA TBL DETALHE?
DEVO USAR INNER JOIN? COMO USÁ-LO? POR FAVOR ME DIGAM OMO APLICAR
ISSO NO MEU CASO!!
DESDE JÁ MEU MUITO OBRIGADO!



Case rgpOpcoes.ItemIndex Of
0:
Begin
If (EdtPesquisa.Text <> ´´) Then

Begin
DMProcINSS.QryPesquisa.Close;
DMProcINSS.QryPesquisa.SQL.Clear;
DMProcINSS.QryPesquisa.SQL.Add(´SELECT * FROM TblCadProcesso, TblProcAdv, TblMovimentacao ´);
DMProcINSS.QryPesquisa.SQL.Add(´WHERE TblCadProcesso.AUTOR LIKE ´´+EdtPesquisa.Text+´¬´ ´);
DMProcINSS.QryPesquisa.SQL.Add(´AND TblCadProcesso.NUMPROCESSO = TblMovimentacao.NUMPROCESSO ´);
DMProcINSS.QryPesquisa.SQL.Add(´AND TblCadProcesso.COD_PROC_ADV = TblProcAdv.CODPROCADV ´);
DMProcINSS.QryPesquisa.SQL.Add(´AND DATACADASTRO BETWEEN :Data1´);
DMProcINSS.QryPesquisa.SQL.Add(´AND :Data2´);
DMProcINSS.QryPesquisa.parambyname(´Data1´).Value := StrToDate(Data1.Text);
DMProcINSS.QryPesquisa.parambyname(´Data2´).Value := StrToDate(Data2.Text);
DMProcINSS.QryPesquisa.SQL.Add(´ORDER BY DATACADASTRO´);
DMProcINSS.QryPesquisa.Open;
DMProcINSS.QryPesquisa.Refresh;
ContarPesquisa.Caption := IntToStr(DMProcINSS.QryPesquisa.RecordCount);
If DMProcINSS.QryPesquisa.IsEmpty Then
ShowMessage(´Nada foi Encontrado de Acordo com a sua Pesquisa´);
EdtPesquisa.SetFocus;
End
Else
ShowMessage(´Estão faltando parâmetros para a Pesquisa´);
End;


Alexandretavares

Alexandretavares

Curtidas 0

Respostas

Raserafim

Raserafim

27/04/2005

alexandre, você deverá usar o LEFT JOIN, assim vc estará dizendo que quer todos os registros do lado esquerdo do relacionamento e apenas os que tenham correspondência do lado direito. tente o seguinte:
...
DMProcINSS.QryPesquisa.SQL.Add(´SELECT * FROM TblCadProcesso LEFT JOIN TblMovimentacao ON TblCadProcesso.NUMPROCESSO = TblMovimentacao.NUMPROCESSO LEFT JOIN TblProcAdv ON TblCadProcesso.COD_PROC_ADV = TblProcAdv.CODPROCADV ´); 
DMProcINSS.QryPesquisa.SQL.Add(´WHERE TblCadProcesso.AUTOR LIKE "´+EdtPesquisa.Text+´¬" ´); 
DMProcINSS.QryPesquisa.SQL.Add(´AND DATACADASTRO BETWEEN :Data1´); 
DMProcINSS.QryPesquisa.SQL.Add(´AND :Data2´);
...


pelo que entendi o mestre é o TblCadProcesso, fiz o exemplo assumindo assim, caso não seja tem que trocar as posições.


GOSTEI 0
Alexandretavares

Alexandretavares

27/04/2005

Muito Obrigado pela dica ´raserafim´ !


GOSTEI 0
POSTAR