在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. 已经不再使用的表为什么数据页还在SQLServer的内存缓存中

    1. 问题发现 在学习内存调优时,使用如下代码,查询目前内存缓冲区中生产数据库的每个对象缓存页计数 SELECT count(*)AS cached_pages_count ,name ,index_ ...

  2. 打通版微社区(3):在Web服务器上部署memcache For DZ3.2

    写在前面:首先这个数据库加速程序的原理,是将数据库内容缓存到Web服务器的内存上,也就是内存换速度.我本次微社区的应用其实应该用不了这个,只是看到好多DZ论坛部署的都安装了这个,我就练手一下以便不时之 ...

  3. zbrush书法文字硬边雕刻

    方法的重点在与边缘环的操作以及模型网格的数量. 1.通过ZAppLink功能可以把制作的文字书法映射到模型上去. 2.遮罩,按照颜色强度遮罩. 3.分组,按照颜色分组.单独显示文字部分的分组.按Ctr ...

  4. Windows Server、 Windows 区别

    今天脑补了普通Windows 操作系统与Windows Server区别,感觉清楚了很多. Microsoft WindowsServer,是美国微软公司研制的一套操作体系,它面世于1985年,起先仅 ...

  5. [EffectiveC++]item42:了解typename的双重意义

  6. Linux的CPU相关知识

    超线程和多线程的区别? 超线程从硬件层面理解,即一个CPU的部件(可以理解为核)同时执行多条指令,表现就是同时执行多个线程.多线程是软件层面的概念,比如CPU只有一个核,通过线程调度可以在一个时间段内 ...

  7. 设计模式之Strategy模式

    策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具体的共同接口的独立类中,从而使得他们可以互相替换. 策略模式使得算法可以在不影响客户端的情况下发生变化. all in one “ ...

  8. Android SDK Manager仅有一个版本的问题

    搭建好MonkeyRunner的环境之后,建立虚拟器的时候发现SDK的管理器中只有4.3的版本,查阅了一下百度,问题解决如下: (1)在c:\Windows\System32\etc\hosts文件中 ...

  9. java的四舍五入

    四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于1到10的加减乘除那么简单了.在讲解之间我们先看如下一个经典的案例: public static void main(String[] ...

  10. 如何将pip更新到最新版

    通过该命令即可达到目的:python -m pip install --upgrade pip  pip在Python中是非常常用的,就像node.js里面的npm一样.两者共同的作用是包的管理工具.