powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Почему метод Locate объекта ADOStoredProc1: TADOStoredProc дает неправильные результаты
13 сообщений из 13, страница 1 из 1
Почему метод Locate объекта ADOStoredProc1: TADOStoredProc дает неправильные результаты
    #39818853
m830
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
Почему метод Locate объекта ADOStoredProc1: TADOStoredProc дает неправильные результаты
    #39818892
m830
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m830,
Нет, в других полях такая проблема также возникает
...
Рейтинг: 0 / 0
Почему метод Locate объекта ADOStoredProc1: TADOStoredProc дает неправильные результаты
    #39819082
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m830,

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

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

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

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

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

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

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

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

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

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


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