none
Обновление библиотеки msado15.dll RRS feed

  • Вопрос

  • Добрый день!

    Подскажите, пожалуйста, как решить проблему:

    после обновления библиотеки msado15.dll

    до версии 6.1.7601.23715

    приложение стало "падать" на установке фильтра recordset

    Delphi 5

    unit ADODB;

    ...

    FFilterArray: TVarArray;

    ...

    procedure TCustomADODataSet.ActivateTextFilter(const FilterText: string);
    var
      FilterArr: TVarArray;
      i: Integer;
      Accept: Boolean;
    begin
      try
        SetLength(FFilterArray, 0);
        if FilterText = '' then
          Recordset.Filter := adFilterNone
        else
          Recordset.Filter := FilterText;
        if Assigned(FOnRecordsetFilterRecord) and (Recordset.RecordCount > 0) then
        begin
          i := 0;
          FFiltering := True;
          try
            SetLength(FilterArr, Recordset.RecordCount);
            Recordset.MoveFirst;
            while not Recordset.EOF do
            begin
              Accept := True;
              FOnRecordsetFilterRecord(Self, Accept);
              if Accept then
              begin
                FilterArr[i] := Recordset.Bookmark;
                Inc(i);
              end;
              Recordset.MoveNext;
            end;
          finally
            FFiltering := False;
          end;
          if i = 0 then
            RecordSet.Filter := RecordSet.Fields[0].Name + ' = Null and ' + RecordSet.Fields[0].Name + ' <> Null'
          else if i < RecordSet.RecordCount then
          begin
            SetLength(FilterArr, i);
            SetLength(FFilterArray, i);
            for i := Low(FilterArr) to High(FilterArr) do
              FFilterArray[i] := FilterArr[i];
            RecordSet.Filter := FFilterArray; <- "
    ПАДАЕТ" ЗДЕСЬ
          end;
        end;
      except
        CursorPosChanged;
        raise;
      end;
    end;

    с ошибкой

    Access violation at address 72D25B02 in module 'msado15.dll'. Write of address 00000000.

    Интерфейс описан так

    unit ADOInt;

    ...

    // *********************************************************************//
    // Interface: Recordset15
    // Flags:     (4560) Hidden Dual NonExtensible OleAutomation Dispatchable
    // GUID:      {0000050E-0000-0010-8000-00AA006D2EA4}
    // *********************************************************************//
      Recordset15 = interface(_ADO)
        ['{0000050E-0000-0010-8000-00AA006D2EA4}']

    ...

        function Get_Filter: OleVariant; safecall;
        procedure Set_Filter(Criteria: OleVariant); safecall;

    ...

        property Filter: OleVariant read Get_Filter write Set_Filter;

    ...

    с предыдущей версией  msado15.dll

    6.1.7601.17514

    все работало корректно.

    Спасибо.

Ответы