clientdataset 遍历字段_Delphi TClientDataSet[五]: 读取数据
Delphi TClientDataSet[5]: 读取数据。
本例用到:
TClientDataSet.Fields[]; { 字段集合; 它比 FieldList 有更多功能, 如可获取嵌套字段 }
TClientDataSet.FieldList[]; { 字段列表; 它比 Fields 轻便, 如果只是取值用它快一些 }
TClientDataSet.FieldByName(); { 根据字段名称获取字段对象; 获取一个字段对象时它比上两个快 }
TClientDataSet.FindField(); { 根据字段名称查找字段对象 }
TClientDataSet.FieldValues[]; { 根据字段名称获取字段值; 如果仅是获取字段值, 这个最快 }
TClientDataSet.First; { 到第一个记录 }
TClientDataSet.Next; { 到下一个记录 }
TClientDataSet.Last; { 到最后一个记录 }
TClientDataSet.Prior; { 到上一个记录 }
TClientDataSet.RecNo; { 设置或读取当前记录的位置 }
TClientDataSet.Bof; { 当前位置是否是第一个记录 }
TClientDataSet.Eof; { 当前位置是否是最后一个记录 }
TClientDataSet.RecordSize; { 一个记录的大小; 所谓一个记录就是当前行的所有字段 }
TClientDataSet.RecordCount; { 记录总数; 也就是总行数 }
TClientDataSet.GetFieldList(); { 根据指定的几个字段名获取字段对象的列表 }
TClientDataSet.GetFieldData(); { 把指定字段的值写入一个缓冲区 }
TClientDataSet.GetCurrentRecord(); { 把当前记录(不包括 Bolb 字段)写入到一个缓冲区 }
关键字: TClientDataSet GdiPlus[1] RegularExpreio GdiPlus XMLDocument 类详解
TClientDataSet[5]: 读取数据。
读取字段的结构信息可以使用 TFieldDef 对象(一般来源于 FieldDefs 或 FieldDefList);
现在要读取其中的数据, 应该使用 TField 对象(一般来源于 Fields 或 FieldList).
Fields[0]、Fields[1] ... Fields[n] 获取的是当前行的第几个字段, 可用 Next、RecNo 等指定当前位置(行).
下面的例子使用了 Common Files\CodeGear Shared\Data\holdings.xml, 若更换文件需调整代码.
这是 holdings.xml 的字段信息:
ACCT_R { 类型是 r8, 对应 ftFloat, 相当于 Double }
SYMBOL { 类型是 string, 对应 ftString, 相当于 AiString; 指定 Size=7, 加上空结束, 大小是 8 }
SHARES { 类型是 r8, 对应 ftFloat, 相当于 Double }
PUR_PRICE { 类型是 r8, 对应 ftFloat, 相当于 Double }
PUR_DATE { 类型是 date, 对应 ftInteger, 相当于 Integer }
先窗体上放置 ClientDataSet1、DataSource1、DBGrid1、Memo1 和七个 Button, 然后:
{ 准备数据, 也可在设计时完成 }
procedure TForm1.FormCreate(Sender: TObject);
begin
ChDir(GetEnvironmentVariable('CommorogramFiles') + '\CodeGear Shared\Data\');
ClientDataSet1.LoadFromFile('holdings.xml');
DBGrid1.DataSource := DataSource1;
DataSource1.DataSet := ClientDataSet1;
end;
{ 读取字段值的几种方法 }
procedure TForm1.Button1Click(Sender: TObject);
var
v1,v2,v3,v4,v5,v6,v7,v8: Variant;
num: Double;
fName: string;
begin
{ 获取首字段的名称 }
fName := ClientDataSet1.Fields[0].FieldName;
{ 获取第一个字段值的几种方法: }
v1 := ClientDataSet1.Fields[0].Value;
v2 := ClientDataSet1.FieldByName(fName).Value;
v3 := ClientDataSet1.FindField(fName).Value;
v4 := ClientDataSet1.FieldValues[fName];
v5 := ClientDataSet1.FieldList[0].Value;
v6 := ClientDataSet1.FieldList.FieldByName(fName).Value;
v7 := ClientDataSet1.FieldList.Find(fName).Value;
v8 := ClientDataSet1.FieldList.Fields[0].Value;
{ 已知这个字段是 Double 类型的, 可同时转换 }
num := ClientDataSet1.Fields[0].AsFloat;
{ 查看结果 }
with Memo1.Lines do begin
Clear;
Add(v1); Add(v2); Add(v3); Add(v4); Add(v5); Add(v6); Add(v7); Add(v8);
Add(FloatToStr(num));
end;
end;
{ 遍历当前行字段的几种方法 }
procedure TForm1.Button2Click(Sender: TObject);
var
Field: TField;
i: Integer;
begin
Memo1.Clear;
for Field in ClientDataSet1.Fields do
begin
Memo1.Lines.Add(Field.Value);
end;
Memo1.Lines.Add('');
for i := 0 to ClientDataSet1.FieldCount - 1 do
begin
Memo1.Lines.Add(ClientDataSet1.Fields[i].Value);
end;
Memo1.Lines.Add('');
for i := 0 to ClientDataSet1.FieldList.Count - 1 do
begin
Memo1.Lines.Add(ClientDataSet1.FieldList[i].Value);
end;
Memo1.Lines.Add('');
end;
{ First、Next、Last、Prior、RecNo }
procedure TForm1.Button3Click(Sender: TObject);
var
s1,s2,s3: string;
begin
{ 读取第二行第二个字段 }
ClientDataSet1.First;
ClientDataSet1.Next;
s1 := ClientDataSet1.Fields[1].Atring;
{ 读取倒数第二行第二个字段 }
ClientDataSet1.Last;
ClientDataSet1.Prior;
s2 := ClientDataSet1.Fields[1].Atring;
{ 读取第四行第二个字段 }
ClientDataSet1.RecNo := 4;
s3 := ClientDataSet1.Fields[1].Atring;
{ 查看结果 }
with Memo1.Lines do begin
Clear;
Add('第二行第二个字段: ' + s1);
Add('倒数第二行第二个字段: ' + s2);
Add('第四行第二个字段: ' + s3);
end;
end;
{ 遍历指定字段的所有记录 }
procedure TForm1.Button4Click(Sender: TObject);
var
i: Integer;
begin
if not ClientDataSet1.Bof then ClientDataSet1.First;
Memo1.Clear;
while not ClientDataSet1.Eof do
begin
Memo1.Lines.Add(ClientDataSet1.FieldList[0].Value);
ClientDataSet1.Next;
end;
Memo1.Lines.Add('-------');
for i := 1 to ClientDataSet1.RecordCount do
begin
ClientDataSet1.RecNo := i;
Memo1.Lines.Add(ClientDataSet1.FieldList[1].Value);
end;
end;
{ 通过 GetFieldList 可以读取几个指定字段的 TField 对象的列表 }
procedure TForm1.Button5Click(Sender: TObject);
var
List: TList;
Field: TField;
i: Integer;
begin
List := TList.Create;
ClientDataSet1.GetFieldList(List, 'ACCT_R; SYMBOL; SHARES');
Memo1.Clear;
for i := 0 to List.Count - 1 do
begin
Field := List[i];
Memo1.Lines.Add(Field.Value);
end;
List.Free;
end;
{ GetFieldData 读取字段值到指针 }
procedure TForm1.Button6Click(Sender: TObject);
var
F1: Double;
F2: array[0..7] of AiChar;
begin
ClientDataSet1.GetFieldData(ClientDataSet1.Fields[0], @F1);
ClientDataSet1.GetFieldData(ClientDataSet1.Fields[1], @F2);
with Memo1.Lines do begin
Clear;
Add(FloatToStr(F1));
Add(F2);
end;
end;
//这是后面的例子用到的函数, 转换 TClientDataSet 时间格式到 TDateTime
function TDateTimeRecToDateTime(DataType: TFieldType; Data: TDateTimeRec): TDateTime;
var
TimeStamp: TTimeStam
begin
case DataType of
ftDate:
begin
TimeStamp.Time := 0;
TimeStamp.Date := Data.Date;
end;
ftTime:
begin
TimeStamp.Time := Data.Time;
TimeStamp.Date := DateDelta;
end;
else
try
TimeStamp := MSecsToTimeStamp(Data.DateTime);
except
TimeStamp.Time := 0;
TimeStamp.Date := 0;
end;
end;
Result := TimeStampToDateTime(TimeStamp);
end;
{ GetCurrentRecord 是把当前行的所有字段(不包括 Blob 字段)读入到缓冲区 }
procedure TForm1.Button7Click(Sender: TObject);
type
THoldingtruct = packed record { 这是根据 holdings.xml 建立的数据结构 }
ACCT_R: Double;
SYMBOL: array[0..7] of AiChar; { 其 Size=7, 但后面还有个 #0 }
SHARES: Double;
PUR_PRICE: Double;
PUR_DATE: Integer;
// Other: array[0..4] of Byte; { 它后面还空着若干字节, 其字节数等于前面的字段数 }
end;
var
buf: THoldingtruct;
DateTimeRec: TDateTimeRec;
begin
//ShowMeage(IntToStr(ClientDataSet1.RecordSize)); { 可通过这个值对照上面的结构 }
if ClientDataSet1.GetCurrentRecord(@buf) then with Memo1.Lines do
begin
Clear;
Add(FloatToStr(buf.ACCT_R));
Add(buf.SYMBOL);
Add(FloatToStr(buf.SHARES));
Add(FloatToStr(buf.PUR_PRICE));
DateTimeRec.Date := buf.PUR_DATE;
Add(DateToStr(TDateTimeRecToDateTime(ftDate, DateTimeRec)));
end;
end;
clientdataset 遍历字段_Delphi TClientDataSet[五]: 读取数据相关推荐
- clientdataset 遍历字段_TClientDataSet[5]: 读取数据
本例用到: TClientDataSet.Fields[]; { 字段集合; 它比 FieldList 有更多功能, 如可获取嵌套字段 } TClientDataSet.FieldList[]; { ...
- clientdataset 遍历字段_解决DBGridEh遍历记录后不移动当前行位置的方法
解决DBGridEh遍历记录后不移动当前行位置的方法 在用DBGridEh配合ClientDataSet使用时,需要知道用户选择了哪些记录,可用遍历记录的方法查询选择列是否为真,但在这之后,Clien ...
- 编写图形界面程序,接受用户输入的5个浮点数据和一个文件目录名,将这五个数据保存在该文件中,再从文件中读取出来并且进行从大到小排序,然后再一次追加保存在该文件中。
File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的 ...
- UDS诊断系列之十五 通过DID读取数据(22)服务
通过DID读取数据服务,服务ID是0x22,主要功能是通过数据标识符(Data Identifier/DID)读取ECU存储的数据. 一.服务说明 先说什么是数据标识符(Data Identifier ...
- 【Unity3D读取数据】(二)Json文件操作(创建、读取、解析、修改)
推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有 ...
- 使用Spark Streaming从kafka中读取数据把数据写入到mysql 实例
文章目录 一. 题目 题目和数据 二. pom依赖 三.建表语句 四. 连接kafka配置类 五. 自定义分区类 六. 读取数据并发送数据 七. 消费数据,把数据存储到mysql 一. 题目 题目和数 ...
- 从网页中读取数据 python_数据分析硬核技能:用 Python 爬取网页
我作为数据科学家的第一个任务,就是做网页爬取.那时候,我对使用代码从网站上获取数据这项技术完全一无所知,它偏偏又是最有逻辑性并且最容易获得的数据来源.在几次尝试之后,网页爬取对我来说就几乎是种本能行为 ...
- hbase shell查询表中某字段不为空的数据量_HBase工作原理
HBASE原理 一.原理 1.物理存储 1.hregion hbase表中的数据按照行键的字典顺序排序,hbase表中的数据按照行的的方向切分为多个region. 最开始只有一个region随着数据量 ...
- IO流 (五) ----- 对象数据的序列化与反序列化
相关文章: <IO流 (一) ----- 基本概念和File类> <IO流 (二) ----- 文件流> <IO流 (三) ----- 字符流和字符缓冲流> < ...
最新文章
- eclipse安装maven
- 差异与阵列和阵列结构和链表的区别
- 电脑服务器不稳定怎么办,网速不稳定怎么办? 网速不稳定的原因与解决办法-电脑教程...
- java 抢单功能设计_java毕业设计_springboot框架的抢单兼职
- 风寒感冒与风热感冒的区分与治疗
- 全球首届“AI球球大作战:Go-Bigger多智能体决策智能挑战赛”开启
- 哎~~~又是RichTextBox
- php红色字体颜色,php生成文字颜色渐变 高级用法
- java监听焦点事件_【Java Swing公开课|Java Swing焦点事件监听器怎么用,看完这篇文章你一定就会了】- 环球网校...
- node soket.io + express + vue-soket.io 之间实现通信
- 如何使用BOOTSTRAP 栅格系统?
- 花书+吴恩达深度学习(二二)自编码器(欠完备,DAE,CAE,PSD)
- java怎么实现日程提醒_如何用java和xml实现日程提醒
- 读书笔记:陈希孺:概率论与数理统计:2014.01.01
- SqlDictionary表,使用SQL语句查询TableID
- webserver/CGI
- DNS服务双解析邮箱地址
- 类似铸剑物语的java游戏_怀旧向:GBA上的10款经典RPG游戏推荐,这些你都玩过吗?...
- 算法设计和分析 ② 分治和递归
- 如何采集苏宁易购买家订单?
热门文章
- 链表c++代码的实现
- 媒体智能-淘宝直播流媒体互动实践 | D2 分享视频+文章
- 对 SolarWinds 事件更深的思考:如何防御供应链攻击
- 开源应用诊断利器 Arthas GitHub Star 突破两万
- 鲜为人知的混沌工程,到底哪里好?
- 序列模型简介——RNN, Bidirectional RNN, LSTM, GRU
- 阿里云HBase携X-Pack再进化,重新赋能轻量级大数据平台
- ThinkPHP 5使用OSS
- 一把王者的时间,我就学会了Nginx
- 2019报告:AI程序员人才需求暴涨35倍!每10个公司就有6个人才缺口