Fórum Consulta usando uma tabela master e uma detalhe #325265
13/07/2006
0
tenho as seguintes tabelas
[b:827d42ad97]CONSUMO[/b:827d42ad97]
NConsumo *
NCartao
Nome
Origem
Data
[b:827d42ad97]ITENS[/b:827d42ad97]
Controle *
NConsumo
CodMeicamento
Medicamento
Quantidade
Gostaria de mostrar em um DBGrid os seguintes dados
Nome, Origem, Data, Medicamento, e quantidade
Seria uma consulta entre duas datas e usaria um DBLookupCombobox para escolher o nome a ser mostrado e tambem dois MaskEdits para colocar as datas, um botão com o codigo para fazer a chamada da consulta.
So que nao sei como fazer essa consulta, se alguem puder me ajudar ficarei muito grato.
Uso Delphi 5 paradox
Clenio
Curtir tópico
+ 0Posts
13/07/2006
Clenio
[b:223465ec69]Query1 : No SQL stantement available[/b:223465ec69]
procedure TfmConData.BitBtn1Click(Sender: TObject);
begin
With Query1 do
begin
close;
SQL.CLEAR;
Query1.sql.Add (´SELECT C.Nome, C.Destino, C.Data, I.Medicamento, I.Qtde, FROM Consumo C LEFT JOIN Itens I ON I.Numero = C.Numero´);
sql.add(´WHERE C.Data BETWEEN DataInicial AND DataFinal) AND (C.Nome = DBLooKupComboBox1.Text))´);
sql.add (´Order by C.Nome, C.Data´);
params[0].Asstring:= DBLooKupCombobox1.Text;
params[1].asdatetime:=strtoDate(MaskEdit1.text);
params[2].asdatetime:=strtoDate(MaskEdit2.text);
Open;
end;
end;
end.
Por favor se alguem souber o que ta errado, de uma ajudinha, to precisando muito.
Gostei + 0
14/07/2006
Paullsoftware
Gostei + 0
14/07/2006
Clenio
Por favor to precisando muito resolver esse problema, estou dependendo so disso pra terminar.
Abraços.
Gostei + 0
14/07/2006
Paullsoftware
o seu código é esse, eu fiz umas modificações para ver se resolve esse problema
begin With Query1 do begin close; SQL.CLEAR; Query1.sql.Add (´SELECT C.Nome, C.Destino, C.Data, I.Medicamento, I.Qtde, FROM Consumo C LEFT JOIN Itens I ON I.Numero = C.Numero´); sql.add(´WHERE C.Data BETWEEN DataInicial AND DataFinal) AND (C.Nome = DBLooKupComboBox1.Text))´); sql.add (´Order by C.Nome, C.Data´); params[0].Asstring:= DBLooKupCombobox1.Text; params[1].asdatetime:=strtoDate(MaskEdit1.text); params[2].asdatetime:=strtoDate(MaskEdit2.text); Open; end; end;
var aSelect,aLeft,aWhere,aOrderby:String; begin aSelect := ´ SELECT C.Nome, C.Destino, C.Data, I.Medicamento, I.Qtde, FROM Consumo C ´; aLeft := ´ LEFT JOIN Itens I ON (I.Numero = C.Numero) ´; aWhere := ´ WHERE C.Data BETWEEN :pDi AND :pDf) AND (C.Nome = :pNome)´;//Estou criando três paramentros nessa linha o parametro pDi, pDf e pNome... aOrderby := ´ Order by C.Nome, C.Data ´; With Query1 do begin Close; SQL.CLEAR; SQL.Add (´aSelect + aLeft + aWhere + aOrderBy´); Params.ParamByName(´pNome´).AsString := DBLooKupCombobox1.Text; Params.ParamByName(´pDi´).AsString := FormatDateTime(´dd/mm/yyyy´,StrToDate(MaskEdit1.text)); Params.ParamByName(´pDf´).AsString := FormatDateTime(´dd/mm/yyyy´,StrToDate(MaskEdit1.text)); Open; end; end;
espero ter ajudado :wink:
Gostei + 0
14/07/2006
Clenio
o que poderá ser isso ? acho que deve ser uma coizinha de nada, mas que não tem jeito de ir adiante.
Mais uma vez obrigado por tudo, e vamos tentando até dar certo,
Inssistir sempre, desistir jamais.
Gostei + 0
14/07/2006
Paullsoftware
qq coisa vou dar mais uma olhada depois do almoço e vj o que posso fazer :wink:
Gostei + 0
14/07/2006
Emerson Nascimento
begin With Query1 do begin Close; SQL.Text := ´SELECT C.Nome, C.Destino, C.Data, I.Medicamento, I.Qtde ´+ ´FROM Consumo C ´+ ´LEFT JOIN Itens I ON (I.NConsumo = C.NConsumo) ´+ ´WHERE (C.Data BETWEEN :pDi and :pDf) ´+ ´ and (C.Nome = :pNome) ´+ ´ORDER BY C.Nome, C.Data ´; ParamByName(´pNome´).AsString := DBLooKupCombobox1.Text; ParamByName(´pDi´).AsDateTime := StrToDate(MaskEdit1.text); ParamByName(´pDf´).AsDateTime := StrToDate(MaskEdit2.text); Open; end; end;
Gostei + 0
14/07/2006
Clenio
[b:ee1d9f8b72]Query1 :No SQL stantement available[/b:ee1d9f8b72]
Valeu Emerson
Gostei + 0
14/07/2006
Emerson Nascimento
outra coisa... tente rodar essa instrução no Database Desktop.
Gostei + 0
14/07/2006
Paullsoftware
foi o que eu disse pra ele aqui, não adianta insistir se a tecnologia não aceitar a forma como está a instrução SQL...
um abraço Emerson, valeu pela ajuda...
Clenio, tenta ai pelo DataBase Explorer e ver se vai rodar esse script, se sim, é só adaptar as suas necessidades...
Gostei + 0
14/07/2006
Clenio
coloquei essa intrução no Database Explorer como vocês disseram.
SELECT C.Nome, C.Destino, C.Data, I.Medicamento, I.Qtde
FROM Consumo C LEFT JOIN Itens I ON I.Numero = C.Numero
WHERE C.Data BETWEEN :DataInicial AND :DataFinal AND C.Nome = C.Nome
Order by C.Nome, C.Data
está saindo a seguinte mensagem:
P[b:144c1b7446]arameter not set in query string.[/b:144c1b7446]
Me parece que o problema está no parametro do nome porque o resto esta correto, tentei varios parametros, mas não encontrei o correto.
O problema está na linha 3 nesse ponto aqui ( [b:144c1b7446]C.Nome = C.Nome[/b:144c1b7446])
Vejam o que podem fazer agora.
Obrigado mais uma vez.
Gostei + 0
15/07/2006
Micheus
Na proposta do colega [b:e189d3da4f]emerson.en[/b:e189d3da4f], já está corrigida e deve funcionar.
Gostei + 0
15/07/2006
Paullsoftware
Na proposta do colega [b:fd16b282d7]emerson.en[/b:fd16b282d7], já está corrigida e deve funcionar.
Meu camarada, eu não olhei esse detalhe, vlw... :wink:
Gostei + 0
15/07/2006
Clenio
Fiz o teste novamente com o codigo abaixo e sai essa mensagem:
[b:91dfb0c39b]Parameter not set in query string.[/b:91dfb0c39b]
SELECT C.Nome, C.Destino, C.Data, I.Medicamento, I.Qtde
FROM Consumo C LEFT JOIN Itens I ON I.Numero = C.Numero
WHERE C.Data BETWEEN :pDi AND :pDf AND C.Nome = :pNome
tenho que conseguir encontrar um parametro para colocar no lugar do :pNome, ja tentei varios, mas nenhum esta dando certo.
esse ta complicado to quase desistindo, pior é que ja pesquisei em tudo quanto é lugar e não consigo nada parecido.
vou tentando aqui, vamos ver até onde vai.
Abraços e obrigado por tentarem me ajudar.
Gostei + 0
16/07/2006
Micheus
Seu trecho de código, corrigido, com a proposta do colega [b:f9174c54a2]emerson.en[/b:f9174c54a2]:
procedure TfmConData.BitBtn1Click(Sender: TObject); begin With Query1 do begin Close; SQL.Clear; SQL.Add(´SELECT C.Nome, C.Destino, C.Data, I.Medicamento, I.Qtde´); SQL.Add(´FROM Consumo C LEFT JOIN Itens I ON I.Numero = C.Numero´); SQL.Add(´WHERE C.Data BETWEEN :pDi AND :pDf AND C.Nome = :pNome)´); SQL.Add(´ORDER BY C.Nome, C.Data´); ParamByName(´pDi´).AsDateTime := StrToDate(MaskEdit1.text); ParamByName(´pDf´).AsDateTime := StrToDate(MaskEdit2.text); ParamByName(´pNome´).AsString := DBLooKupCombobox1.Text; Open; end; end;
SELECT C.Nome, C.Destino, C.Data, I.Medicamento, I.Qtde FROM Consumo C LEFT JOIN Itens I ON I.Numero = C.Numero WHERE C.Data BETWEEN ´2006/01/01´ AND ´2006/03/31´ AND C.Nome = ´ESTEVAO ARAUJO´ Order by C.Nome, C.Data
[]s
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)