【问题标题】:unknown isc error 0 on Delphi XE TClientDataSet.NextDelphi XE TClientDataSet.Next 上的未知 isc 错误 0
【发布时间】:2015-07-30 02:18:58
【问题描述】:

我有一个连接到 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

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

【问题讨论】:

    标签: delphi tclientdataset


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-10-02
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 2014-11-24
      • 2019-05-19
      • 1970-01-01
      相关资源
      最近更新 更多