问题标签 [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 回答
1303 浏览

delphi - 将可写虚拟字段添加到可更新的 TClientDataset

我有一个数据库表,我需要在其中插入记录。我正在使用可更新的 TClientDataset,一切正常。

现在,我需要添加一个虚拟字段;不是经过计算的。我可以在其中写入行状态的一个字段(只是我将在 ApplyUpdates 之前使用的一些信息),但这不是数据库表的一部分。

我看过这篇很有启发性的帖子,但是添加的字段是计算出来的,无法更新和保留信息。这对我来说不好。

我试图从数据库选择中添加一个“虚拟字段”并修复 ProviderFlags 以删除 pfUpdate。

我在 Provider.pas 中看到,在构建插入 sql 之前,会检查 ProviderFlags。这确实应该有效,问题是 ProviderFlags 似乎没有从我上面的声明中更新。

请问,你知道如何动态添加一个字段,它是可写的,但被delphi数据库更新过程忽略了?

我正在使用德尔福 7。

谢谢你的帮助。

0 投票
2 回答
3734 浏览

delphi - DELPHI:使用 ClientDataSet 和 CalcFields 的主从细节

我有一个主/详细 ClientDataSet 如下(这些是在运行时创建/填充的,并填充了从 API 调用返回的数据,没有数据库连接):

我将服务显示为下拉字段,然后使用该服务的可用插件填充网格。'TotalCost' 字段是一个计算字段,显示在网格中它自己的列中。“已选择”字段用于跟踪网格中显示的复选框,以指示客户想要该特定附加组件。

这一切都按预期工作。我现在需要计算服务加上任何附加组件的总成本。我可以使用以下方式检索的服务成本:

但是,我无法从每个选定的附加组件中检索 TotalCost。我以为我可以使用聚合字段,但在我的搜索中我发现使用主/详细信息设置是不可行的。我还尝试简单地遍历详细信息 ClientsDataSet,如下所示:

但这会导致无限循环。当我调试这部分代码时,我发现 ...DataSet.First 正在调用 CalcFields(或其他依次调用 CalcFields 的东西)。

How can I iterate over the DataSet of selected add-ons to calculate the total costs dynamically (whenever a selection or quantity changes)?

- 编辑 -

我尝试在详细信息表上设置聚合,如下所示:

  • 添加了标签聚合'AggregatePrice'
  • 设置字段如下:Active - True Name - AggregatePrice' Expression - SUM(TotalPrice) GroupingLevel - 1 IndexName - ServiceId Visible - True

当我运行它时,我收到错误消息“字段'TotalPrice'不是要在聚合中使用的正确类型的计算字段,请使用内部计算”

0 投票
1 回答
1766 浏览

delphi - 聚合 TClientDataset 中的计算字段

是否可以在计算字段上添加聚合字段?

假设有一个包含以下字段的 cd:

  • ID(自增)
  • 名称(字符串)
  • 价格(浮动)
  • 数量(整数)
  • 总计(整数) - 计算字段 - 价格 * 数量

我想添加一个聚合来获得 Total 列的总和。可能吗?

0 投票
1 回答
3431 浏览

delphi - 哪些属性决定了 ClientDataSet 字段的大小?

我有一个使用 ClientDataSets 和本地文件存储的应用程序。一些信息显示在数据库网格中,我发现它被截断了——显示了字符串的前 500 个字符左右,但基础字段需要更长。所以我回到我的代码并增加了底层 FieldDef 的大小以及它们的显示宽度。我还创建了一个新数据集(在设计时)。最后,我运行了应用程序,并创建了一个新数据库。然而,只显示了约 500 个字符。

我应该在哪里查看限制我的字段长度的因素?

0 投票
1 回答
2768 浏览

delphi - TClientDataSet 错误“尝试修改只读字段”

我使用下一个链

获取 Items 和 ItemType 表的数据并离线使用。项 TADOQuery 的 SQL 属性包含一个简单的查询

ItemType 更简单:

现在 - 对于 cdsItems,我将 TypeName 字段修改为查找字段并将其链接到 cdsItemType - 没什么不寻常的 - 并将 cdsItems 绑定到网格。但是当我尝试通过在网格中使用组合框来修改数据时 - 它会引发错误“尝试修改只读字段”。

我设置为 TCliendDataSet ReanOnly:= false 的所有字段。此外,在我将数据输入 TClientDataSets 之后 - 使用 for - 我再次将所有字段设置为 ReadOnly:=False。但即便如此,我仍然得到“尝试修改只读字段”。

使用的数据库是 MS SQL Server 2005 Express 版本。

0 投票
0 回答
1292 浏览

delphi - delphi 2009 ClientDataSet.ApplyUpdates(-1) 在 10 行处理上返回 3457496

在事务下运行代码,然后调用 applayUpdates,并缓存错误以修复它们。但是在delphi 7中工作的reconsile代码在delphi 2009上进入无限循环。

table1 和 table2 共享连接。

从 delphi 7 到 delphi 2009 的使用过程中,ClientDataSet 是否发生了变化?

提供者是 TDataSetProvider,它连接到 ado 组件到 mssql 数据库

0 投票
1 回答
552 浏览

php - PHP - MYSQL 到 ClientDataSet

我对 Delphi / ClientDataSets 了解不多,但我愿意研究它。不过,在我追求它之前,我有一个问题,以确定我想要实现的目标是否可行。

我想使用 PHP 脚本每周一次将我的 MYSQL 数据库的十几个子集保存到 CDS 文件中。是否有我可以遵循的文件规范来创建 CDS 文件?我将在使用 Linux 的共享 Web 主机上运行脚本,所以我认为在服务器上运行 Delphi 脚本是不可行的。

谢谢!

0 投票
1 回答
1039 浏览

php - PHP 附加到 ClientDataSet CDS 文件

我有一个空的 Delphi ClientDataSet CDS 文件设置,其中包含我需要的所有列/标题/数据类型。我想使用 PHP 将关联数组附加到 CDS 行中。这可能吗?

该数组可以简单地是:

我选择 PHP 是因为我精通该语言,而且我的 Web 服务器是一个共享 Linux 主机。基本上我不能在这里运行Delphi。我对可以在这种环境下工作的其他选项持开放态度。谢谢!

编辑:

有关我的解决方案,请参阅此帖子的评论。

0 投票
1 回答
1396 浏览

delphi - 为什么 OnEditError 或 OnPostError 不能捕获 TClientDataSet 中的无效用户条目?

我有一个通过一些数据源附加到 TDBGrid 的内存数据集。问题是,每当用户在数字字段中输入减号并按 ENTER 或导航到另一条记录时,都会触发 AV(验证错误)。我无法从 TDBGrid 或 TClientDataSet(OnEditError、OnPostError)中捕获 AV。

我在这里做错什么了吗。如果没有,是否有人有解决方法?

使用 Delphi XE2 Enterprise,第 4 次更新;最新的 MIDAS.DLL;目标平台:Win64。

==================================================== ==============================

请尝试以下方法:

1- 创建一个新的 VCL 应用程序/表单,并将对象:TClientDataSet、一个 TDBGrid 和一个 TDataSource 添加到表单中。ClientDataSet 未附加到任何数据库(内存中)

2- 向 Table1(TClientDataSet)添加一个持久的数字字段。

3-链接上述三个对象。持久字段的列应该出现在 TDBGrid 上。

4- 在主窗体的 OnShow 方法中添加以下行:

Table1.Active := 假;

表1.创建数据集;

Table1.Active := 真;

5- 运行您的程序并在数字字段列中键入减号,然后按 Enter。

检查 AV,然后尝试将 OnEditError 和/或 OnPostError 事件处理程序添加到 Table1 以捕获 AV。您不能中止帖子。意思是,AV 会发生,你只能使用 Application.OnException 处理程序来捕获它。这不好。假设您的应用程序包含许多表单和例程,而不是更高级别,您应该能够在程序运行的级别上执行某些操作。

我希望我的问题更清楚。

0 投票
1 回答
5009 浏览

delphi - 将 TStringGrid 导出为 doc、xls 和 pdf

我有一种我在 TZColorStringGrid 的帮助下创建的报告(它是 Delphi 的 TStringGrid 的后代),我希望能够导出为 doc、xls、pdf 并能够打印此报告。所以我在过去两天一直在思考如何做到这一点。

我在这里找到了一篇帖子,有人询问如何从 TStringGrid 的内容创建 TClientDataSet 如何从 TStringGrid 的内容创建 QuickReport,并且提供的答案是使用 QuickReport.OnNeedData 事件处理程序。当我读到我很高兴时,我对自己说就是这样,但是在我意识到我的 DelphiXe2 上没有快速报告之后,所以这个解决方案失败了。我可以使用 Fast Reports 以类似的方式执行此操作吗?

我想解决问题的第二种方法是使用 JVCL 导出组件,但导出仅适用于 DBGrid,不适用于 TStringGrid。所以我认为我还需要从我的 TStringGrid 创建 TClientDataSet 并将 TClientDataSet 链接到 DbGrid 并导出它。但我不知道如何创建该 ClientDataSet 以及是否会保留我的 TStringGrid 结构,如下图所示

稍后编辑:TJvPrint 是 JVCL 的组件,用于打印字符串网格,它不需要 TClientDataSet 即可工作,但它不保留我的表结构(我的意思是合并的单元格、字体格式等)

点击放大图片

我认为可以解决我的问题的第三种方法是找到一个导出我的 TStringGrid 的免费组件。我找到了一个 SMExport,但它不是免费的,而且我根本没有钱投资它(不幸的是我还是个学生)。您知道可以用来导出 TStringGrid 的任何其他免费组件吗?

如果有人想到导出 TStringGrid 的另一种解决方案并且他想分享它,我将不胜感激!