在DELPHI没有FOR IN的语法时,我们要使用如下代码枚举数据集中的每个内容:

cds.First;

while not cds.eof do begin

 ...

 cds.Next;

end;

最少要四句,而且字数有些多.如果程序中大量使用这个,代码看起来总是不舒服.

在DELPHI XE,可以利用XE对 FOR IN 扩展,建立新的扩展,使用起来好象有点动态语言的味道:

unit faDataSetEx;

interface

uses
DB,ADODB,Variants,SysUtils,StrUtils,Controls,System.Types,Classes,DBClient; type TFieldsEx = class helper for TFields
private
function GetFV (Index :String) :Variant;
procedure SetFV (Index :String; const Value :Variant);
public
property FV[Index :String] :Variant read GetFV write SetFV; default;
end; TDataSetEnumerator = class
private
FFirst :boolean;
FDataSet :TDataSet;
function GetCurrent :TFields;
public
constructor Create (dataset :TDataSet); function MoveNext :boolean;
property Current :TFields read GetCurrent;
end; TDataSetEx = class helper for TDataSet
public
function GetEnumerator :TDataSetEnumerator;
end; implementation { TDataSetEx } function TDataSetEx.GetEnumerator :TDataSetEnumerator;
begin
Result := TDataSetEnumerator.Create (Self);
end; { TDataSetEnumerator } constructor TDataSetEnumerator.Create (dataset :TDataSet);
begin
FDataSet := dataset; FFirst := True; end; function TDataSetEnumerator.GetCurrent :TFields;
begin
Result := FDataSet.Fields;
end; function TDataSetEnumerator.MoveNext :boolean;
begin
if FFirst then begin
FFirst := False;
FDataSet.First;
end
else
FDataSet.Next; Result := not FDataSet.eof;
end; { TFieldsEx } function TFieldsEx.GetFV (Index :String) :Variant;
begin
Result := FieldByName (Index).Value;
end; procedure TFieldsEx.SetFV (Index :String; const Value :Variant);
begin
FieldByName (Index).Value := Value;
end; end.

faDataSetEx

有了上面单元的代码,我们可以这样枚举数据集的每个行:

var
d :TFields;
begin
for d in cds1 do begin
cds1.edit;
d['a']:='abc';
cds1.post;
end;
end;

相当方便........

使用for in 循环数据集的更多相关文章

  1. VB6.0 读取CSV文件

    最近做了一个Upload文件的需求,文件的格式为CSV,读取文件的方法整理了一下,如下: 1.先写了一个读取CSV文件的Function: '读取CSV文件 '假设传入的参数strFile=C:\Do ...

  2. C# 处理Word自动生成报告 三、设计模板

    C# 处理Word自动生成报告 一.概述 C# 处理Word自动生成报告 二.数据源例子 C# 处理Word自动生成报告 三.设计模板 C# 处理Word自动生成报告 四.程序处理 既然是模板就少不了 ...

  3. pytorch例子学习——TRAINING A CLASSIFIER

    参考:https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html#sphx-glr-beginner-blitz-cifar1 ...

  4. C#MySQL增删改查

    首先在项目中添加引用 using MySql.Data.MySqlClient; 连接字符串  private string connString="server=localhost;use ...

  5. 《机器学习实战》-逻辑(Logistic)回归

    目录 Logistic 回归 本章内容 回归算法 Logistic 回归的一般过程 Logistic的优缺点 基于 Logistic 回归和 Sigmoid 函数的分类 Sigmoid 函数 Logi ...

  6. 使用java Apache poi 根据word模板生成word报表

    项目开发过程中,客户提出一堆导出报表的需求,需要导出word格式,页眉还需要加上客户公司的logo,试了几种方案,最后选择了用 Apache poi 加上自定义标签的方式实现. 目前功能还比较简单,一 ...

  7. Oracle学习(七)游标

    一.简介 定义 实质上是数据集,类似数组一样,把查询的数据集存储在内存当中. 使用时可以通过游标指向其中一条记录,也可以通过循环游标达到循环数据集的目的. 游标的种类 显式游标: 使用之前必须得先声明 ...

  8. 三维视觉惯性SLAM的有效Schmidt-EKF

    三维视觉惯性SLAM的有效Schmidt-EKF An Efficient Schmidt-EKF for 3D Visual-Inertial SLAM 论文地址: http://openaccess ...

  9. HashMap封装的数据用循环快速添加进list中产生的数据集全部相同的问题

    一.问题概述 在一次使用SimpleAdapter时,Data需要使用传入一条数据(Image.Text),该数据条使用HashMap封装.在用HashMap封装的数据用循环快速添加进list中产生了 ...

随机推荐

  1. 安装SCOM2012在连接数据库时报错:" SQL Server 的安装版本不受支持"

       在SQL群集上有两个实例,分别为:SQLCSNET1\MSSQLSERVER1和SQLCSNET2\MSSQLSERVER2,在计算机sccmz上安装SCOM2012 SP1中的组件 管理服务器 ...

  2. 沉淀再出发:IoC和AOP的本质

    沉淀再出发:IoC和AOP的本质 一.前言 关于IoC和AOP这两个概念,如果我们没有深入的理解可以说是根本就不理解Spring这个架构的,同样的由Spring演变出来的Spring Boot和Spr ...

  3. Source InSight context 窗口丢失的解决办法

    我没关si的情况下强制关机导致的 Source InSight context 窗口丢失的解决办法 (2010-09-03 13:35:45) 转载▼     今天早晨改改CLI,上了趟WC,回来发现 ...

  4. [BZOJ 3514]Codechef MARCH14 GERALD07加强版 (CHEF AND GRAPH QUERIES)

    [BZOJ3514] Codechef MARCH14 GERALD07加强版 (CHEF AND GRAPH QUERIES) 题意 \(N\) 个点 \(M\) 条边的无向图,\(K\) 次询问保 ...

  5. 使用Java语言开发机器学习框架和参数服务器

    https://github.com/wudikua/ps 本项目是我自己动手实现的机器学习训练框架,代码简单,有很多不完善,但是也保留了最小可用功能 通过自己编写这个项目,可以帮助自己入门机器学习 ...

  6. Dubbo特性

    dubbo.properties Dubbo 将自动加载 classpath 根目录下的dubbo.properties,可以通过JVM启动参数 -Ddubbo.properties.file=xxx ...

  7. hdu_1009 贪心

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  8. MVC5新特性(一)之RouteAttribute打造自己的URL规则

    1.RouteAttribute概述 RouteAttribute的命名空间是System.Web.Mvc,区别与web api的RouteAttribute(它的命名空间是System.Web.Ht ...

  9. Win32多线程之核心对象

    CreateThread()传回两个值,用以识别一个新的线程.第一个值是个Handle,  这也是CreateThread()的返回值,大部分与线程有关的API函数都需要它.第二个值是由lpThrea ...

  10. 阅读 CloudDPI:Cloud+DPI+Reversible Sketch

    CloudDPI: Cloud-Based Privacy-Preserving Deep Packet Inspection via Reversible Sketch 与sketch的结合点:将修 ...