Delphi 10 Object Pascal:如何才能访问 ADO DataSet 单条记录中的字段
Delphi10 ObjectPascal: how do I just get to access the fields in a ADODataSet single record
非常高兴能够连接到数据库等等。我的 Grid 对象很好,显示了所有记录等。对 SQL 真的很满意。和概念"DBs are all about sets"
我的问题是:
我创建了一个 ADO 查询或数据集对象,其中 SQL return 只有一条记录。我知道我已经通过询问 MyFrame 做到了这一点。ADOQuery1.RecordCount(它 returns 1)但是我如何才能简单地访问记录字段?
我要写
MyRecord[] := MyFrame.ADOQuery1.ReturnRecord; // 可能是当前记录,因为我知道只有一个
问题是:是 there/can 我创建了一个 var type 我可以用来读取那个记录吗?我该怎么做? Kinda 认为会有一个 ADOQuery method 将 return 一条记录放入相同 type 的数组中(尽管不确定如何指定 type)(强调显示保留字与自然英语)
无论如何,我已经尝试这样做好几天了,但显然遗漏了一些东西。一如既往的帮助,不胜感激。
所有 Delphi 数据集类型都是 TDataSet
的后代。这实现了一个数据访问模型,其中数据集具有逻辑 "cursor",如果数据集包含任何数据行,则该逻辑恰好位于一个数据行上,最初是打开数据集后的第一个数据行。数据集的Fields
属性,或者它的FieldByName
方法,可以用来访问数据集curor指向的数据行的字段值。
导航或遍历数据集是使用数据集导航方法之一的简单问题(例如 Next
、Prior
、MoveBy
和 Locate
)。例如
DataSet.First;
while not DataSet.Eof do begin
Memo1.Lines.Add(DataSet.FieldByName('Country').AsString);
DataSet.Next;
end;
如果您已经按照我上面所说的进行操作,那么这段代码的作用应该很明显 - 如果没有,请询问。
对于您的 "age" 示例,只需执行以下操作:
var
Age : Integer;
[...]
Age := DataSet.FieldByName('Age').AsInteger;
- 就这么简单。
尝试使用记录通常不是一个好主意,因为您似乎打算存储当前数据行内容的副本。它对行数据进行不必要且可避免的复制。
同样,使用数组来存储当前行的数据是不必要的,并不是真正的 "Delphi" 处理数据集行的方式,它更像是您可能(被迫)在VB 或类似的。它对 Delphi 数据集几乎没有好处。
非常高兴能够连接到数据库等等。我的 Grid 对象很好,显示了所有记录等。对 SQL 真的很满意。和概念"DBs are all about sets"
我的问题是:
我创建了一个 ADO 查询或数据集对象,其中 SQL return 只有一条记录。我知道我已经通过询问 MyFrame 做到了这一点。ADOQuery1.RecordCount(它 returns 1)但是我如何才能简单地访问记录字段?
我要写
MyRecord[] := MyFrame.ADOQuery1.ReturnRecord; // 可能是当前记录,因为我知道只有一个
问题是:是 there/can 我创建了一个 var type 我可以用来读取那个记录吗?我该怎么做? Kinda 认为会有一个 ADOQuery method 将 return 一条记录放入相同 type 的数组中(尽管不确定如何指定 type)(强调显示保留字与自然英语)
无论如何,我已经尝试这样做好几天了,但显然遗漏了一些东西。一如既往的帮助,不胜感激。
所有 Delphi 数据集类型都是 TDataSet
的后代。这实现了一个数据访问模型,其中数据集具有逻辑 "cursor",如果数据集包含任何数据行,则该逻辑恰好位于一个数据行上,最初是打开数据集后的第一个数据行。数据集的Fields
属性,或者它的FieldByName
方法,可以用来访问数据集curor指向的数据行的字段值。
导航或遍历数据集是使用数据集导航方法之一的简单问题(例如 Next
、Prior
、MoveBy
和 Locate
)。例如
DataSet.First;
while not DataSet.Eof do begin
Memo1.Lines.Add(DataSet.FieldByName('Country').AsString);
DataSet.Next;
end;
如果您已经按照我上面所说的进行操作,那么这段代码的作用应该很明显 - 如果没有,请询问。
对于您的 "age" 示例,只需执行以下操作:
var
Age : Integer;
[...]
Age := DataSet.FieldByName('Age').AsInteger;
- 就这么简单。
尝试使用记录通常不是一个好主意,因为您似乎打算存储当前数据行内容的副本。它对行数据进行不必要且可避免的复制。
同样,使用数组来存储当前行的数据是不必要的,并不是真正的 "Delphi" 处理数据集行的方式,它更像是您可能(被迫)在VB 或类似的。它对 Delphi 数据集几乎没有好处。