gpt4 book ai didi

delphi - Delphi XE TClientDataSet.Next 上的未知 isc 错误 0

转载 作者:行者123 更新时间:2023-12-05 07:55:11 24 4
gpt4 key购买 nike

我有一个连接到 Firebird 数据库的 DBXpress 数据结构。我在 ClientDataSet、DataSetProvider 和 SQLQuery 组合上添加数据分页。它运行良好,但最近在多次调用 Next 后开始引发 unknown isc error 0 exception

分页代码为:

if not ClientDataSet.Active then
ClientDataSet.Open;
RecNo := ClientDataSet.RecNo; // Keep track of selected record
ClientDataSet.DisableControls;
LastRecNo := GetLastRecNo;
if LastRecNo > -1 then
begin
ClientDataSet.RecNo := LastRecNo;
ClientDataSet.Next;
while (not ClientDataSet.Eof) and (Result < DATA_PAGE_SIZE) do
begin
...
ClientDataSet.Next; // The exception is raised here
Inc(Result);
end;
end;
ClientDataSet.RecNo := RecNo;
ClientDataSet.EnableControls;

间歇性地引发异常,这可能意味着连接问题,但数据库存储在本地,连接字符串类似于 localhost:C:\Path\Base.FDB

编辑:当用户向下滚动鼠标、向下移动滚动条或导航到列表末尾旁边的项目时,将触发此代码。在最近的测试中,我发现只有在代码正常执行时才会引发异常。如果有断点,或者如果我在那里放置一些 sleep ,它会正常执行。我也确定我没有任何其他线程更改 ClientDataSet。

最佳答案

我发现我正在使用 FetchOnDemand = TruePacketRecords = 400。这可能是 TClientDataset 本身或按需获取记录的一些低级 Delphi 实现的并发问题。

如果设置 FetchOnDemand = False,故障就会消失。我知道如果您拥有庞大的数据集,这不是解决方案,但我的情况并非如此。我更喜欢首先简单地获取记录,然后对内存中已有的记录进行分页。

关于delphi - Delphi XE TClientDataSet.Next 上的未知 isc 错误 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30305555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com