我有以下问题:
我在DELPHI XE2中编程并使用TMS使用TDBAdvGrid。网格从SQL SERVER填充。我想一次加载+1000条记录时出现以下错误:
$ 75CCC42D的第一次机会异常。带有消息的异常类EOleException'发生了未知错误'。
当我点击' Break'时,指针停在以下代码中:
function TDBAdvGrid.GetRecordCount: integer;
function RowsInDataset: Integer;
var
cb: TBookMark;
iseof, isbof: Boolean;
begin
Result := -1;
if not CheckDataSet then
Exit;
FDataLink.DataSet.DisableControls;
iseof := FDataLink.DataSet.Eof;
isbof := FDataLink.DataSet.Bof;
if isbof and iseof then
begin
Result := 0;
//FMaxRows := 0;
end
else
with FDataLink.DataSet do
begin
cb := GetBookMark;
First;
if (csDesigning in ComponentState) then
Result := MoveBy(100)
else
Result := MoveBy($7FFFFFFF) + 1; // <= programs breaks here!
GotoBookMark(cb);
FreeBookMark(cb);
//FMaxRows := Result;
end;
if iseof then
FDataLink.DataSet.Next;
if isbof then
FDataLink.DataSet.Prior;
if FDataLink.DataSet.State = dsInsert then
Result := Result + 1;
FEmptyDataSet := Result = 0;
FDataLink.DataSet.EnableControls;
end;
//var
// OldRecNo: integer;
begin
Result := 0;
if Assigned(FDataLink) then
if Assigned(FDataLink.DataSet) then
if FDataLink.DataSet.Active then
begin
FDoNotUpdateMe := true;
if Assigned(FOnGetRecordCount) then
begin
FDataLink.DataSet.DisableControls;
FOnGetRecordCount(self, Result);
FEmptyDataSet := Result = 0;
if (FloatingFooter.Visible) and PageMode and (FloatingFooter.FooterStyle = fsFixedLastRow) then
begin
if (Result = 0) then
Inc(Result, 2)
else
Inc(Result);
end;
FDataLink.DataSet.EnableControls;
end
else
begin
Result := RowsInDataSet;
if (FloatingFooter.Visible) and PageMode and (FloatingFooter.FooterStyle = fsFixedLastRow) then
begin
if (Result = 0) then
Inc(Result, 2)
else
Inc(Result);
end;
end;
{ OldRecNo:= FDataLink.DataSet.RecNo;
FDataLink.dataset.First;
Result := FDataLink.dataset.MoveBy($FFFF);
FDataLink.DataSet.RecNo:= OldRecNo; }
FDoNotUpdateMe := false;
end;
end;
//------------------------------------------------------------------------------
当我点击“继续”时,我会遇到此错误的无限循环。只有在我调试模式下,当在Delphi外部启动exe并转到带有网格的表单时,才会出现此错误,根本没有问题。 它也只发生在我的电脑上,我的同事们没有这个问题。
更新TMS没有帮助。
我已经邮寄给TMS了,但他们说这是德尔福本身的一个问题,他们无法帮助我。他们是对的吗?
目前我启动exe,加载网格,将Delphi附加到进程并调试我想要的那段代码。不是很方便,但仍然没有任何好处。
我该怎么办?
我们希望在不久的将来升级到XE7甚至10西雅图,但希望很快就能解决这个问题
编辑 - 一些额外信息
我们最近向DELPHI 10 SEATTLE迈出了一步,但问题仍然存在。我们还更新了所有TMS产品。
我搜索并发现我当天发回的邮件给TMS(无法找到他们的第一封邮件)。 对话就是这样的:
adoquery.moveby($FFFFFFF)
我真的不知道如何解决这个问题......我仍然不明白为什么这只会在调试AND recordcount&gt;时发生。 1000.它可能是分页的东西吗?
@ kobik:
procedure TfrmGrondstoffen.MainDBGridGetRecordCount(Sender: TObject;
var Count: Integer);
begin
ShowMessage(inttostr(MainDBGrid.DataSource.DataSet.RecordCount)); // gives the correct number
ShowMessage(inttostr(qryGrondstoffen.RecordCount)); //gives the correct number
ShowMessage(inttostr(Count)); // gives 0 all the time
end;
还有点奇怪,我收到了12个留言箱,而不是3个