Добрый день!
Подскажите, пожалуйста, как решить проблему:
после обновления библиотеки 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
все работало корректно.
Спасибо.