问题标签 [tdataset]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
407 浏览

delphi - 更新数据集

假设我有 2 个数据集:A 和 B,它们具有相同的列。我想获得“距离路径”——将数据集 A 更改为 B 所需的最少操作。

我可以假设,A 和 B 只包含一些差异,我正在寻找更好的东西,然后:

  • 删除所有 A 的元素
  • 将 B 的所有元素插入 A

这个怎么存档?

0 投票
3 回答
350 浏览

c - TDataset --> 指向行列矩阵的指针?

我正在用 Lazarus/FreePascal(如 Delphi)编写一个 Windows 应用程序。我有一个由5000 行、2 列数值填充的TDataset对象。我需要将此数据传递给我从 .dll 库中静态导入的函数。C

这是该库手册的摘录,解释了其参数应采用的格式:

这个函数建立一个索引并返回一个对它的引用。此函数预期的参数如下: dataset、rows 和 cols - 用于指定点的输入数据集: dataset 是指向以行优先顺序存储的 rows cols 矩阵的指针(每行一个特征)

我可以简单地传递 TDataSet 对象吗?我是否必须先对其进行处理以使指针处于正确的形式?

0 投票
2 回答
967 浏览

delphi - 如何在 Delphi 中使用 TDataset 和 Dll

我想创建一个 dll 来从文件中导入数据(不同的格式,例如 csv、txt、xls、...)。我的想法是这样的:dll 使用她的“引擎”加载数据,然后将此数据发送到我的应用程序,以便我的应用程序可以在网格内显示它们。

这是我的第二个 DLL,所以我有一些问题/疑问。

我认为我的 DLL 应该将数据发送到我的应用程序上的 TDataset,但是我如何调用带有 TDataset 作为参数的 DLL?

有什么建议么?实现我的想法的最简单方法是什么?(如果可能的话)

0 投票
1 回答
2325 浏览

delphi - Delphi - 如何从 TDataSet 中释放内存?

D2010,Win7 64位。你好,

我有一个 buttonClick 事件,需要处理在另一个例程中打开的 TDataSet ... GetDBGenericData。

函数 GetDBGenericData 返回一个 TDataSet。该例程基本上采用 tQuery 组件,设置它的 SQL 属性,然后打开它。然后它将 TDataSet 返回给我的 buttonclick。

我的问题是——了解 DS。我在这个例程中在这里创建它。我将它“分配”给指向组件的 TDataSet。如果我不释放它,我有内存泄漏(由 EurekaLog 报告)。如果我释放它,我下次运行这个例程时会得到一个 AV。(特别是在 GetDBGenericData 例程中)。

我认为正在发生的事情是 DS 被分配给(而不是复制)正在返回的 TDataSet,所以实际上,我在这个例程中释放了两个 DS,在 GetDBGenericData 中释放了 tQuery,当我做一个免费的.

如何“断开”链接,然后只删除与我动态创建的内存关联的内存。

谢谢,GS

0 投票
1 回答
727 浏览

c++builder - 使用 VCL 组件在网格中显示非常大的数据集

我的 C++ CAD 应用程序维护用户建模操作的日志,以便可以取消应用和重新应用它们。任何特定项目可能只包含几个操作,也可能包含数十万个操作。我已经有了自己的数据结构,可以以一种内存效率高的方式管理这些数据,而且效果很好。但现在我添加了一个功能,允许用户在网格中检查他的操作日志。(我使用的是 Embarcadero RAD Studio 2010;所有 GUI 都使用 VCL。)

目前,我正在使用 TDBGrid 组件向用户显示行中的操作数据。这是我连接组件的方式:

TDBGrid.DataSource = 一个 TDataSource

TDataSource.DataSet = 一个 TClientDataSet

TClientDataSet.ProviderName = 一个 TDataSetProvider

TDataSetProvider.DataSet = 一个 ProjectDataSet

ProjectDataSet 是我从 TDataSet 派生的一个类。

因为我是从我自己的数据结构中而不是从数据库中提取操作数据,所以我在我的 ProjectDataSet 类中覆盖了 GetFieldData 和 GetRecord 函数(以及其他几个函数),以便它直接从我自己的数据结构中返回数据(不做任何数据库查询)。这行得通。

为了在显示大量操作时最大限度地减少内存使用,我在 TClientDataSet 中设置了“FetchOnDemand”属性,并将“PacketRecords”设置为 100。因此,最初只有前 100 个操作出现在网格中。一旦用户滚动到网格底部,接下来的 100 个操作将由 TClientDataSet 自动获取并显示在网格中。

所有这些都非常有效。我的问题是,当用户在网格中滚动时,TClientDataSet 会继续获取越来越多的记录,而不会释放任何记录。因此,如果用户在一个非常大的项目中向下滚动足够远,我最终会耗尽内存。

所以,我的问题是:让这个 GUI 工作的最佳方法是什么?本质上,我希望网格表现得像电子表格。我希望用户能够在操作列表中上下滚动(或跳转到特定行),不管有多少操作,我不希望 GUI 组件在内存中保留很多东西用户并不迫切需要。

我假设 TDBGrid(或其他一些 VCL 组件)旨在通过一次仅获取几条记录来显示任意大的数据集,那么它是如何完成的呢?

如果我需要重新考虑 GUI,那很好。但是如果我可以使用同一个 GUI 来显示 10 个操作项目或 100,000 个操作项目,那就太好了。

谢谢。

0 投票
2 回答
4460 浏览

delphi - Delphi XE2 Dataset 字段类型TStringField 不支持Unicode?

我一直在查看 Delphi XE2 中的 TDataset 类及其字符串字段,并注意到 AsWideString 返回一个 UnicodeString 类型。然而,它从函数 TField.AsString:String 中获取值,该函数又调用 TFIeld.AsAnsiString:AnsiString。因此任何 unicode 字符都会丢失?传递给 TDataset.GetFieldData 的缓冲区也被声明为 AnsiChar 数组。

我是否正确理解这一点?

0 投票
5 回答
4488 浏览

delphi - 如何获取内存对象的数据集?

有谁知道与泛型和 RTTI 一起使用的 TDataset 后代,以便我可以编写这样的代码,并在 GUI 中使用数据感知组件?:

应该是可能的。fielddefs 可以通过 RTTI 创建,因为数据的确切类型是已知的。值也可以自动来回编组,因此您可以查看和编辑类或记录中的数据。

我讨厌编写大量无用的编组代码,而所需的信息已经可以通过 RTTI 获得。

或者也许有人曾经写过某种 TEnumerable <-> TDataset 适配器?

是否存在类似的东西,或者我应该开始写一个吗?

...

我能找到的最接近的东西是 Marco Cantu 的一个(优秀的!)示例,来自 Mastering Delphi 7,但代码本身并没有使用新的语言特性,如泛型、新的 RTTI 系统或属性,而且它没有不能与 Unicode delphi 一起使用。自 D7 以来,TDataset 也发生了变化。

0 投票
9 回答
4297 浏览

c# - Delphi中的DataTable(类似于DataSet)组件

我是 Delphi 开发人员和 C# 开发人员。C# 具有支持随机访问行的 DataTable 类。是否有类似于 DataTable (C#) 的第三方 TDataSet (Delphi) 组件?

0 投票
4 回答
5316 浏览

delphi - 获取 TField 来自的表的名称

我正在使用 TDataSet,其中 CommandText 属性设置为 SQL 查询。我还制作了以下函数,它根据 TDataSet 的字段创建 SQL 查询的一部分。然而它是不完整的。如您所见,我仍然需要获取 TField 来自的表的名称。我如何实现这一目标?

0 投票
1 回答
596 浏览

delphi - 如何创建一个简单的只读 TDataSet 来访问内存结构

我有一个(几乎)静态和只读的内存结构。我想将其数据呈现​​为 TDataSet 后代,以使我能够使用 DB 网格等来查看/报告数据。我不需要编辑(事实上这是必须禁止的)。我已经看到了这个 SO question和其他一些建议,即一些自制代码“书签有问题”。我真的只想要一个简单的解决方案,理想情况下,我可以用我已知的字段类型创建一个简单的“虚拟”表,然后为每个表提供一个“OnGetFieldData”事件。我的另一个选择是使用 DevExpress TDxMemData 内存表并根据我的数据更改填充它,但这效率较低且更混乱。还有其他解决方案吗?