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

delphi - Delphi - TClientDataset 线程安全吗?

我有一个在线程 1 中管理的 TClientDataset。

在另一个线程中,我有一个 TClientDataset 的克隆图像。

我会遇到线程问题吗?

编辑

克隆的图像以只读模式使用。

0 投票
3 回答
6470 浏览

delphi - TDataset 书签的有效期是多久?

我正在工作的项目中有如下代码。

就个人而言,我很少使用书签——除了重新定位我只移动光标位置的数据集(创建列表、填充字符串列表等)。如果我Refresh、更新(特别是当过滤器可以使记录不可见时)、重新获取(Close/ Open)或任何修改数据集中数据的操作,我不使用书签。我更喜欢Locate在主键上(TClientDataset当然使用 a )或重新查询修改参数。

书签的有效期到什么时候?直到一个Refresh?直到Close/Open完成重新获取数据?安全区在哪里结束?

考虑一下我TClientDatasetTSQLQuery(DbExpress)一起使用的答案。

0 投票
1 回答
3001 浏览

delphi - 有什么方法可以找出哪个 TField 使用消息“需要字段值”来提升 EDBClient。?

我有一个带有多个字段的 TClientDataSet 并且我遇到了这个异常,我确定我忘记设置一个字段值,但问题是,哪个字段?

有什么方法可以快速找出哪个字段引发了这个异常?

编辑

我解决了这个问题,我将 TClientDataSet 连接到了错误的提供者,该提供者在服务器上有一个必填字段,但在客户端没有这个字段。

但这仍然不能使我的问题无效,我浪费了很多时间来弄清楚,如果我有办法知道哪个服务器端必填字段引发了这个错误,那么很快就会意识到我的错误是什么。

编辑 2

相关质检:

#5557 - 解决为“按设计”。

#54380 - 打开

0 投票
3 回答
13274 浏览

delphi - 如何检测 ApplyUpdates 是否会插入或更新数据?

在 ClientDataSet 的 AfterPost 事件处理程序中,我需要当前记录的 ApplyUpdates 函数是否会执行更新或插入的信息。

AfterPost 事件将为新的和更新的记录执行,我不想声明一个新的 Flag 变量来指示“更新”或“插入”操作是否正在进行中。

示例代码:

ApplyUpdate 完成后,应用程序将在 AfterPost 方法中写入日志。所以这个方法是最接近动作的地方,我更喜欢一个完全可以插入到这个事件处理程序中的解决方案。

如何使用 ClientDataSet 实例 QryTest 中的信息实现 IsInserting 函数?

编辑:我将尝试此处解释的 ClientDataSet.UpdateStatus 。

0 投票
1 回答
3018 浏览

delphi - Delphi:客户端数据集:.Open 上的 EDatabaseError;设置了 ProviderName

所以我有这段代码来处理客户端在模式上发送的内容。如果他发送“getBENUds”,则服务器使用 SaveToString 方法发回该表的 DataSet。

然后,将其发送给客户端。(我正在使用Synapse)。

它说的那一行: DS_CLIENT.Open 抛出异常:

已引发异常:EDatabaseError 类。文本:'缺少数据提供者或数据包'。

如上所示,数据提供者已设置为“DS_PROV”,因此它必须是丢失的数据包。

但是 ClientDataSet 不应该从 DataSetProvider 获取数据,后者又从从数据库获取数据的 ADOQuery 获取数据?

这是就我的知识水平而言。我希望它不会太难,因为在我看来,我所做的一切都是正确的。

0 投票
1 回答
8298 浏览

delphi - Delphi: Clientdataset: EDatabaseError: Missing Data-Package using Synapse

我从客户端向服务器发送了一个字符串,他应该将其发回给我。这次它是由 ClientDataSet 创建的流。不幸的是,接收(或发送??)目前不起作用。

注意:我正在使用带有阻塞套接字的 Synapse。服务器是多线程的。

服务器:

客户端:

现在,每当我启动服务器并单击客户端上的连接按钮时,它应该将 DataSet 传输到客户端,并且 TDBGrid 应该变得活跃起来。

不幸的是,这不会发生。相反,我收到标题中所述的错误:缺少数据提供者或数据包。但是数据提供者设置为 DataSetProvider1(在对象检查器中)。

如何使客户端 TDBGrid 充满数据?

0 投票
4 回答
1939 浏览

sql-server - TClientDataSet 和大插入

在我的应用程序中,我将 TADOQuery 与 select (MSSQL) 一起使用并与 TClientDataSet 链接。我必须插入大约百万条记录和 ApplyUpdates。

那么我在 SQL Server Profiler 中看到了什么?我看到对于每个插入的行,我们有 3 个查询:插入脚本的 sp_prepare、带有一些值的 sp_execute 和 sp_unprepare。

我只想在插入之前为所有记录准备一次sql,然后再取消准备。我该怎么做?

之后添加

在查询中,我有一个用于执行存储过程的脚本:

它使用一些参数从表sTableName中选择所有字段。

从分析器插入的示例:

第1步:

第2步:

第 3 步:

适用于所有新行。

0 投票
2 回答
1260 浏览

delphi - 将数据集与 TClientdatasets 嵌套在两个以上的级别?

我想知道是否可以将数据集嵌套在数据集中,然后将此数据集嵌套在另一个数据集中。因此有 3 层嵌套。目前我只设法将一个数据集嵌套在另一个数据集中。当尝试嵌套第三级时,数据库在我第一次编译程序时成功运行并且我能够输入数据。然后,当我第二次尝试运行该程序时,EDBClient 提出了一个带有消息“数据包不匹配”的执行。

所以我想知道是否可以将 3 级数据集相互嵌套?

亲切的问候瑞安

0 投票
3 回答
1034 浏览

delphi - 为什么在设计时不显示 ClientDataSet 后代的字段?

我正在尝试编写一个从 TClientDataset 继承的组件。在设计时创建组件时,我想实例化在我的框架中使用的公共字段列表。下面的代码将在没有错误的情况下执行,并且该字段将出现在运行时而不是设计时。谁能帮我?我敢肯定它是微不足道的!

0 投票
1 回答
1512 浏览

delphi - Delphi ADOQuery result concatenation using ClientDataSet

I have written an application that allows a user to define a query, run it using a TADOQuery component, and save the report to their PC as an XML document (SaveAsFile passing in pfXML as the Format parameter) for offline viewing. This works fine.

What I now need to do is concatenate the results. What I mean by this is that I need to get at least two reports (with identical fields as they are using the same query) and join them together to make one report. For example: Say I have a query that retrieves a list of users. I run this query on "System A" and "System B" where System A and System B are two separate systems. Once I have run the query on both systems, I have two separate report files, which I can load back into a TADOQuery component and then view on screen. What I need to do though is join the reports together, so instead of having to switch between the two reports, I can see all the results on screen at the same time.

I have been told that I can do this using a TClientDataSet but I'm relatively new to database programming and have no idea where to start with this. I've checked out the articles at http://delphi.about.com/od/usedbvcl/a/tclientdataset.htm but I'm still in the dark as nothing seems to do exactly what I need it to do.

I therefore have two questions: 1. Is using a TClientDataSet the best way to take two separate result sets and concatenate them? If there is a better way to do this, what is it? 2. If using a TClientDataSet is the best way to do this, how exactly would I go about doing this? How do you transfer data from a TADOQuery into a TClientDataSet and then back again? The basic flow of the processing needs to go something like this:

Report 1 (LoadFromFile) -> TADOQuery \

Report 2 (LoadFromFile) -> TADOQuery /

All help would be appreciated on this. I really don't know where to start!