【问题标题】:How To Increment Numbers in Calculated field of TQuery?如何在 TQuery 的计算字段中增加数字?
【发布时间】:2018-04-26 03:25:03
【问题描述】:

我有 TQuery 和计算字段 N
示例中如何递增数字(N 以 5 开头):

我试过了,但没有:

procedure TForm1.Query1CalcFields(DataSet: TDataSet);
var i:integer;
begin
  i := strtoint(edit2.Text);
  Query1['N'] := inttostr(i+1);
end;

结果:

N
2
2
2
2
.
.

注意:Foxpro 数据库,我使用 BDE 连接,它不一定是计算字段,我希望增量值在快速报告的打印中使用它,就像每个页面的单个参考(不是页码)。

【问题讨论】:

  • 什么都没有?什么都没有?没有错误,没有价值,什么都没有?如果是这样,您能否验证是否调用了此代码?如果你确实得到了一些东西,但不是你所期望的,你能解释一下你得到了什么吗?
  • 计算字段?怎么计算的?
  • 当您说“无”时,我怀疑您的 N 值对于所有记录都相同?顺便说一句,哪个数据库?哪个提供商?它必须是计算字段吗?
  • 我尝试的代码可以工作,但不是预期的
  • 您可能想尝试Query1.RecNo 计算字段值。

标签: delphi foxpro bde quickreports tquery


【解决方案1】:

我在 @kobik

的帮助下找到了这个解决方案

TQRLabel 的打印中,我将此代码添加到 Calculated Field 或其他变量中:

procedure TForm1.QRLabel1Print(sender: TObject; var Value: string);
begin
value:=inttostr(Query1.RecNo+strtoint(edit2.Text)-1);
end;
  • Tedit 在运行时装扮起始编号。

【讨论】:

    【解决方案2】:

    这是我测试它的一种简单方法:

    1-声明一个用于保存自动编号的全局变量

    2- 在FormShow 中设置为 5

    3- 在OnCalcFields 中将全局变量分配给新字段

    4-递增全局变量

    注意:不要使用 TEdit 或任何东西来显示计算字段的结果,因为它只会显示第一个结果。但所有结果都会正确保存在表中或查询中。

    代码

    全局变量:

    var
      Form1: TForm1;
      i : Integer; 
    

    表格展示:

    procedure TForm1.FormShow(Sender: TObject);
    begin
        i := 5;
    end;
    

    计算归档:

    procedure TForm1.adoqry1CalcFields(DataSet: TDataSet);
    begin
       adoqry1['n'] := i;
       //OR adoqry1N.AsInteger := i;
       //OR adoqry1.FieldByName('n').AsInteger := i;
    
       i := i + 1;
    end;
    

    最后,我用ADOQuery 测试它。

    【讨论】:

    • 这在滚动数据集时不起作用。我发布了一个类似的答案,但在测试后将其删除。
    • 它对我有用,但是这种方法并不简洁,只需在CalcFields时输入此代码:Query1.RecNo+strtoint(edit2.Text)-1,tedit来装饰起始编号
    • 我认为你最好多解释一下你的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多