mORMot虚拟数据集--TOrmTableDataSet

news/2024/10/5 21:12:45/文章来源:https://www.cnblogs.com/hieroly/p/18288178

如何快速显示 OrmTable--可以使用TOrmTableDataSet

这是mormot.db.rad.ui.orm的主要功能

type/// 只读虚拟TDataSet,能够访问TOrmTableTOrmTableDataSet = class(TVirtualDataSet)protectedfTable: TOrmTable;  // 关联的TOrmTable实例{$ifndef UNICODE}  // 如果不是在Unicode版本的Delphi中fForceWideString: boolean;  // 强制使用WideString字段代替AnsiString{$endif UNICODE}fTableShouldBeFreed: boolean;  // 指示TOrmTable实例是否应该随此数据集一起释放fTempBlob: RawBlob;  // 临时Blob存储procedure InternalInitFieldDefs; override;  // 初始化字段定义function GetRecordCount: integer; override;  // 获取记录数function GetRowFieldData(Field: TField; RowIndex: integer;out ResultLen: integer; OnlyCheckNull: boolean): pointer; override;  // 获取行字段数据function SearchForField(const aLookupFieldName: RawUtf8;const aLookupValue: variant; aOptions: TLocateOptions): integer; override;  // 搜索字段public/// 使用提供的TOrmTable初始化虚拟TDataSet// - 警告:除非设置了TableShouldBeFreed属性为true或使用了CreateOwnedTable()构造函数,否则提供的TOrmTable实例在返回的TOrmTableDataSet实例被使用时必须始终可用// - 在非Unicode版本的Delphi中,可以设置ForceWideString以强制使用WideString字段代替AnsiString(如果需要)// - TDataSet在创建时将被打开constructor Create(Owner: TComponent; OrmTable: TOrmTable {$ifndef UNICODE}; ForceWideString: boolean = false{$endif}); reintroduce;/// 初始化拥有TOrmTable的虚拟TDataSet// - 此构造函数将设置TableShouldBeFreed为TRUE// - 在非Unicode版本的Delphi中,可以设置ForceWideString以强制使用WideString字段代替AnsiString(如果需要)// - TDataSet在创建时将被打开constructor CreateOwnedTable(Owner: TComponent; OrmTable: TOrmTable  {$ifndef UNICODE}; ForceWideString: boolean = false{$endif}); reintroduce;/// 从提供的JSON结果初始化虚拟TDataSet// - 此构造函数将解析提供的JSON内容,并创建一个内部的TOrmTableJson实例来处理数据,根据JSON内容猜测列类型// - 在非Unicode版本的Delphi中,可以设置ForceWideString以强制使用WideString字段代替AnsiString(如果需要)// - TDataSet在创建时将被打开constructor CreateFromJson(Owner: TComponent; const Json: RawUtf8 {$ifndef UNICODE}; ForceWideString: boolean = false{$endif}); reintroduce; overload;/// 从提供的JSON结果初始化虚拟TDataSet,并设置预期的列类型// - 此构造函数将解析提供的JSON内容,并根据列类型创建内部的TOrmTableJson实例来处理数据// - 在非Unicode版本的Delphi中,可以设置ForceWideString以强制使用WideString字段代替AnsiString(如果需要)// - TDataSet在创建时将被打开constructor CreateFromJson(Owner: TComponent; const Json: RawUtf8;const ColumnTypes: array of TOrmFieldType{$ifndef UNICODE}; ForceWideString: boolean = false{$endif});reintroduce; overload;/// 从提供的JSON ORM结果初始化虚拟TDataSet// - 可以设置TOrm类以检索预期的列类型// - 此构造函数将解析提供的JSON内容,并创建一个内部的TOrmTableJson实例来处理数据// - 在非Unicode版本的Delphi中,可以设置ForceWideString以强制使用WideString字段代替AnsiString(如果需要)// - TDataSet在创建时将被打开constructor CreateFromJson(Owner: TComponent; const Json: RawUtf8; const Tables: array of TOrmClass {$ifndef UNICODE}; ForceWideString: boolean = false{$endif});  reintroduce; overload;/// 销毁类实例destructor Destroy; override;/// 如果提供的TOrmTable实例应该随此类一起释放// - Create()将默认设置为FALSE(意味着TOrmTable实例在TOrmTableDataSet实例被使用时必须始终可用)// - CreateOwnedTable()将在TOrmTableDataSet实例释放时设置并释放TOrmTable实例// - 您也可以在Create()之后手动设置此属性property TableShouldBeFreed: boolean  read fTableShouldBeFreed write fTableShouldBeFreed;/// 访问内部的TOrmTable/TOrmTableJson数据// - 您可以使用例如SortFields()方法// - 如果列保持不变,您可以动态更改表内容property Table: TOrmTable  read fTable write fTable;end;{************ JSON/ORM 到 TDataSet 包装函数 }type/// 存储低级别DB.pas字段信息// - 由GetDBFieldDef()和GetDBFieldValue()函数使用TDBFieldDef = recordFieldName: string;  // 字段名DBType: TFieldType;  // 字段类型DBSize: integer;  // 字段大小SqlType: TOrmFieldType;  // SQL字段类型SqlIndex: integer;  // SQL索引FieldType: POrmTableFieldType;  // 字段类型指针end;/// 获取低级别DB.pas字段信息
// - 准备添加到TDataSet中,如:aDataSet.FieldDefs.Add(FieldName,DBType,DBSize);
procedure GetDBFieldDef(aTable: TOrmTable; aField: integer; out DBFieldDef: TDBFieldDef {$ifndef UNICODE}; aForceWideString: boolean = false{$endif});/// 填充DB.pas字段内容
// - 例如,由mormot.db.rad.ui.cds.pas中的ToClientDataSet()使用
procedure GetDBFieldValue(aTable: TOrmTable; aRow: integer; aField: TField; aDataSet: TDataSet; const DBFieldDef: TDBFieldDef);/// 将JSON结果转换为TDataSet,从JSON中猜测字段类型
// - 此函数是TOrmTableDataSet.CreateFromJson()的包装器
// - 在非Unicode版本的Delphi中,可以设置aForceWideString以强制使用WideString字段代替AnsiString(如果需要)
// - 在Unicode版本的Delphi(2009+)中,将使用string/UnicodeString
function JsonToDataSet(aOwner: TComponent; const aJson: RawUtf8 {$ifndef UNICODE}; aForceWideString: boolean = false{$endif}): TOrmTableDataSet;overload; {$ifdef HASINLINE} inline;{$endif}/// 将JSON ORM结果转换为TDataSet,遵循TOrm字段类型
// - 此函数是TOrmTableDataSet.CreateFromJson()的包装器
// - 在非Unicode版本的Delphi中,可以设置aForceWideString以强制使用WideString字段代替AnsiString(如果需要)
// - 在Unicode版本的Delphi(2009+)中,将使用string/UnicodeString
function JsonTableToDataSet(aOwner: TComponent; const aJson: RawUtf8; const Tables: array of TOrmClass {$ifndef UNICODE}; aForceWideString: boolean = false{$endif}): TOrmTableDataSet;/// 将JSON结果转换为TDataSet,并给定一组列类型
// - 此函数是TOrmTableDataSet.CreateFromJson()的包装器
// - 在非Unicode版本的Delphi中,可以设置aForceWideString以强制使用WideString字段代替AnsiString(如果需要)
// - 在Unicode版本的Delphi(2009+)中,将使用string/UnicodeString
function JsonToDataSet(aOwner: TComponent; const aJson: RawUtf8; const ColumnTypes: array of TOrmFieldType {$ifndef UNICODE}; aForceWideString: boolean = false{$endif}): TOrmTableDataSet;overload;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/739651.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是新质生产力

什么是新质生产力

好消息!数据库管理神器 Navicat 推出免费精简版:Navicat Premium Lite

前言 好消息,前不久Navicat推出了免费精简版的数据库管理工具Navicat Premium Lite,可用于商业和非商业目的,我们再也不需要付费、找破解版或者找其他免费平替工具了,有需要的同学可以马上下载使用起来。 工具官方介绍 Navicat Premium Lite 是 Navicat 的精简版,它包含了…

读人工智能全传05专家系统

读人工智能全传05专家系统1. 知识就是力量 1.1. 人工智能领域此前存在的问题是过度关注搜索和解决问题这种通用法则 1.2. “弱”方法缺少一个关键的要素,而这一要素才是在所有智能行为中起决定性作用的组成部分:知识 1.3. 一种基于知识的人工智能系统:专家系统开始出现,它能…

副本集要点

oplog 中的每个操作都是幂等的。也就是说,无论对目标数据集应用一次还是多次,oplog 操作都会产生相同的结果。 Oplog大小当您第一次启动副本集成员时,如果您未指定 oplog 大小,MongoDB 将创建默认大小的 oplog。默认 oplog 大小取决于存储引擎: 存储引擎默认 Oplog 大小Wi…

副本集

MongoDB 中的副本集是一组mongod提供冗余和高可用性的进程。副本集的成员包括: 主服务器接收所有写操作。 主节点是副本集中唯一接收写入操作的成员。MongoDB 在主节点上应用写入操作,然后将操作记录在主节点的oplog上。辅助成员复制此日志并将操作应用于其数据集。副本集的所…

06.函数

Go 语言中的函数是代码组织和复用的基础,函数的定义和调用非常简单明了。下面是 Go 语言中函数的基础语法和一些关键概念: 函数的定义 在 Go 语言中,函数的定义包括函数名、参数列表、返回值类型和函数体。语法格式如下:func 函数名(参数列表) 返回值类型 {函数体 } 示例 下…

第一周学习总结

暑假第一周,经过短暂的调整,我进入到了Java语言的学习中。通过这一周的学习,在《疯狂Java讲义》与B站黑马程序员课程的帮助下,我初步了解了Java这门编程语言。以下是我对这周学习的总结: 1.学习使用CMD 学会了使用Win+R输入cmd打开CMD窗口,学习了一些常见CMD指令(如dir,…

Aide插件

aide/docs/configuration/README_CN.md at master nicepkg/aide GitHub VSCode代码阅读神器正式发布_哔哩哔哩_bilibili 结合chatgpt实现多种功能,包含代码一键生成逐行翻译、多种编程语言之间的转换等功能,对于接手大型工程的朋友们比较友善。 在安装、运行的过程中自己遇…

如何返回“无法访问此网站,网页可能暂时无法连接,或者它已经永久性地移动到了新网址”

测试网址:https://apd-vlive.apdcdn.tc.qq.com/vhqts.tc.qq.com/AH06mhzdlI9B9pSNWNcCQ3qMPITV0Kvp7M9y38FV4acs/B_tRCdt2L6hl1ezG-aht1_p5_cq9aDE5woqbhlSZqo2k-426BaS8_TYPecOQIueTdj/svp_50112/KVzxIc_QsMTArbayBuac_YlujjBVGNK2tuYZLHLdMFhy2_PHwGTGHd8PTpwBeJf4V8Ol2Ejdk…

05.循环

for循环for 的条件里不需要括号 for 的条件里可以省略初始条件,结束条件,递增表达式将整数转换为字符串:package mainimport ("fmt""strconv" )func convertToBin(n int) string {//将整数转换为二进制result := ""for ; n > 0; n /= 2 {l…

使用 Kotlin 语言开发 NeoForge 模组

前言 Kotlin 是由 JetBrains 推出的一门基于 JVM 平台的编程语言,引入了许多不同于 Java 的先进概念以及语法糖,极大地提高了开发人员的编程效率,广受各路 Java 开发者推崇。但由于 NeoForge 官方并未就使用 Kotlin 开发模组提供支持,使得精通 Kotlin 的开发者未能使用所擅…