Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 23 апр 2024, 06:36

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
СообщениеДобавлено: 05 апр 2021, 10:10 
Не в сети

Зарегистрирован: 23 май 2013, 11:39
Сообщений: 52
Добрый день.

Есть такая проблема (сложно будет объяснить, но попробую): при открытии выпадающего списка в DBLookupComboboxEh, заданного в ListSource, и наборе текста происходит поиск и переход на соответствующую запись. Все работает, кроме случая, когда есть несколько одинаковых записей, содержащих пробел.

Например, есть 5 записей в списке:
Стул
Стол
Стол 2
Стол 3
Шкаф

Начинаю набирать: с (переходим на запись 1), т (запись 1), о (запись 2), л (запись 2), потом нажимаю пробел - и тут должен перейти на запись 3 ("стол 2"), но этого не происходит - остаюсь на прежней ("стол"), а пробел в поле не добавляется, просто игнорируется. Если пробелов нет, то набор текста и переход работает. Проблема только с пробелом и только когда уже найдено полное соответствие (в нашем случае - запись 2 "стол").

Пробовал сделать тестовый пример для связки TMemTableEh - TDataSource - TDBLookupComboboxEh.ListSource - все прекрасно работает.
Но в моем случае я использую связку с БД Оракл через сторонний компонент DOA: TOracleDataSet - TDataSource - TDBLookupComboboxEh.ListSource. И в таком варианте возникает описанная проблема.

Я бы даже и не описывал ее тут, если бы не такой момент: проблем нет, если использовать стандартный компонент TDBLookupComboBox. Не работает только в TDBLookupComboboxEh.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 апр 2021, 14:34 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1549
Добрый день.

Попробуйте проверить как отрабатывает функция TCustomDBLookupComboboxEh.LocateStr

Код:
function TCustomDBLookupComboboxEh.LocateStr(const Str: String; const PartialKey: Boolean): Boolean;
...
    Result := FListLink.DataSet.Locate(FListField.FieldName, Str, Options);
    if not Result and CaseInsensitiveTextSearch then
      Result := FListLink.DataSet.Locate(FListField.FieldName, Str,
        Options + [loCaseInsensitive]);
    if Result then
    begin
      FTextBeenChanged := False;
      CurOnChangeEvent := OnChange;
      OnChange := HookOnChangeEvent;
      SetKeyValue(FListLink.DataSet.FieldValues[FKeyFieldName]);
...



Result := FListLink.DataSet.Locate(FListField.FieldName, Str, Options);
должен перейти на правильную запись с учетом пробела

Результат перехода на запись будет виден в строек
SetKeyValue(FListLink.DataSet.FieldValues[FKeyFieldName]);

FListLink.DataSet.FieldValues[FKeyFieldName] должен вернуть код записи 'Стол 2' для Str = 'Стол '; // С пробелом.

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB