SQL em um form de consulta

Delphi

28/05/2008

[quote:460e37f277=´Moderação´][color=red:460e37f277]Título editado por Massuda

Por favor, não use apenas letras maiúsculas no título/texto.

No caso de reincidência, seus tópicos poderão vir a ser bloqueados.

Leia as :arrow: [url=http://forum.clubedelphi.net/viewtopic.php?t=6689]Regras de Conduta[/url] do fórum.[/color:460e37f277][/quote:460e37f277]
Ola pessoal!!!
Bom se alguem puder me ajudar eu ficaria muito grato!!!
Eu tenho um formulario de cadastro de DOCUMENTO, onde eu tenho vario campos Ex: remetente, Assunto, tipo, especificação, data e assim vai ....
Só que o Remetente é uma Chave estrangeira até ai tudo certo , esta gravando tudo, só que eu tenho um form de CONSULTA DE DOCUMENTOS
onde eu pesquiso por Remetente, data,tipo, Dai quando eu vou no Botao vizualizar todos , dentro do DBGrid só aparece a data e o tipo , o Remetente fica em branco.O que eu tenho que Programar dentro da SQL para aparecer o nome do Rementen?


Rodlima

Rodlima

Curtidas 0

Respostas

Catunda

Catunda

28/05/2008

vc precisa apontar o codigo do remetente constante no cadastro documentos ao seu respectivo codigo na tabela de remetentes, dentro da sua instrução sql, através de join ou where.

se vc postar seu codigo de consulta fica mais facil de esclarecer.


GOSTEI 0
Paulo

Paulo

28/05/2008

Uma consulta SQL ela te mostra aquilo que vc pedir e que tenha gravado em tabela. Se vc grava tudo, veja se no seu AfterPost, vc tenha um ApplyUpdates(-1)(Caso use CDS). Aí é só trazer num select básico. Se vc der(creio que já sabe)um:
Select * from tabela virá tudo na sua query, ou ir especificando campo a campo. Se não mostra na sua consulta, é porque: Não está gravado ou a sua Query não está trazendo na instrução Select.


GOSTEI 0
Rodlima

Rodlima

28/05/2008

entao estou usando esse comando aqui

SELECT * FROM CAD_DOCUMENTOS

pra trazer todos os componentes da tabela do cadastro de documento.

só que o rementen nao vem , pq eh chave secundaria.

Obrigado!!


GOSTEI 0
Paulo

Paulo

28/05/2008

Como o amigo catunda falou. Tem que colocar na Join, pois se é chave estrangeira, ele existe na tabela mãe dele, então tem que fazer Join.


GOSTEI 0
Rodlima

Rodlima

28/05/2008

Como o amigo catunda falou. Tem que colocar na Join, pois se é chave estrangeira, ele existe na tabela mãe dele, então tem que fazer Join.


caro amigo mais como eu uso esse comando Join, pois sou novato em programação.
obrigado


GOSTEI 0
Rodlima

Rodlima

28/05/2008

vc precisa apontar o codigo do remetente constante no cadastro documentos ao seu respectivo codigo na tabela de remetentes, dentro da sua instrução sql, através de join ou where. se vc postar seu codigo de consulta fica mais facil de esclarecer.


me ajuda a usar esse comando Join.


GOSTEI 0
Rodlima

Rodlima

28/05/2008

Uma consulta SQL ela te mostra aquilo que vc pedir e que tenha gravado em tabela. Se vc grava tudo, veja se no seu AfterPost, vc tenha um ApplyUpdates(-1)(Caso use CDS). Aí é só trazer num select básico. Se vc der(creio que já sabe)um: Select * from tabela virá tudo na sua query, ou ir especificando campo a campo. Se não mostra na sua consulta, é porque: Não está gravado ou a sua Query não está trazendo na instrução Select.


Caro Amigo mais entao no form de documentos esta gravando normal , eu vejo o ibexpert e la o remeten esta gravando normal , só que na consulta de documentos dentro do DBGrid que nao esta aparecendo o campo remetente , pois eh chave estrangeira , como posso fazer pra chamar o campo?
se tiver que usar um Join eu nao sei usar tem como voce dar um exemplo?
ou outro jeitooo
obrigado!


GOSTEI 0
Catunda

Catunda

28/05/2008

Usando WHERE :

SELECT A.*,B.NOME_REMETENTE FROM CAD_DOCUMENTOS A, CAD_REMETENTES B
WHERE A.COD_REMET = B.ID_REMETENTE

--------------------------------------------------------------------------------
Usando JOIN :

SELECT A.*,B.NOME_REMETENTE FROM CAD_DOCUMENTOS A
INNER JOIN CAD_REMETENTES B
ON (A.COD_REMET = B.ID_REMETENTE)


GOSTEI 0
Rodlima

Rodlima

28/05/2008

Usando WHERE : SELECT A.*,B.NOME_REMETENTE FROM CAD_DOCUMENTOS A, CAD_REMETENTES B WHERE A.COD_REMET = B.ID_REMETENTE -------------------------------------------------------------------------------- Usando JOIN : SELECT A.*,B.NOME_REMETENTE FROM CAD_DOCUMENTOS A INNER JOIN CAD_REMETENTES B ON (A.COD_REMET = B.ID_REMETENTE)


O GRANDE PARCEIRO
DEU CERTO JA VIUU
USEI ISSO AQUI

select R.NOME ,DOC.DATA_CAD, DOC.TIPO
FROM CAD_DOCUMENTOS DOC, REMETENTE R
WHERE DOC.ID_COD_REMET = R.ID_CODIGO

MUITO OBRIGADO!!


GOSTEI 0
Rodlima

Rodlima

28/05/2008

Usando WHERE : SELECT A.*,B.NOME_REMETENTE FROM CAD_DOCUMENTOS A, CAD_REMETENTES B WHERE A.COD_REMET = B.ID_REMETENTE -------------------------------------------------------------------------------- Usando JOIN : SELECT A.*,B.NOME_REMETENTE FROM CAD_DOCUMENTOS A INNER JOIN CAD_REMETENTES B ON (A.COD_REMET = B.ID_REMETENTE)


Agora eu estou no botao de Edit de Remetente, quero que quando clico dentro do edit uma letra ja traz todos os dados que tem tem dentro do Edit estou usando esse comando aqui:

procedure TfrmPesqDoc.edtPesquisa1Change(Sender: TObject);
begin
cdsCadDoc.Close;
sqlCadDoc.Close;
sqlCadDoc.SQL.CLear;
sqlCadDoc.SQL.ADD(´select R.NOME ,DOC.DATA_CAD, DOC.TIPO, DOC.assunto, DOC.data_emiss, DOC.decla_cont, DOC.especificacao, DOC.pessoa_emiss´);
sqlCadDoc.SQL.ADD (´FROM CAD_DOCUMENTOS DOC, REMETENTE R´);
sqlCadDoc.SQL.ADD (´WHERE DOC.ID_COD_REMET = R.ID_CODIGO UPPER(R.NOME)LIKE ´+
UpperCase(quotedStr(´¬´+edtPesquisa1.text+´¬´)+´ORDER BY R.NOME ASC´));
sqlCadDoc.Open;
cdsCadDoc.open;
END;

Mais esta dando um erro na penultima linha de UPPER

Obrigado Amigo!


GOSTEI 0
Joaoshi

Joaoshi

28/05/2008

Colega, parece que falta um AND após o R.ID_CODIGO

sqlCadDoc.SQL.ADD (´WHERE DOC.ID_COD_REMET = R.ID_CODIGO UPPER(R.NOME)LIKE ´+



sqlCadDoc.SQL.ADD (´WHERE DOC.ID_COD_REMET = R.ID_CODIGO [b]AND[/b] UPPER(R.NOME)LIKE ´+


Espero ter ajudado.


GOSTEI 0
Rodlima

Rodlima

28/05/2008

Colega, parece que falta um AND após o R.ID_CODIGO
sqlCadDoc.SQL.ADD (´WHERE DOC.ID_COD_REMET = R.ID_CODIGO UPPER(R.NOME)LIKE ´+
sqlCadDoc.SQL.ADD (´WHERE DOC.ID_COD_REMET = R.ID_CODIGO [b]AND[/b] UPPER(R.NOME)LIKE ´+
Espero ter ajudado.


grande amigo ficou assim:

sqlCadDoc.SQL.ADD (´WHERE DOC.ID_COD_REMET = R.ID_CODIGO [b]AND [b] UPPER(R.NOME)LIKE ´+

só que esta dando um erro de [ (colchete)
valeu parceiro


GOSTEI 0
Martins

Martins

28/05/2008

Seu código não deve ficar assim:
sqlCadDoc.SQL.ADD (´WHERE DOC.ID_COD_REMET = R.ID_CODIGO [b]AND[/b] UPPER(R.NOME)LIKE ´+


Ele deve ficar assim:

sqlCadDoc.SQL.ADD (´WHERE DOC.ID_COD_REMET = R.ID_CODIGO AND UPPER(R.NOME)LIKE ´+


O colchete colocado fazia parte da tag de formatação aqui do fórum só isso, tenta agora aí.

Boa sorte e bons códigos.


GOSTEI 0
Rodlima

Rodlima

28/05/2008

Seu código não deve ficar assim:
sqlCadDoc.SQL.ADD (´WHERE DOC.ID_COD_REMET = R.ID_CODIGO [b]AND[/b] UPPER(R.NOME)LIKE ´+
Ele deve ficar assim:
sqlCadDoc.SQL.ADD (´WHERE DOC.ID_COD_REMET = R.ID_CODIGO AND UPPER(R.NOME)LIKE ´+
O colchete colocado fazia parte da tag de formatação aqui do fórum só isso, tenta agora aí. Boa sorte e bons códigos.


Grande Parceirooo deu Certo viu
Muito Obrigado mesmooooooooooooooooooo

viu voce tem em mão ai algum código para pesquisar por data tb??
eu coloquei um de data de inicio e data de fim para pesquisar tb.

mais se voce nao tiver não prescisa nao..
obrigado parceiro!


GOSTEI 0
Martins

Martins

28/05/2008

[quote:f80f6a70fb=´Martins´]Seu código não deve ficar assim:
sqlCadDoc.SQL.ADD (´WHERE DOC.ID_COD_REMET = R.ID_CODIGO [b]AND[/b] UPPER(R.NOME)LIKE ´+
Ele deve ficar assim:
sqlCadDoc.SQL.ADD (´WHERE DOC.ID_COD_REMET = R.ID_CODIGO AND UPPER(R.NOME)LIKE ´+
O colchete colocado fazia parte da tag de formatação aqui do fórum só isso, tenta agora aí. Boa sorte e bons códigos.


Grande Parceirooo deu Certo viu
Muito Obrigado mesmooooooooooooooooooo

viu voce tem em mão ai algum código para pesquisar por data tb??
eu coloquei um de data de inicio e data de fim para pesquisar tb.

mais se voce nao tiver não prescisa nao..
obrigado parceiro![/quote:f80f6a70fb]

Vc usa Firebird?
vc pode usar [color=red:f80f6a70fb][b:f80f6a70fb]Between[/b:f80f6a70fb][/color:f80f6a70fb]

Um pequeno exemplo para vc adaptar aí, não compilei pois estou sem a ferramenta aqui.
Query1.Close;
Query1.Sql.Clear;
Query1.Sql.Add(´SELECT * FROM VENDAS
WHERE DATA_VENCIMENTO BETWEEN :PDATA1 AND :PDATA2´);
Query1.ParamByName(´PDATA1´).AsDate := StrToDate(edData1.Text);
Query1.ParamByName(´PDATA2´).AsDate := StrToDate(edData2.Text);
Query1.Open;


Boa sorte e bons códigos.


GOSTEI 0
Rodlima

Rodlima

28/05/2008

[quote:b77fac1d25=´Martins´]Seu código não deve ficar assim:
sqlCadDoc.SQL.ADD (´WHERE DOC.ID_COD_REMET = R.ID_CODIGO [b]AND[/b] UPPER(R.NOME)LIKE ´+
Ele deve ficar assim:
sqlCadDoc.SQL.ADD (´WHERE DOC.ID_COD_REMET = R.ID_CODIGO AND UPPER(R.NOME)LIKE ´+
O colchete colocado fazia parte da tag de formatação aqui do fórum só isso, tenta agora aí. Boa sorte e bons códigos.


Amigo o comando de data estou realizando assim:

procedure TfrmPesqDoc.btnProcessarClick(Sender: TObject);
var
Inicio : string;
Final: string;
begin
If dtpFim.Date < dtpInicio.Date Then
begin
ShowMessage(´Intervalo de datas inválido, a data inicial é maior que a data final!´);
dtpFim.Date := dtpInicio.Date;
end
Else
begin
Inicio := DateToStr(dtpInicio.Date);
Final := DateToStr(dtpFim.Date);
sqlCadDoc.Close;
sqlCadDoc.SQL.Clear;
sqlCadDoc.SQL.Text := ´SELECT * FROM CAD_DOCUMENTOS WHERE DATA_EMISS >=:pInicioa and DATA_EMISS <=:pFinal ORDER BY DATA_EMISS ´;
sqlCadDoc.ParamByName(´pInicial´).AsDateTime := strtodate(Inicio);
sqlCadDoc.ParamByName(´pFinal´).Asdatetime := strToDate(Final);
sqlCadDoc.Open;
end;

//textar se o resultado da SQL é vazio.
if sqlCadDoc.RecordCount = 0 then
begin
ShowMessage (´Não Foram Localizados Documentos Neste Periodo!´);
abort;
end;

só que esta dando erro no parametro pINicio

valew


GOSTEI 0
Martins

Martins

28/05/2008

procedure TfrmPesqDoc.btnProcessarClick(Sender: TObject); 
var 
Inicio, Final: TDate; 
begin 
   If dtpFim.Date < dtpInicio.Date Then 
   begin 
      ShowMessage(´Intervalo de datas inválido, a data inicial é maior que a data final!´); 
     dtpFim.Date := dtpInicio.Date; 
   end 
   Else 
   begin 
      Inicio := dtpInicio.Date; 
      Final := dtpFim.Date; 
      sqlCadDoc.Close; 
      sqlCadDoc.SQL.Clear; 
      sqlCadDoc.SQL.Text := ´SELECT * FROM CAD_DOCUMENTOS WHERE DATA_EMISS >=:pInicioa and DATA_EMISS <=:pFinal ORDER BY DATA_EMISS ´; 
      sqlCadDoc.ParamByName(´pInicial´).AsDate := Inicio; 
      sqlCadDoc.ParamByName(´pFinal´).AsDate := Final; 
      sqlCadDoc.Open; 
   end; 

//textar se o resultado da SQL é vazio. 
if sqlCadDoc.IsEmpty then 
begin 
ShowMessage (´Não Foram Localizados Documentos Neste Periodo!´); 
abort; 
end; 


Tente assim.


GOSTEI 0
POSTAR