问题标签 [tclientdataset]

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 投票
1 回答
981 浏览

delphi - TClientDataset - 是否可以按 unicode 列名过滤?

我有一个 TClientDataset 可以包含非 ascii 字符的列名。似乎我无法过滤这些列。这是一个示例代码:

设置后MyDataset.Filtered := True出现异常,提示未找到“PLAC”字段。

据我所知,问题在于单元中的方法TExprParser.SetExprParams无法DBCommon正确解析过滤器文本。

除了重命名列之外,我还能做些什么吗?

0 投票
1 回答
694 浏览

delphi - TADO 记录集 XML 到 TClientDataSet XML 格式

我将TADO 记录集保存到 XML 并尝试将其加载到TClientDataSet但收到有关错误 XML 格式的错误。

如何将 ADO XML 记录集格式转换为 TClientDataset 格式。

谢谢。

0 投票
2 回答
628 浏览

ios - Delphi ClientDataSets 可以在 iOS 应用程序中使用吗?

我在 Embarcadero DocWiki 中阅读了未在 iOS 应用程序中使用的组件,但无法判断 ClientDataSets 和 DataSources 是否可以在 iOS 应用程序中使用。任何人都可以确认或否认这些组件是否可以在 iOS 应用程序中工作。

0 投票
2 回答
5646 浏览

delphi - TClientDataSet 中的“数据包不匹配”错误

我有一个 .cds 文件,表明它是TClientDataSet文件。当我尝试TClientDataSet在 Delphi 7 中打开它时,当设置Active为时true,出现错误“数据包不匹配”。请帮我 :(

0 投票
1 回答
1960 浏览

delphi - 使用 TClientDataSet 在 ApplyUpdates 之后获取触发器生成的值

我有一个(火鸟)数据库。对于我的大多数表,我都有一个触发器,它在插入之前触发,它将通过生成器为我创建主键 (PK),并向新插入的记录写入 Created Date 值和 Created By 值。我还有一个更新触发器,它写入更新日期字段和更新者字段。

例如(客户端是我数据库中的一个表):

当我通过我的 ClientDataSet (CDS) 应用更新时 - 通过 TDSProviderConnection 附加到远程 TDataSetProviders,我如何“检索”这些生成的值?如果我编辑一个现有的(这又会调用 t_client_update 触发器,调用 RefreshRecord 将获得 updated 和 updated_by 字段。但是,Doco 说要谨慎使用该方法,因此这可能不是实现此目的的正确方法。我在我调用 ApplyUpdates(-1) 之后直接调用它。

我使用的 CDS 仅包含我尝试编辑的一条记录。对于新记录,CDS 处于 dsInsert 模式。一切都已写入数据库,所以我只需要再次获取这些新数据。我也尝试过使用包含表中所有记录的 CDS 来查看它是否更简单但没有任何区别 - 不足为奇。我需要这些信息的原因只是为了在 DB Aware 控件中向用户显示这些值。它们是只读的。

我猜想在使用 PK 编辑现有记录时,我可以在记录上调用 Get,但这对插入没有帮助,因为我不知道新的 PK 是什么。

我尝试将更新应用到我的 CDS 的示例(actDSSave 是一个 TDataSetPost 操作)

我正在为附加到远程 DataSetProvider 的数据集使用 TIBQuery。此查询 SQL 是一个简单的select * from client where client_id = :client_id。我也尝试将此查询与 TIBUpdateSQL 相关联,并尝试在 DataSetProvider 中将 poAutoRefresh 设置为 true。

那么是否有可能以这种方式获得这些触发器生成的值,还是我需要以不同的方式来处理它?我能想到的另一种方法是创建存储过程,对每个表执行 CRUD 并使用它(使用适当的输入/输出参数来返回这些新数据),但希望我不必走这条路。希望我在这里提供了足够的信息来解释和复制这个问题。

谢谢

编辑 在上面实现,DoApplyUpdates(-1) 是我自己的方法。目前它的实现很简单:

FdatCommon 是一个包含我的 CDS 的 TDataModule。

0 投票
1 回答
1836 浏览

delphi - 我可以在运行时创建 TDataSetFields 吗?

我有一个简单的代码,它在运行时创建一个数据集的副本及其所有详细数据集:

CreateDataSet引发EDBClient异常并显示消息“无效的字段类型”。谁能告诉我怎么了?

0 投票
1 回答
717 浏览

delphi - 如何通过 TDatasetProvider 检索所有记录?

如果我有两个都来自 的数据集TCustomClientDataset,我可以在另一个上调用CloneCursor一个,并对相同的数据有一个独立的视图。该文档表明,您可以通过使用 a 来实现基本相同的目标TDatasetProvider,只是源数据集可以是任何数据集。

我正在努力完成这项工作。我有一个TSimpleDataset(我们称之为A)从数据库中读取数据,还有一个 TClientDataset(我们称之为B)与它的单独视图一起工作,并且有一个TDBGrid连接到B.

如果我调用B.CloneCursor(A, ...),网格会显示A. 但是,如果我创建 aTDatasetProvider并将其Dataset属性设置为A,然后将其设置为 的提供者B,则连接到的网格B仅显示一行,而不是全部。

我做错了什么,我该如何解决它以便网格最终显示所有A

0 投票
1 回答
597 浏览

delphi - 当从 Delphi 7 调用外部 dll 时,TClientDataSet 中缺少字段错误

我在 Delphi XE2 中创建了一个 DLL,它使用 DB Express 和 TClientDataSet 来显示 DB Grid 中的连接结果。有一个简单的功能可以启动/显示导出以供其他应用程序使用的表单。在 FormActivate 上执行查询并填充网格。

当我调用该函数以从单独的 Delphi XE2 应用程序中显示表单时,一切运行正常 - 我找不到任何问题。

但是,当我从单独的 Delphi 7 应用程序调用相同的函数时,我收到一个错误,即 TClientDataSet 无法从连接中找到字段。

例如,数据返回如下:

从 XE2 调用时,没有问题。当从 Delphi 7 调用时,最后一行(用于从 db 网格中隐藏该字段)给出了一个错误:

虽然第一行很好 - 如果我切换查询的顺序以便首先检索“t”字段(“from t left join s”),那么我会在“s”字段上得到错误。

关于可能导致不兼容的任何想法?

谢谢!

0 投票
1 回答
1065 浏览

delphi - 如果按不同的索引排序,Delphi 7 TClientDataSet 聚合不起作用

我有一个包含三个聚合字段的 ClientDataset。除其他外,聚合计算每个客户的总订购量,因此它们使用客户 ID 的索引。

我将此 ClientDataset 用于报告 (FastReports),它显示所有客户及其订单,按客户分组并按订单日期排序。

因此,我在 ClientDataSet 上有两个索引,一个在 CustomerId 上(用于分组和聚合字段),一个在 CustomerId+OrderDate 上(用于排序)。

现在,当我为客户端数据集选择排序索引时,聚合不再起作用并在我的报告中返回空值。它们仅在我为 ClientDataset 本身选择分组索引时才有效,即使每个单独的聚合已经使用了正确的索引。

我非常希望这样做,因为我要么必须编写大量额外的代码,要么调整我的报告(我想在每个组的顶部显示总数,因此 FR SUM 表达式将无法正常工作任何一个)。

0 投票
2 回答
2323 浏览

sql - 更新后刷新 TClientDataset 中的值

我有一个 TClientDataset 包含来自多个表的数据。当我在此数据集上应用更新时,它可能会不同步。

我给你举一个例子:

在要更新的表中,我得到了一个名为“Client_id”的 ID。clientdataset 还包含一个值“Client_name”,该值从“Client”表中获取并显示在 GUI 中。

然后我更改表中的“Client_id”并在表上应用更新,我的数据集中的“Client_name”字段突然不同步。这自然是因为clientdataset还没有被刷新。

现在我可以在 afterpost 事件上执行 clientdataet.refresh,但是数据集上的光标会跳转到第一条记录,并且我失去了指向更新记录的指针。

有人知道如何解决这个问题吗?