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

10/12/2003

0

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

Responder

Posts

10/12/2003

Frare

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:


Responder

11/12/2003

Marcela_m

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,


Responder

11/12/2003

Frare

Marcela

Vc esta usando os comp do dbexpress


Responder

11/12/2003

Frare

Marcela

Vc esta usando os comp do dbexpress?


Responder

11/12/2003

Frare

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:


Responder

11/12/2003

Marcela_m

Olá Frare!

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

O que eu devo fazer?


Responder

11/12/2003

Frare

Olá

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


Responder

11/12/2003

Ricardo.vano

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;


Responder

11/12/2003

Frare

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:


Responder

13/12/2003

Ricardo.vano

Obrigado...ajudou mesmo!!

Valeu!

:D


Responder

23/12/2003

Marcela_m

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;


Responder

05/01/2004

Marcela_m

Alguém pode me ajudar?


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar