0

我在使用 MyDAC 的数据源模块中有一个表。我想将表的内容,50 行的列月加载到 Float 的数组 [1..50] 中。我怎样才能做到这一点?

这是我的数据模块单元的代码:

unit Unit2;

interface

uses
  System.SysUtils, System.Classes, Data.DB, DBAccess, MyAccess, MemDS;

type
  TDataModule2 = class(TDataModule)
    MyConnection1: TMyConnection;
    MyQuery1: TMyQuery;
    MyQuery1Months: TFloatField;
    MyQuery1Qob: TFloatField;
    MyQuery1Qcalc: TFloatField;
    MyDataSource1: TMyDataSource;
    MyTable1: TMyTable;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  DataModule2: TDataModule2;

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}

end.
4

1 回答 1

2

您似乎有一个包含 3 列的表,每列的类型为 Float。(尽管我不禁想知道为什么名为“months”的列会包含浮点数据。)您不会将该数据加载到 50 个浮点数的数组中;您可以将其加载到包含 3 个字段的 50 条记录或对象的数组中。

但是,假设您只想加载其中一个字段的值。那会是这样的:

i := 1; //index variable into the array
myQuery1.Open; //run the database query
while not myQuery1.EOF do //loop until we reach the end of the dataset
begin
   myArray[i] := MyQuery1Qcalc.value; //read the field value to the array
   myQuery1.Next; //next record
   inc(i); //next array index
end;

请注意,如果此结果集包含的记录数与预期的 50 条不同,您将遇到麻烦。RecordCount使用动态数组并在调用后将其长度设置为数据集的属性可能会更好Open。但这是加载数据的基本模式:打开数据集,(或者First如果它已经打开,则调用它)然后从字段中读取值并调用Next,直到到达EOF(End Of File,在这种情况下实际上意味着 End Of Record放。)

于 2014-04-14T21:33:19.027 回答