我在使用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.
答案 0 :(得分: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
(文件结束,在这种情况下实际上意味着结束记录集。)