(DELPHI_XE)Datasnap 'ERROR_CODE'. The allowed range is 0 to 4294967295'

来源:互联网 发布:礼物网络销售方案 编辑:程序博客网 时间:2024/06/11 10:23

在用ADO+TClientDataSet操作数据库时,用DataSetProvider.ApplyUpdates更新时

可能会因为某种错误而提示如下:

Project Project1.exe raised exception class EDatabaseError with message '-2147217900 is not a valid value for field 'ERROR_CODE'. The allowed range is 0 to 4294967295'.


跟踪发现错误在 Provider.pas 中

procedure TUpdateTree.InitErrorPacket(E: EUpdateError; Response: TResolverResponse);var  TrueRecNo: LongWord;begin  with ErrorDS do  begin    if Assigned(Parent) then Parent.InitErrorPacket(nil, rrSkip);    Self.Delta.UpdateCursorPos;    Self.Delta.DSCursor.GetRecordNumber(TrueRecNo);    if not Locate('ERROR_RECORDNO', Integer(TrueRecNo), []) then      Append else      Edit;    if not Assigned(E) then    begin      if Response = rrSkip then      begin        SetFields([TrueRecNo]);        Post;      end else        SetFields([TrueRecNo, 0, '', '', 0, 0]);    end else      SetFields([TrueRecNo, Ord(Response)+1, E.Message, '', 1, E.ErrorCode]);  end;end;

SetFields([TrueRecNo, Ord(Response)+1, E.Message, '', 1, E.ErrorCode]);

这一句,只需要将这一句改成


SetFields([TrueRecNo, Ord(Response)+1, E.Message, '', 1, Variant(LongWord(E.ErrorCode))]); 

即可。

因为delphi认为ErrorCode应该是LongWord,不应该出现负数,或者说SQLServer是使用int64来表示ErrorCode。





原创粉丝点击