TStringGrid显示(bcd)在delphi中实时绑定

时间:2018-01-05 04:56:03

标签: delphi firedac tstringgrid

我在delphi firemonkey应用程序的实时绑定中将TFDQuery与TStringGrid连接。

我尝试在基于Editbox的TFDQuery中使用过滤器进行搜索,但它的工作正常。

但是,每当我清除Editbox时,我在TStringGrid中的一行会显示"(bcd)"因为它的价值如下图所示。

我做错了什么?我该如何解决?

enter image description here

编辑:

  1. 我使用mySql数据库和firedac tfdconnection + tfdquery
  2. 该列的数据类型为AnsiString& FmtBCS(32,0)
  3. 我在delphi中使用实时绑定功能。
  4. 我的过滤器代码

    var data = {}; data.toolAccess = value1; data.toolId = value2; data.UAM = value3; $.ajax({ type: "POST", url: "IROA_StoredProcedures.asmx/Delete_AgentTools", data: JSON.stringify(data), contentType: "application/json; charset=utf-8", dataType: "json", success:function() { alert("Tool has been successfully delete"); }, error: function (XMLHttpRequest) { alert("error in Delete_AgentTools()"); console.log(XMLHttpRequest); } });

  5. 我使用TFDConnection.execSQL

  6. 插入表中 "(BCD)"部分总是在所选行上更改,如下图所示。

    编辑2: 要重现我的错误,您可以:

    1. 添加TStringGrid。
    2. 添加编辑框。
    3. 添加tfdconnection
    4. 添加tfdquery
    5. 使用从tfdquery到tstringgrid的实时绑定。
    6. 使用mysql中的SUM()向tfdquery.sql.text添加查询。示例:with MainQuery do begin Filtered := False; OnFilterRecord := nil; Filter := FilterValue; Filtered := True; end;
    7. 激活那个tfdquery
    8. 在编辑框上添加onkeyup事件。
    9. 添加此代码:
    10. "select id, sum(stock) as total_stock from stocks"

      1. 运行
      2. 尝试在editbox上输入内容以确保过滤器正常工作。
      3. 清除编辑框,然后是"(BCD)"显示在选定的行上。
      4. 我重现了这个错误。这是SS: enter image description here

2 个答案:

答案 0 :(得分:0)

好吧,我仍然不知道究竟是什么导致了这个问题,但我发现解决方案可以避免出现这个问题。

在刷新TStringGrid.selected之前,您需要将-1值设置为TFDQuery。所以代码变成了:

FilterValue:= 'garmines_id LIKE ''/' +Edit1.Text+'%'' ESCAPE ''/'' ';

StringGrid1.selected := -1;

with FDQuery1 do  begin
  Filtered:= false;
  OnFilterRecord := nil;
  Filter := FilterValue;
  Filtered := True;
end;

我怀疑这个问题的原因是来自mysql sum()方法的数据类型,即FmtBCD(32)

答案 1 :(得分:0)

转到“数据映射规则”(firedac连接) 标记忽略继承的规则 创建2条新规则

规则1:来源:dtBCD /目标数据类型:dtDouble /全部最小值:0 /全部最大值:100 rule2:来源:dtfmtbcd /目标数据类型:dtDouble /全部最小值:0 /全部最大值:100

单击确定。现在这些字段将为dtDouble,并且与tgrid兼容