Delphi 如何在不移动光标的情况下读取TDataSet子体的字段值
我认为,对于使用数据库应用程序的人来说,能够从TDataSet子体读取记录值而不必移动光标是一个很大的改进 我已经在这个主题上搜索了很长时间,但我能找到的最接近的是XE7 TFDMemTable,在这里,您可以通过以下语句读取字段值:Delphi 如何在不移动光标的情况下读取TDataSet子体的字段值,delphi,random,tdataset,Delphi,Random,Tdataset,我认为,对于使用数据库应用程序的人来说,能够从TDataSet子体读取记录值而不必移动光标是一个很大的改进 我已经在这个主题上搜索了很长时间,但我能找到的最接近的是XE7 TFDMemTable,在这里,您可以通过以下语句读取字段值: FirstName := fdsPeople.Table.Rows.ItemsI[i].GetValues('FirstName', True); var BM: TBookmark; begin BM := Dataset.GetBookmark;
FirstName := fdsPeople.Table.Rows.ItemsI[i].GetValues('FirstName', True);
var
BM: TBookmark;
begin
BM := Dataset.GetBookmark;
Dataset.DisableControls;
try
// Simulate moving the cursor around, reading data etc.
Dataset.Last;
Dataset.First;
Dataset.GotoBookmark(BM)
finally
Dataset.EnableControls;
end;
end;
在哪里
是否已经有一种方法可以通过我不知道的TDataSet实现这一点?如果没有,我们如何请求此功能?假设您的意思是不希望用户看到您实际移动光标,您可以执行以下操作:
FirstName := fdsPeople.Table.Rows.ItemsI[i].GetValues('FirstName', True);
var
BM: TBookmark;
begin
BM := Dataset.GetBookmark;
Dataset.DisableControls;
try
// Simulate moving the cursor around, reading data etc.
Dataset.Last;
Dataset.First;
Dataset.GotoBookmark(BM)
finally
Dataset.EnableControls;
end;
end;
当然,这是假设您有一个双向数据集。假设您的意思是不希望用户看到您实际上正在移动光标,您可以执行以下操作:
FirstName := fdsPeople.Table.Rows.ItemsI[i].GetValues('FirstName', True);
var
BM: TBookmark;
begin
BM := Dataset.GetBookmark;
Dataset.DisableControls;
try
// Simulate moving the cursor around, reading data etc.
Dataset.Last;
Dataset.First;
Dataset.GotoBookmark(BM)
finally
Dataset.EnableControls;
end;
end;
当然,这假设您有一个双向数据集。若您的数据集后代支持此功能,您可以将光标从数据集克隆到其他数据集。(AnyDAC-TADMemTable或FireDAC-TFDMemTable和TClientDataset支持此功能) 这意味着数据集可以共享数据,但它们有不同的游标!(您可以在不干扰其他数据集的情况下浏览一个数据集recNo) 例如:
procedure MyCloneCursor(ASourceDS, ADestDS: TFDMemTable)
begin
ADestDS.FieldDefs.Assign(ASourceDS.FieldDefs);
ADestDS.CreateDataset;
ADestDS.CloneCursor(ASourceDS, false {Reset}, false {KeepSettings});
end;
请注意,KeepSettings指的是克隆游标的数据集。
KeepSettings,如果为true,则表示克隆光标的数据集将保留其设置,如果为false,则将从克隆光标的数据集中获取设置
如果要克隆筛选器、索引、主源、主字段、源数据集的只读状态。。。然后按如下方式调用CloneCursor
CloneCursor(SourceDataset, False, False);
有关这方面的详细文档,请阅读Cary Jensen的您可以将光标从数据集克隆到其他数据集,当然前提是您的数据集后代支持此功能。(AnyDAC-TADMemTable或FireDAC-TFDMemTable和TClientDataset支持此功能) 这意味着数据集可以共享数据,但它们有不同的游标!(您可以在不干扰其他数据集的情况下浏览一个数据集recNo) 例如:
procedure MyCloneCursor(ASourceDS, ADestDS: TFDMemTable)
begin
ADestDS.FieldDefs.Assign(ASourceDS.FieldDefs);
ADestDS.CreateDataset;
ADestDS.CloneCursor(ASourceDS, false {Reset}, false {KeepSettings});
end;
请注意,KeepSettings指的是克隆游标的数据集。
KeepSettings,如果为true,则表示克隆光标的数据集将保留其设置,如果为false,则将从克隆光标的数据集中获取设置
如果要克隆筛选器、索引、主源、主字段、源数据集的只读状态。。。然后按如下方式调用CloneCursor
CloneCursor(SourceDataset, False, False);
有关这方面的详细文档,请阅读Cary Jensen的这只适用于整个表都在内存中的内存表(因此得名)。其他TDataset可能在内存中有一些行用于缓存(它们很可能会更改),但很少有整个表可用。但是为什么您认为不移动光标是一个很大的改进呢?对于一般的TDataSet Decedant还是TClientDataSet,您真的需要这样做吗?在后一种情况下,您可以使用CloneCursor()创建一个可跳转的克隆TClientDataSet。这只适用于整个表都在内存中的内存表(因此得名)。其他TDataset可能在内存中有一些行用于缓存(它们很可能会更改),但很少有整个表可用。但是为什么您认为不移动光标是一个很大的改进呢?对于一般的TDataSet Decedant还是TClientDataSet,您真的需要这样做吗?在后一种情况下,您可以使用C克隆()来创建一个可以跳过的克隆Tclipse数据集。CoCurCurSuror函数是否重复使用内存,我想知道。CoCururSuror函数是否重复使用内存,我想知道。这似乎有太多的问题需要考虑(书签,DababelOntRLS,FooBooM签,EnabelCon)。我真的觉得NavaDeCo应该在TDATSET级别做一些事情。这似乎有太多的问题需要考虑(书签,DababelOntRLS,FooBooM签,EnabelCon)。我真的觉得Embarcadero应该在TDataSet级别做些事情。