Инкрементный поиск

Вопросы использования сторонних (не входящих в состав FPC и Lazarus) утилит и библиотек.

Модератор: Модераторы

Аватара пользователя
VAshot
постоялец
Сообщения: 128
Зарегистрирован: 01.11.2007 11:31:21
Откуда: Пермь

Инкрементный поиск

Сообщение VAshot »

Не подскажите, как более правильно реализовать инкрементный поиск по справочнику (2 Alexs: Будеn ли он в RxDBLookUpCombo ?):

предположительно, DBGrid+Edit, при вводе символа в поле Edit должен происходить полный цикл
закрыть датасет+
изменить запрос (например + '.... like ....')+
открыть датасет
?

Или это более грамотно выполняется?
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

если я посажу дерево, для того чтоб собрать яблоки мне его водой поливать или не парится и собирать с него виноград ? =)


А сервер то какой может там и like то нет в принципе =)


если данных не много, то лучше локально на клиенте с помощью алексдатасета или его грида.
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

VAshot
Он там есть, только из-за приколов lcl пока по целочисленным полям - в компоненту не доходят события о нажатии не цифровых клавиш :cry:
Аватара пользователя
VAshot
постоялец
Сообщения: 128
Зарегистрирован: 01.11.2007 11:31:21
Откуда: Пермь

Сообщение VAshot »

2 alexs
А он должен не только по совпадению всего числа (Integer) (со строкой (String) из чисел всё нормально) менять фокус или инкриментно (если есть такой термин)? И то, что не отображается вводимый текст в поле ввода - это тоже глюк или так должно быть?

Attid
Упс... lazarus 0.9.25, firebird 2, RxDB, "alexsDataSet".
(like как пример был)

лучше локально

Это про это:
C:=TRxColumn(RxDBGridL.Columns[i]);
C.Filter.ValueList.Add.........

А как с условием или маской фильтр тут поставить?
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

нет примерно так :

Код: Выделить всё

procedure TfmCardsManeger.btFilterClick(Sender: TObject);
begin
  dsCM.Filtered := False;
  dsCM.Filtered := True;
end;


procedure TfmCardsManeger.dsCMFilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
var id, fid : integer;
begin
  Accept := ((Length(Trim(edFName.Text))=0) or (pos(UpperCase(edFName.Text),UpperCase(DataSet.FieldByName('fname').AsString))>0))
        and ((Length(Trim(edLName.Text))=0) or (pos(UpperCase(edLName.Text),UpperCase(DataSet.FieldByName('lname').AsString))>0))
        and ((Length(Trim(edAddress.Text))=0) or (pos(UpperCase(edAddress.Text),UpperCase(DataSet.FieldByName('adress').AsString))>0))
        and ((not cbBD.Checked) or (DataSet.FieldByName('birthday').AsDateTime = edBD.Date))
        and ((Length(Trim(edCode.Text))=0) or (pos(UpperCase(edCode.Text),UpperCase(DataSet.FieldByName('code').AsString))>0))
        and ((Length(Trim(edNum.Text))=0) or (UpperCase(edNum.Text)=UpperCase(DataSet.FieldByName('cardno').AsString)));
end;
Аватара пользователя
VAshot
постоялец
Сообщения: 128
Зарегистрирован: 01.11.2007 11:31:21
Откуда: Пермь

Сообщение VAshot »

Спасибо, вот только не понял, почему при несоответствии ни одной записи условию, одна "левая для условия" запись всё же отображается?
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

у меня все ок. если тестовый пример на БД employer сделаешь то можно обсудить.
Аватара пользователя
VAshot
постоялец
Сообщения: 128
Зарегистрирован: 01.11.2007 11:31:21
Откуда: Пермь

Сообщение VAshot »

Мдя... оказалось глюк RxDBGrid.
Может и не глюк, но с DBGrid такого нет.

Может какое свойство виновато?
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

RxDBGrid

в нем тоже фильтр есть, без alexsDataSet.
Аватара пользователя
VAshot
постоялец
Сообщения: 128
Зарегистрирован: 01.11.2007 11:31:21
Откуда: Пермь

Сообщение VAshot »

Attid писал(а):
RxDBGrid

в нем тоже фильтр есть, без alexsDataSet.


не понял.
как сделать фильтр с выпадающими значениями на основе данных (RxDBGrid+alexsDataSet) знаю.
А вот как сделать инкриментный поиск в RxDBGrid, без глюка с оставшейся записью не совсем понял, вернее совсем не понял, грид же он только отображает в данном случае.
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

VAshot
я им не пользуюсь, но должен уметь ищи подобные свойства.
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

VAshot
Глюк есть, а вот кто виноват - RxDBGrid или FBDataSet ещё не понял
буду копать
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

alexs
а мне кажется или в сортировка регистрозависима ? это лечется ?
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Attid писал(а): регистрозависима

в чём именно? если ты о FBDataSet - то проблема с функцией UpperCase - в линухе она на русские символы не работает (как мне кажется)
Аватара пользователя
VAshot
постоялец
Сообщения: 128
Зарегистрирован: 01.11.2007 11:31:21
Откуда: Пермь

Сообщение VAshot »

alexs писал(а):VAshot
Глюк есть, а вот кто виноват - RxDBGrid или FBDataSet ещё не понял
буду копать

Раз глюк, значит пока не будем переходить на DBGrid.

alexs
а мне кажется или в сортировка регистрозависима ? это лечется ?

Да и в винде UpperCase кирилицу не переводит.
Тупо поменял на AnsiUpperCase - работает, но как будет с не 1251 даже не подозреваю.
Ответить