1

这是我的代码:

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;

一切正常,代码运行正常。但有时(20% 的时间)在应用程序执行Open;行时随机导致访问冲突错误。

SQL 语句是单独测试的,在任何情况下都可以正常工作。费:SELECT * FROM DoneOperations WHERE OrderID = 35 ORDER BY DoneDate

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

我无法处理这个,或者找到它的原因。感谢您的帮助。

4

0 回答 0