Erro ao Chamar relatório individual (com o FastRepoty)

17/06/2020

4

Boa tarde pessoal, Tenho três Formulários no meu banco de dados, onde o Formulário (APOSTA_NORMAL1) é o principal e os formulários (CORES e APOSTA_TIPO)
são os estrangeiros.

CREATE TABLE APOSTA_NORMAL1 (
    ID_APOSTA1        INTEGER NOT NULL,
    APOS1_REFERENCIA  NUMERIC(8,0),
    IDCORES           INTEGER,
    IDAPOSTA_TIPO     INTEGER
);

CREATE TABLE CORES (
    ID_CORES       INTEGER NOT NULL,
    COR_DESCRICAO  VARCHAR(100)
);

CREATE TABLE APOSTA_TIPO (
    ID_APOSTA_TIPO   INTEGER NOT NULL,
    APOS_DESCRICAO   VARCHAR(15),
    APOS_ABREVIACAO  VARCHAR(2)
);


Fiz a seguinte SQL:

select
    A.id_aposta1,
    A.apos1_referencia,
    B.apos_abreviacao,
    C.cor_descricao
from aposta_normal1 A,
     aposta_tipo B,
     cores C
where A.idaposta_tipo = B.id_aposta_tipo
AND   A.idcores = C.id_cores



Ate ai tudo bem, ele esta me retornando a ID_APOSTA1 / APOS1_REFERENCIA / APOS_ABREVIACAO / COR_DESCRICAO


Agora vamos para o Projeto no Delphi:

No DBGrid digitei a seguinte linha de codigos:

procedure TfrmApostaNormal_1.DBGridApostaCellClick(Column: TColumn);
begin
  inherited;
    EdtImpressao.Text := IntToStr(dmRel.ibQryRelApostaNormal_1ID_APOSTA1.Value);
end;


No Botão imprimir digitei a seguinte linha de codigos:

procedure TfrmApostaNormal_1.btnImpressaoClick(Sender: TObject);
begin
  inherited;
    with dmRel.ibQryRelApostaNormal_1 do
      begin
        close;
        sql.Clear;
        sql.Add('select A.apos1_referencia, B.apos_abreviacao, C.cor_descricao ');
        sql.Add('from aposta_normal1 A, aposta_tipo B, cores C ');
        sql.Add('where A.idaposta_tipo = B.id_aposta_tipo AND A.idcores = C.id_cores =:pCodigo ');
        ParamByName('pCodigo').Value := StrToInt(EdtImpressao.Text);
        open;


          frmRelApostaNormal_1.frxReportFA6Pai.PrepareReport;
          frmRelApostaNormal_1.frxReportFA6Pai.ShowReport;
      end;
end;


Quando clico no Grid pra escolher a linha independente da que estou escolhendo ele la no campo EdtImpressao sempre fica o primeiro do Grig
e quando clico no botão Impressão da erro de SQL : unknown SQL Data type (32764)

Se no SQL do banco ta dando certo o que esta errado no SQL do Botão?

http://prntscr.com/t1oax4
http://prntscr.com/t1ob6u

O que será e onde será o erro?
Podem me ajudar a solucionar esse problema?
Desde já obrigado pela ajuda e por tentar ajudar.
Responder

Posts

18/06/2020

Marcos Junior

Bom dia...
Chefe talvez não precisa de tanto esforço assim, o seu grid e sues componentes estão lincados com seu DataSource por isso que quando você clica em uma linha do seu grid as informações da mesma são exibidas nos componentes acima.

opção 1: EdtImpressao.Text := edtCodigo.Text;
opção 2: no evento onDblClick do grid você passar EdtImpressao.Text := dmRel.ibQryRelApostaNormal_1ID_APOSTA1.AsString;

p.s - Tenta ai e nos da um feedback do resultado...
Responder

19/06/2020

Rubens Pena

Bom dia...
Chefe talvez não precisa de tanto esforço assim, o seu grid e sues componentes estão lincados com seu DataSource por isso que quando você clica em uma linha do seu grid as informações da mesma são exibidas nos componentes acima.

opção 1: EdtImpressao.Text := edtCodigo.Text;
opção 2: no evento onDblClick do grid você passar EdtImpressao.Text := dmRel.ibQryRelApostaNormal_1ID_APOSTA1.AsString;

p.s - Tenta ai e nos da um feedback do resultado...
Boa tarde Marcos Junior.

Fiz uma alteração na minha SQL e deu certo. Esta imprimindo o apenas o registro selecionado.
Segue abaixo como que ficou a minha:

procedure TfrmApostaNormal_1.DBGridApostaCellClick(Column: TColumn);
begin
  inherited;
  edtImpressao.Text := dmRel.ibQryRelApostaNormal_1APOS1_REFERENCIA.AsString;
end;


procedure TfrmApostaNormal_1.Button1Click(Sender: TObject);
begin
  inherited;
    if dmRel.ibQryRelApostaNormal_1.Active = False then
    begin
      dmRel.ibQryRelApostaNormal_1.Active := True;
    end;

    if (edtImpressao.Text <> '') then //se for diferente de vazio imprime a busca
      with dmRel.ibQryRelApostaNormal_1 do
        begin
          Close;
          SQL.Clear;
          SQL.Add('select A.apos1_referencia, B.cor_descricao, C.apos_abreviacao ');
          SQL.Add('from aposta_normal1 AS A ');
          SQL.Add('inner join cores AS B on A.idcores = B.id_cores ');
          SQL.Add('inner join aposta_tipo AS C on A.idaposta_tipo = C.id_aposta_tipo ');
          SQL.Add('where A.apos1_referencia =:pRef ');
          ParamByName('pRef').Value := StrToInt(edtImpressao.Text);
          Open;

          frmRelApostasNormal_1.frxReportFA6Pai.PrepareReport();
          frmRelApostaSNormal_1.frxReportFA6Pai.ShowReport;
        end;
end;


Obrigado pela ajuda.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar