arrays - 向多维数组中插入DBGrid数据

标签 arrays delphi dbgrid

我已经使用 ADOConnection、ADOQuery、DataSource 和 DBGrid 设置了从 Delphi 到 pgsql 的连接,以显示我的查询结果。 数据库包含 2 列 double 类型的值,有几千行,我想将其插入到二维数组中。但是,由于很新,我不确定如何插入将 DBGrid 的内容放入数组中。非常感谢任何帮助。

最佳答案

首先,如果有数千行,您需要在读取之前将字段分配给变量,以便在使用 FieldByName 时摆脱不必要的文本查找时间。

我手边没有 Delphi,但这应该可以工作,或者至少可以帮助您入门。

uses Math;

procedure ProcessArray(ADataSet: TDataSet);
var
  field1: TField;
  field2: TField;
  len: Integer;
  a: array of array[2] of double;
begin
  len := 0;
  SetLength(a, 0);
  field1 := ADataSet.FieldByName('field1');
  field2 := ADataSet.FieldByName('field2');
  ADataSet.First;
  while not ADataSet.Eof do
  begin
    Inc(len);
    if len > Length(a) then
      SetLength(a, len + Min(len, 16384));
    a[len - 1][0] := field1.Value;
    a[len - 1][1] := field2.Value;
    ADataSet.Next;
  end;
  SetLength(a, len);
  // Process the results in the a array
end;

AlexSC 的建议是实际使用 TADODataSet.RecordCount 属性最初设置数组的大小。请注意,如果 TDataSet 没有从数据库中完全加载(例如使用服务器游标),则 RecordCount 不一定包含所有记录的数量,上面的原始解决方案可以解决这个问题。我对其进行了更正,因此它不会一次增长超过 16k 个项目,并且开销最多为 16k - 1 个数组条目。有关 TDataSet“延迟加载”的信息,请参阅 DBGrid with read ahead capability using ADO

请在下面找到使用 RecordCount 的代码:

procedure ProcessArray(ADataSet: TDataSet);
var
  field1: TField;
  field2: TField;
  len: Integer;
  a: array of array[2] of double;
begin
  len := 0;
  SetLength(a, ADataSet.RecordCount);
  field1 := ADataSet.FieldByName('field1');
  field2 := ADataSet.FieldByName('field2');
  ADataSet.First;
  while not ADataSet.Eof do
  begin
    a[len][0] := field1.Value;
    a[len][1] := field2.Value;
    Inc(len);
    ADataSet.Next;
  end;
  // Process the results in the a array here
end;

关于arrays - 向多维数组中插入DBGrid数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24304724/

相关文章:

delphi - 如何使用书签和禁用控件

java - 如何使这个输出向后

objective-c - 用Delphi XE2制作的.dylib不能被Xcode应用程序使用

delphi - 为什么我在调用 FillChar 时遇到访问冲突?

delphi - 如何使用TDBGrid中的复选框选择多条记录?

delphi - 如何格式化 DBGrid 列以显示两个小数位?

java - 将实际输入值存储到数组中以便与另一个数组进行比较

r - 在 R 中生成具有定义参数的表

python - 在Python中,根据表达式和特定区间创建数组

delphi - 转换 HH :MM:SS to seconds or minutes with delphi