QR c/ WHERE- erro no preview do Relatório

Delphi

10/12/2003

Olá,

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

Marcela_m

Curtidas 0

Respostas

Frare

Frare

10/12/2003

Olá, Marcela

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:


GOSTEI 0
Marcela_m

Marcela_m

10/12/2003

Olá!

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,


GOSTEI 0
Frare

Frare

10/12/2003

Marcela

Vc esta usando os comp do dbexpress


GOSTEI 0
Frare

Frare

10/12/2003

Marcela

Vc esta usando os comp do dbexpress?


GOSTEI 0
Frare

Frare

10/12/2003

Marcela

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:


GOSTEI 0
Marcela_m

Marcela_m

10/12/2003

Olá Frare!

Sim...estou usando os componentes do dbExpress, por quê? Será que está aí o problema?

O que eu devo fazer?


GOSTEI 0
Frare

Frare

10/12/2003

Olá

Vc utilizou os com que falei, deu certo? :P


GOSTEI 0
Ricardo.vano

Ricardo.vano

10/12/2003

Comigo ocorre um erro parecido:

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;


GOSTEI 0
Frare

Frare

10/12/2003

Olá,

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:


GOSTEI 0
Ricardo.vano

Ricardo.vano

10/12/2003

Obrigado...ajudou mesmo!!

Valeu!

:D


GOSTEI 0
Marcela_m

Marcela_m

10/12/2003

Olá Frare!

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;


GOSTEI 0
Marcela_m

Marcela_m

10/12/2003

Alguém pode me ajudar?


GOSTEI 0
POSTAR