Найдите в Delphi XE2 исключение TADO с одинарной кавычкой в ​​поисковом значении - PullRequest
3 голосов
/ 16 ноября 2011

Возникли проблемы с Delphi XE2 (update2) с использованием MS SQL 2008 R2 (sp 2) или с MS SQL 2005 (sp4).
form1.ado_m через набор данных TADO без проверки параметров, используя родной 64 sql

var
  okd:boolean;
  dd:ansistring;

фрагмент кода:

okd:=form1.ado_m.Locate('abcrow',dd,[loCaseInsensitive]); 

Если значение dd оканчивается одинарной кавычкой (в отладчике оно преобразуется в ''), оно выдает исключение:

Класс исключения EOleException с сообщением «Аргументы имеют неправильный тип, находятся вне допустимого диапазона или конфликтуют друг с другом».

Что странно для меня, так это то, что символ одинарной кавычки - это середина var dd, он работает нормально. Обход

1 Ответ

2 голосов
/ 16 ноября 2011

Проблема вызвана числовым знаком (#) И в кавычках вместе в поисковом значении.

Найдите использование ADO find method: значение в Criteria может быть строкой, числом с плавающей точкой или датой.Строковые значения разделяются одинарными кавычками или "#" (знак числа) отметками (например, "state = 'WA'" или "state = #WA #").

Попробуйте заменить знак числа ИЛИ на кавычки, вставив записи.

Другой вариант - использовать OnFilterRecord и фильтрованное свойство:

  ...
  FSearchValue := 'A1020778014#;]_69BO''';  // private field in TForm1
  ado_m.Filtered := true;
  try
    okd := not ado_m.IsEmpty;
  finally
    ado_m.Filtered := false;
  end;
  ...

procedure TForm1.ado_mFilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin
  Accept := SameText(DataSet.FieldByName('abcrow').AsString, FSearchValue);
end;
...