Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Почему метод Locate объекта ADOStoredProc1: TADOStoredProc дает неправильные результаты / 13 сообщений из 13, страница 1 из 1
27.05.2019, 15:50
    #39818853
m830
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему метод Locate объекта ADOStoredProc1: TADOStoredProc дает неправильные результаты
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
type
  TForm2 = class(TForm)
    ADOConnection1: TADOConnection;
    ADOStoredProc1: TADOStoredProc;
    ADOStoredProc1Cat: TStringField;
    ...
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    BitBtn2: TBitBtn;
    ComboBox1: TComboBox;
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.BitBtn2Click(Sender: TObject);
begin
  ADOStoredProc1.Locate(FldName, ComboBox1.Text, [loCaseInsensitive,loPartialKey]);  
end;

// Поле FldName - не индексировано



Вместо первой записи, удовлетворяющей условию значение FldName соответствует ComboBox1.Text при [loCaseInsensitive,loPartialKey], указатель в Grid устанавливается на другой записи, которая может оказаться от первой до последней, в зависимости от значений FldName и ComboBox1.Text. И это только для первой колонки Grid , к которому привязано выходное значение процедуры c именем Cat (FldName).

Что это было?

Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
...
Рейтинг: 0 / 0
27.05.2019, 16:51
    #39818892
m830
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему метод Locate объекта ADOStoredProc1: TADOStoredProc дает неправильные результаты
m830,
Нет, в других полях такая проблема также возникает
...
Рейтинг: 0 / 0
28.05.2019, 08:16
    #39819082
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему метод Locate объекта ADOStoredProc1: TADOStoredProc дает неправильные результаты
m830,

loPartialKey - запись будет удовлетворять условию, если ее часть содержит искомый текст. То есть, если мы ищем "ст", то удовлетворять условию будут "строка", "станция", "стажер" и т.п.
А в вашем случае (с loCaseInsensitive) и "ст" будет удовлетворять и "Станция".
...
Рейтинг: 0 / 0
28.05.2019, 11:32
    #39819162
m830
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему метод Locate объекта ADOStoredProc1: TADOStoredProc дает неправильные результаты
goldmi45,
так почему на первую удовлетворяющую не становится, а становится на другую, но тоже удовлетворяющую
...
Рейтинг: 0 / 0
28.05.2019, 14:42
    #39819335
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему метод Locate объекта ADOStoredProc1: TADOStoredProc дает неправильные результаты
А если так
Код: pascal
1.
2.
3.
4.
5.
procedure TForm2.BitBtn2Click(Sender: TObject);
begin
  ADOStoredProc1.First;
  ADOStoredProc1.Locate(FldName, ComboBox1.Text, [loCaseInsensitive,loPartialKey]);  
end;
...
Рейтинг: 0 / 0
28.05.2019, 14:49
    #39819342
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему метод Locate объекта ADOStoredProc1: TADOStoredProc дает неправильные результаты
m830goldmi45,
так почему на первую удовлетворяющую не становится, а становится на другую, но тоже удовлетворяющуюпорядок сортироки?
...
Рейтинг: 0 / 0
28.05.2019, 15:26
    #39819385
m830
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему метод Locate объекта ADOStoredProc1: TADOStoredProc дает неправильные результаты
_Vasilisk_,

Grid в начале итак указывает на первую запись
Если в функции Locate с параметром loPartialKey задать не полный ключ, вот тут она может поставить указатель на какую-то удовлетворяющую условию запись, не обязательно первую. Если задать полный ключ, то указатель всегда становится на первую.
...
Рейтинг: 0 / 0
28.05.2019, 21:45
    #39819512
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему метод Locate объекта ADOStoredProc1: TADOStoredProc дает неправильные результаты
m830,

А если просто тупо выполнить процедурный селект? ( можно посмоьреть в профайлере) и найти ту самую запись, "а становится на другую, но тоже удовлетворяющую" которую выдает дельфи-компонент?
...
Рейтинг: 0 / 0
29.05.2019, 09:12
    #39819620
m830
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему метод Locate объекта ADOStoredProc1: TADOStoredProc дает неправильные результаты
Gator,

экспериментально установлено, что метод Locate при использовании части ключа перед тем как найти запись, удовлетворяющую условию, производит сортировку по полю, в котором ищет. И устанавливает указатель на первую удовлетворяющую условию запись по отсортированному полю.

И с этим надо научиться бороться
...
Рейтинг: 0 / 0
29.05.2019, 11:54
    #39819725
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему метод Locate объекта ADOStoredProc1: TADOStoredProc дает неправильные результаты
m830Gator,

экспериментально установлено, что метод Locate при использовании части ключа перед тем как найти запись, удовлетворяющую условию, производит сортировку по полю, в котором ищет. И устанавливает указатель на первую удовлетворяющую условию запись по отсортированному полю.

И с этим надо научиться бороться

Синтетический ключ и сортировка по нему?..
...
Рейтинг: 0 / 0
29.05.2019, 14:11
    #39819834
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему метод Locate объекта ADOStoredProc1: TADOStoredProc дает неправильные результаты
m830,

курсор какой?
...
Рейтинг: 0 / 0
30.05.2019, 14:46
    #39820340
m830
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему метод Locate объекта ADOStoredProc1: TADOStoredProc дает неправильные результаты
Gator,

ADOStoredProc
...
Рейтинг: 0 / 0
30.05.2019, 16:58
    #39820421
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему метод Locate объекта ADOStoredProc1: TADOStoredProc дает неправильные результаты
m830, про курсор рассажи
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Почему метод Locate объекта ADOStoredProc1: TADOStoredProc дает неправильные результаты / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]