选择要使用Fastreport打印的记录

时间:2014-12-25 11:56:47

标签: sql delphi fastreport

我有一份报告,我想选择要显示/打印的数据 我正在使用UniDAC作为数据连接,当我不选择数据时,它可以正常工作,只需打印全部。
我的报告代码中有一个名为varDiaryGuid的变量,我指定了要过滤记录的值。
在我的测试中,在打开报告之前为该变量分配值{A13CE6A0-7EB0-469A-87D7-3518FB9F365A}。
当报告开始时,它会显示一个消息框开始报告:{A13CE6A0-7EB0-469A-87D7-3518FB9F365A},因此该变量可以使用。
但后来我收到一个错误,说出了意外的字符 - 经过一些测试,看起来它是{在GUID的开头。 任何一个有一些想法的人,我接下来会测试什么?

procedure frxReport1OnStartReport(Sender: TfrxComponent);
begin
  ShowMessage('Start report: ' + varDiaryGuid);                                                          
  qryDiary.Close;                             
  qryDiary.SQL.Clear;
  qryDiary.SQL.Text := 'SELECT * FROM qrymd_diary WHERE (flddiary_guid = ' + varDiaryGuid + ')';
  qryDiary.Open;                  
end;

2 个答案:

答案 0 :(得分:2)

您应该使用参数进行查询(安全性和性能)。

使用OI定义qrydiary组件的查询

SELECT
  *
FROM
  qrymd_diary
WHERE
  flddiary_guid = :diary_guid

在您的代码中,您只需指定参数值

procedure frxReport1OnStartReport(Sender: TfrxComponent);
begin
  ShowMessage('Start report: ' + varDiaryGuid);                                                          
  qryDiary.Close;                             
  qryDiary.ParamByName( 'diary_guid' ).Value := varDiaryGuid;
  qryDiary.Open;                  
end;

根据您使用的sql组件,您还必须定义参数的数据类型。他们中的一些人可以解决这种类型,有些人需要你的帮助。只需使用OI检查参数类型。

您可以在documentation

中详细了解如何使用参数

答案 1 :(得分:0)

qry.SQL.Text := 'SELECT * FROM table WHERE (someTextField = ' + 
                 varSomeText + 
                ')';

在这种通过代码发送sql命令的查询中,你应该引用文本/字符串变量,如:

qry.SQL.Text := 'SELECT * FROM table WHERE (someTextField = ' + 
                QuotedStr(varSomeText) + 
                ')';

QuotedStr()将参数封装为“'”s