QR c/ WHERE- erro no preview do Relatório
10/12/2003
0
Estou usando o Quick Report no Delphi 7 com dbExpress. Relacionei o relatorio c/ uma Query e quando dou um preview no relatório consigo visalizar perfeitamente os dados de acordo c/ minha consulta SQL. Mas quando rodo o programa, na hora de dar o preview ocorre um erro na minha consulta: ´column unknown ...(nome do campo)... ´. Já percebi que não importa qual campo seja, esse erro ocorre sempre no campo que vem após a cláusula where. Se eu não utilizar a cláusula o erro não ocorre. Acontece que eu preciso utilizá-la.
Aqui está o código:
procedure TfrmPesquisa.btnRelatoClick(Sender: TObject);
begin
(* Preview Relatório *)
If not Assigned(frmRelatorio) then
frmRelatorio := TfrmRelatorio.Create(Application);
frmRelatorio.Prepare;
with dtmSaida.SQLQuery3, SQL do begin
Close;
Clear;
Add(´Select S.DOCUMENTO, P.NMPRODUTO, T.NMDEPTO,´+
´ S.DATASAIDA from PRODUTO P, DEPTO T, SAIDA S,´+
´ DADOSSAIDA D where (P.IDGRUPO = D.IDGRUPO) AND´+
´ (D.IDPRODUTO = P.IDPRODUTO) AND (S.IDDEPTO = T.IDDEPTO)´);
Open;
frmRelatorio.Preview;
end;
end
Usando join funciona, mas eu precisarei usar a cláusula WHERE de qq maneira.
Add(´Select S.DOCUMENTO, P.NMPRODUTO, T.NMDEPTO,´+
´ S.DATASAIDA from PRODUTO P, DEPTO T join´+
´ DADOSSAIDA D on P.IDGRUPO = D.IDGRUPO and´+
´ D.IDPRODUTO = P.IDPRODUTO join SAIDA S on´+
´ S.IDDEPTO = T.IDDEPTO´);
Alguém poderia me ajudar?
[b:f4ab50b795]Titulo editado pelo Moderador (AZ) - Removido: ´Ajudem!!Por Favor! QR c/ WHERE- erro no preview do Relatório´[/b:f4ab50b795]
Marcela_m
Posts
10/12/2003
Frare
Verifique no final de cada lina vc deve dar um espaço ex.:
´ Where codigo=codigo and ´+
´par=par and ´+
´n=n ´;
Teste sua aplicação novamente.
Espero ter ajudado :wink:
11/12/2003
Marcela_m
Obrigada pela atenção, mas realmente não é isso. A consulta SQL é executada em qualquer outro lugar normalmente, e só quando eu rodo o programa o dou preview no relatório é que ocorre esse erro.
Realmente preciso de ajuda,
11/12/2003
Frare
Vc. deve usar os componentes datasetprovide e linkar com sqlquery e usar o clientdatset e linkar com o datasetprovider, no quick utilizar o clientdataset. Ok
Espero ter ajudado :wink:
11/12/2003
Marcela_m
Sim...estou usando os componentes do dbExpress, por quê? Será que está aí o problema?
O que eu devo fazer?
11/12/2003
Ricardo.vano
Cod_Processo funciona normalmente, mas Cod_Cliente informa coluna desconhecida. O mais curioso é que a coluna desconhecida é sempre o que eu digitar no Edit1 !! O que faço??
procedure TFormLocalizarProcesso.RadioGroup1Click(Sender: TObject);
var
R : string;
begin
R := Edit1.Text;
case RadioGroup1.ItemIndex of
0: begin
IBQueryLocalizaProcesso.Close;
IBQueryLocalizaProcesso.SQL.Clear;
IBQueryLocalizaProcesso.SQL.Add(´Select * From Processos´);
IBQueryLocalizaProcesso.SQL.Add(´Where Cod_Cliente =´ + R );
IBQueryLocalizaProcesso.Open;
end;
1: begin
IBQueryLocalizaProcesso.Close;
IBQueryLocalizaProcesso.SQL.Clear;
IBQueryLocalizaProcesso.SQL.Add(´Select * From Processos´);
IBQueryLocalizaProcesso.SQL.Add(´Where Cod_Processo =´ + R );
IBQueryLocalizaProcesso.Open;
end;
end;
RadioGroup1.ItemIndex := -1;
end;
11/12/2003
Frare
Tente não usar muita as variaveis no sistema vc poderia usar assim:
procedure TFormLocalizarProcesso.RadioGroup1Click(Sender: TObject);
begin
IBQueryLocalizaProcesso.Close;
IBQueryLocalizaProcesso.SQL.Clear;
IBQueryLocalizaProcesso.SQL.Add(´Select * From Processos´);
If RadioGroup1.ItemIndex = 0 Then
IBQueryLocalizaProcesso.SQL.Add(´Where Cod_Cliente =´ + Edit1.Text;
)
Else
IBQueryLocalizaProcesso.SQL.Add(´Where Cod_proceddo =´ + Edit1.Text;
);
IBQueryLocalizaProcesso.Open;
end;
verifique se o cod_cliente existe na tabela, há mai um detalhe não use * e sim os nomes dos campos.
Espero ter ajudado :wink:
23/12/2003
Marcela_m
Desculpe incomodar novamente, mas agora estou c/ outro probleminha.
Estou usando o ClientDataSet tudo como vc falou e não está mais ocorrendo aquele problema. Mas na minha Query há uma instrução SQL (pois o programa não roda se estiver vazia) e quando eu rodo o programa o usuário dá as opções p/ gerar o relatório, acontece que quando este é gerado aparece as informações de acordo com a instrução que já estava na Query, e não a que o usuário passou. Se o usuário passa uma informação e não a dados dessa informação aí sim aparece a mensagem de que não há registros, mas do contrário sempre aparece o mesmo relatório.
Deu p/ entender?
Se vc puder me ajudar?
Muito Obrigada
Obs: Aqui vai o código:
procedure TfrmPesquisa.btnRelatoClick(Sender: TObject);
var
strDepto, strProduto, strData: string;
begin
(* Preview Relatório *)
If not Assigned(frmRelatorio) then
frmRelatorio := TfrmRelatorio.Create(Application);
strDepto:= ´´;
strProduto:= ´´;
strData:= ´´;
case cmbTipo.ItemIndex of
0: {maior que} strData:= ´where S.DATASAIDA > ´;
1: {menor que} strData:= ´where S.DATASAIDA < ´;
2: {igual a} strData:= ´where S.DATASAIDA = ´;
end;
if cmbDepto.Value <> ´´ then
strdepto:= ´ and S.IDDEPTO = ´+QuotedStr(cmbDepto.Value);
if lblProduto.Caption <> ´´ then begin
strProduto:= ´ and D.IDGRUPO = ´+ QuotedStr(IntToStr(grupo));
strProduto:= strProduto + ´ and D.IDPRODUTO = ´+ QuotedStr(IntToStr(produto));
end;
with dtmSaida.SQLQuery3 do begin
close;
Sql.clear;
Sql.Add(´Select S.DOCUMENTO, P.NMPRODUTO, T.NMDEPTO,´+
´ S.DATASAIDA from PRODUTO P, DEPTO T join´+
´ DADOSSAIDA D on P.IDGRUPO = D.IDGRUPO and´+
´ D.IDPRODUTO = P.IDPRODUTO join SAIDA S on´+
´ S.IDDEPTO = T.IDDEPTO ´+ strData +
´:parData´+ strDepto + strProduto);
ParamByName(´parData´).AsDate := dataSaida.Date;
try
Open;
if IsEmpty then begin
ShowMessage(´Nenhuma informação a ser listada.´);
exit;
end;
except
ShowMessage(´Erro na abertura da consulta´);
exit;
end;
frmRelatorio.Preview;
end;
end;
Clique aqui para fazer login e interagir na Comunidade :)