delphi - 执行ADOQuery的Open方法时出现访问冲突错误

时间:2015-05-26 04:11:17

标签: sql delphi access-violation tadoquery

这是我的代码:

procedure TfrmServerMain.CmdHndler_GetOrderProdDatesCommand(ASender: TIdCommand);
begin
  if Assigned(ASender.Params) then
    with TADOQuery.Create(nil) do
    begin
      Connection := ADOConnection1;

      SQL.Clear;
      SQL.Add('SELECT *');
      SQL.Add('FROM DoneOperations');
      SQL.Add('WHERE OrderID = ' + ASender.Params[0]);
      SQL.Add('ORDER BY DoneDate');

      try
        Open; // issued line

        if RecordCount = 0 then
        begin
          ASender.Context.Connection.Socket.WriteLn(FloatToStr(MaxDateTime), TIdTextEncoding.UTF8);
          ASender.Context.Connection.Socket.WriteLn(FloatToStr(MaxDateTime), TIdTextEncoding.UTF8);
        end
        else
        begin
          First;
          ASender.Context.Connection.Socket.WriteLn(
            FloatToStr(FieldByName('DoneDate').AsDateTime));

          Last;
          ASender.Context.Connection.Socket.WriteLn(
            FloatToStr(FieldByName('DoneDate').AsDateTime));
        end;
      except
        Log(ltError, 'Exception while sending Orders start/end date');
        ASender.Context.Connection.Socket.WriteLn('error');
        ASender.Context.Connection.Socket.WriteLn('error');
      end;

      Close;
      Free;
      ASender.Context.Connection.Disconnect;
    end;
end;

一切正常,代码运行正常。但是,当应用程序执行Open;行时,有时(20%的次数)会导致访问冲突错误。

单独测试SQL语句,并且在任何条件下都可以正常运行。 f.e。:SELECT * FROM DoneOperations WHERE OrderID = 35 ORDER BY DoneDate

我测试的操作系统:Windows7,Windows Server 2008。

我无法解决这个问题,或者找不到它。谢谢你的帮助。

0 个答案:

没有答案