问题标签 [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 投票
1 回答
346 浏览

multithreading - TDataset 线程与 DBGrid 竞争

我使 TDataset 后代异步,而不是sleepProcessMessages主线程中,它通过来自网络线程的事件工作。因此,当 Recordset 准备就绪时,它会调用

它可以工作,但有时我会遇到从这个线程调用的问题,而GetRecordDBGrid从 Form 的 ProcessMessages调用的 DBGrid 从主线程调用。通过记录我看到的两个功能OpenGetFieldDataDrawCells

并且当 ActiveBuffer 列数据为零时断言中断,我可以看到 DBGrid 尝试读取比GetRecord读取到自己的内部 FBuffers 更高的行。例如,如果断言在GetFieldData第 3 行触发 - FBuffers 从 Recordset 中可用的总共 36 行中填充到第 2 行。当我使用 F8 逐步调试时,GetRecord没有错误,我按 F9 并在另一条记录中获得断言。

我不太明白究竟是如何DBGrid工作的TDataset(即使堆栈跟踪很大),但是这个线程竞争可以解决吗?

0 投票
4 回答
1295 浏览

delphi - 避免在 TDataSet 中添加重复的列名

我正在使用以下代码向 TDataSet 动态添加字段:

问题是我可能会得到重复的名称,所以筛选重复项而不添加已添加的重复项的最简单方法是什么。

我希望不要为添加的每一列遍历 TDataSet.FieldDefList,因为这对于每一列添加来说都是乏味的。并且可以有很多补充。

如果可能,请提供另一种解决方案。如果没有,那么我会卡住使用 FieldDefList 迭代。

我还要补充一点,在 SQL 查询中筛选重复项是一个选项,但不是一个理想的选项。

谢谢

0 投票
1 回答
442 浏览

delphi - 如何从 _Recordset ADO 接口访问 Delphi 的 TField.DisplayText?

我已经TDataSet.Recordset: _Recordset在应用程序外部使用 COM 方法传递了接口。但我看到那里有一个狂野的数据库数据。如何TField.DisplayText_RecordsetADO 界面访问 Delphi?(TField.DisplayText显示OnGetText转换后的数据。)

0 投票
2 回答
3075 浏览

delphi - How can I move data from TDataSet to TClientDataSet? I need XML representation of the data

How can I easily move data from TDataSet to TClientDataSet? I need XML representation of the data in TClientDataSet.XMLData property.

0 投票
0 回答
808 浏览

delphi - TDataset 是否调用 OnFilterRecord?

Delphi 的 TDataset.OnFilterRecord 和 TDataset.Filtered 的文档说明:

仅在从 DB 中获取记录或 Filtered 属性设置为 True 时发生。编写一个 OnFilterRecord 事件处理程序来为数据集中的每条记录指定它是否应该对应用程序可见。要指示一条记录通过了筛选条件,OnFilterRecord 事件处理程序必须将 Accept 参数设置为 true。要排除记录,请将 Accept 参数设置为 false。大多数 TDataSet 后代(例如 ADO 数据集)在调用 OnFilterRecord 事件处理程序之前将 Accept 初始化为 true。

如果 Filtered 属性为 true,则启用过滤。当应用程序处理过滤器时,数据集的 State 属性是 dsFilter。

它并不是说这个功能必须在 TDataset 后代中实现,所以我假设它适用于每个 TDataset 后代。我用 Marco Cantu 的TMdDirDataset进行了尝试,但它不起作用。

我假设错了吗?TDataset 是否只提供属性但不提供实现?

0 投票
2 回答
1526 浏览

delphi - 如何在不移动光标的情况下读取 TDataSet 后代的字段值

我发现能够从 TDataSet 后代读取记录值而无需移动光标对于使用数据库应用程序的人来说是一个很大的改进。

我已经在这个主题上进行了长期而艰苦的搜索,但我能找到的最接近的是在 XE7 TFDMemTable 中,您可以使用如下语句读取字段值:

在哪里

  1. fdsPeople = TFDMemTable 的实例
  2. i = 引用记录索引的整数
  3. FirstName 是一个字符串变量

是否已经有一种方法可以使用我不知道的 TDataSet 来实现这一点?如果没有,我们如何请求此功能?

0 投票
1 回答
1446 浏览

sql-server - Delphi数据库默认值错误

(SQL Server 2012、Delphi XE2、DataSet、DBGrid 和 adoquery)

我有一个包含这些列的简单表:

entering以及exiting获取默认值 0 的字段

创建新记录时的这些默认值不会出现在 Delphi 中。假设我们只有 5 个描述字段到进入夏季的字段。当录制没有问题时。正常的 şartlarda 不会出现短缺。您可以继续对其他记录进行操作。

但是你输入你刚刚输入的值添加的字段并不是什么新鲜事,而且在尝试记录的过程中会出现错误。0 似乎已在断开连接的区域打开,不再是错误。

这些默认值很少出现而不是错误。

我想知道我如何解决这个问题?

0 投票
2 回答
173 浏览

delphi - 派生的 TClient 数据集;定义一个始终运行的 OnAfterPost

我从 TClientdataset 派生并尝试定义一个“始终运行”的 AfterPost 事件。我尝试在构造函数中分配我的 AfterPost 事件,但派生组件似乎没有拾取它

我正在尝试做的事情:在新记录中,设置Finserting := True;在 post 之后,运行用户提供的 OnAfterPost 并设置FInserting := False;但是 MyAfterpost 事件甚至不会运行。我假设构造函数不是正确的地方AfterPost := MyAfterPost;吗?它应该去哪里?

0 投票
0 回答
570 浏览

mysql - Delphi - 在 MySQL 中创建太多连接的数据集

我在我的应用程序中使用 TFDDataSet 组件时遇到问题。

如果客户有新订单,我有一个功能可以多次获取。如果它返回空函数结束。

问题是每次执行_DataSet.Open;它都会在我的数据库中创建一个新连接。
因此,我有一个too many connections例外。

我检查了我的服务器属性,它是这样的:

许多线程处于睡眠状态

我已经尝试过,Connection.Close但没有任何效果。我读了这个,它解释说,即使你这样做,连接仍然存在,因为在内存中工作。还有这个人有类似的问题,但使用. 有谁知道我该如何解决这个问题?我正在使用MySQL_DataSet.Close_DataSet.Free_DataSet.Destroy
_DataSet.CloseDataSets
Query

编辑 1
正如@CraigYoung 帮助我说我的示例需要 MCVE

SM.GetXMLResumoChave方法:


在这里,它使用到在函数结束时关闭的数据库的连接。已经调试过,这里它不会在 MySQL 进程列表中留下一个打开的连接

基本上,_DataSet这里只接收一个 JSON List: _DataSet := TFDJSONDataSetsReader.GetListValueByName( _DataSetJSON, sXMLResumo );,然后打开它以访问其中的数据。

0 投票
1 回答
165 浏览

delphi - 执行 TDataSet 的 Next 方法时出现访问冲突错误

当希望将指针移至下一条记录时,会显示一条错误消息,内容为:

模块“main_p.exe”中地址 004070E2 的访问冲突。写入地址 00000000

有什么办法解决这个问题吗?