Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DBLookupComboBox / 25 сообщений из 32, страница 1 из 2
12.07.2017, 09:20:04
    #39487154
maxseo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
Добрый день!

В DBLookupComboBox отображается список компаний. Если название компании - это одно слово - например: Пепси - то оно корректно отображается потом и в лайбле, и в едит и в фильтре. Но если слово состоит из двух слов - например: Пепси Пупси - то выдает ошибку - "Arguments are of wrong type, are out of acceptable range, or are in conflict with one another".

Просьба помочь, кто знает как решить данну проблему. Вариант с "дефисом" или не слитно - не подходит.

Код:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
procedure TForm1.DBLookupComboBox16Click(Sender: TObject);
begin
  if Form1.DBLookupComboBox16.KeyValue = '' then
   begin
      Form1.ADOModelCur.Filtered := FALSE;
    end
  else
    begin
     Form1.ADOModelCur.Filter := 'Client like %'+Form1.DBLookupComboBox16.KeyValue+'%';
     Form1.ADOModelCur.Filtered := TRUE;
     Form1.Label27.Caption := Form1.ADOModelCur.FieldValues['Client']; ------------ просто для вывода 
   end;
end;


Спасибо!
...
Рейтинг: 0 / 0
12.07.2017, 09:34:17
    #39487172
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
maxseo, потому что нужно использовать параметры.
На худой конец брать фразы в кавычки.
...
Рейтинг: 0 / 0
12.07.2017, 09:51:15
    #39487199
maxseo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
wadman,

QuotedStr - корректно работает только с одним словом в название компании
...
Рейтинг: 0 / 0
12.07.2017, 09:55:53
    #39487204
maxseo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
В БД название компание записывается правильно, и потом отображается в самом DBLookupComboBox - тоже корректно. А вот при фильтрации при сраавнение то ли из БД вытянивается только первое слово, то ли DBLookupComboBox откидывает лишнее, когда обнаруживает пробел.
...
Рейтинг: 0 / 0
12.07.2017, 10:11:29
    #39487214
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
maxseoQuotedStr - корректно работает только с одним словом в название компании
Это все от нехватки знаний... Если лень использовать параметры, то нужно привесит запрос к виду:
Код: sql
1.
like '%some words%'
...
Рейтинг: 0 / 0
12.07.2017, 10:18:58
    #39487222
Жышы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
wadmanmaxseoQuotedStr - корректно работает только с одним словом в название компании
Это все от нехватки знаний... Если лень использовать параметры, то нужно привесит запрос к виду:
Код: sql
1.
like '%some words%'


Ты погоди. Вот клиент утверждает, что:
maxseowadman,
QuotedStr - корректно работает только с одним словом в название компании

Возможно, "ашыпка" связана с тем, что в базе лежит "ПепсиПупси", а в образец для поиска вводится "Пепси Пупси" (с пробелом).

Возможно, клиент считает, что поиск должен осуществляться как-то по совокупности слов (вхождение "Пуспси" или|и "Пепси").
...
Товарищ клиент, отвечайте.
...
Рейтинг: 0 / 0
12.07.2017, 10:28:59
    #39487240
maxseo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
wadman,

Знаний действительно немного, всегда использовал в фильтре такой запрос:
Form1.ADOSum.Filter := 'Client like %'+Form1.DBLookupComboBox16.KeyValue+'% AND
Model like %'+Form1.DBLookupComboBox17.KeyValue+'%';
Form1.ADOSum.Filtered := TRUE;

Данный фильр работал отлично, но появились название компаний с двух и более слов и все - ошибка.
Параметры не использовал ибо не знаю как правильно, чисто интуитивно методом тык и проб.
...
Рейтинг: 0 / 0
12.07.2017, 10:30:29
    #39487241
maxseo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
Жышы,

Нет, в базе введены название клиентов правильно - т.е. с пробелом. Т.к это Form1.DBLookupComboBox16.KeyValue - и вытягивает данные с базы
...
Рейтинг: 0 / 0
12.07.2017, 10:31:11
    #39487243
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
Печалька тогда... Вот тоже мытарства начинающего в этом русле http://www.delphisources.ru/forum/showthread.php?t=22201
...
Рейтинг: 0 / 0
12.07.2017, 10:34:13
    #39487249
Жышы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
maxseo,

Покажи данные из базы и данные из поля фильтра.
А еще покажи, как ты QuotedStr использовал.

~~~~~~~

Давай.
...
Рейтинг: 0 / 0
12.07.2017, 10:41:21
    #39487256
maxseo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
Жышы,
...
Рейтинг: 0 / 0
12.07.2017, 10:43:52
    #39487258
maxseo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
Жышы,

Form1.Label27.Caption := QuotedStr(Form1.DBLookupComboBox16.KeyValue);

прописал в коде, только дя того чтобы наглядно видеть
...
Рейтинг: 0 / 0
12.07.2017, 10:45:33
    #39487263
Жышы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
maxseo,

ради Аллаха, перечти, что я тебя попросил показать: 20635911
...
Рейтинг: 0 / 0
12.07.2017, 10:51:39
    #39487275
maxseo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
Жышы,

извините, спешка
...
Рейтинг: 0 / 0
12.07.2017, 10:56:59
    #39487283
Жышы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
maxseo,

остался последний шаг: покажи р е альн ы й код с QuotedStr.
~~~~~~~~~~~
Ну!
...
Рейтинг: 0 / 0
12.07.2017, 11:00:55
    #39487289
maxseo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
Жышы,

весь реальный код был представлен выше:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
procedure TForm1.DBLookupComboBox16Click(Sender: TObject);
begin
if Form1.DBLookupComboBox16.KeyValue = '' then
begin
Form1.ADOModelCur.Filtered := FALSE;
end
else
begin
Form1.ADOModelCur.Filter := 'Client like %'+Form1.DBLookupComboBox16.KeyValue+'%';
Form1.ADOModelCur.Filtered := TRUE;
Form1.Label27.Caption := Form1.ADOModelCur.FieldValues['Client']; ------------ просто для вывода 
end;
end;



Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
...
Рейтинг: 0 / 0
12.07.2017, 11:02:29
    #39487290
maxseo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
Жышы,

возможно по ссылке wadman - как вариант сделать счетчик на длину procedure DBLookupComboBox16.KeyValue
...
Рейтинг: 0 / 0
12.07.2017, 11:03:49
    #39487292
Жышы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
maxseoЖышы,

весь реальный код был представлен выше:

procedure TForm1.DBLookupComboBox16Click(Sender: TObject);
begin
if Form1.DBLookupComboBox16.KeyValue = '' then
begin
Form1.ADOModelCur.Filtered := FALSE;
end
else
begin
Form1.ADOModelCur.Filter := 'Client like %'+Form1.DBLookupComboBox16.KeyValue+'%';
Form1.ADOModelCur.Filtered := TRUE;
Form1.Label27.Caption := Form1.ADOModelCur.FieldValues['Client']; ------------ просто для вывода
end;
end;

И где же тут QuotedStr?
...
Рейтинг: 0 / 0
12.07.2017, 11:07:27
    #39487295
Жышы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
maxseo,

ты потомственный партизан, наверное? Ни в чем не сознаешься, запутываешь следователя, отстреливаешься до последнего патрона...
...
Рейтинг: 0 / 0
12.07.2017, 11:43:34
    #39487333
maxseo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
Жышы, извините

if Form1.DBLookupComboBox16.KeyValue = '' then
begin
Form1.ADOModelCur.Filtered := FALSE;
end
else
begin

Form1.ADOModelCur.Filter := 'Client like %'+Form1.DBLookupComboBox16.KeyValue+'%';
Form1.ADOModelCur.Filtered := TRUE;
Form1.Label27.Caption := QuotedStr(Form1.DBLookupComboBox16.KeyValue);
end;
...
Рейтинг: 0 / 0
12.07.2017, 11:48:22
    #39487338
maxseo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
Жышы,

просто не внимательный я как-то :)
...
Рейтинг: 0 / 0
12.07.2017, 11:49:38
    #39487341
Жышы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
[quot maxseo]Жышы, извините

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  if Form1.DBLookupComboBox16.KeyValue = '' then
   begin
      Form1.ADOModelCur.Filtered := FALSE;
    end
  else
    begin

      Form1.ADOModelCur.Filter := 'Client like %'+Form1.DBLookupComboBox16.KeyValue+'%';
      Form1.ADOModelCur.Filtered := TRUE;
      Form1.Label27.Caption := QuotedStr(Form1.DBLookupComboBox16.KeyValue); 
    end;[

/quot]

И в чем смысл подсвеченной строчки? Значение из Form1.Label27.Caption потом волшебны образом попадает в Form1.ADOModelCur.Filter?
...
Рейтинг: 0 / 0
12.07.2017, 12:06:00
    #39487365
maxseo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
Жышы,

если закомментировать фильтрацию:

if Form1.DBLookupComboBox16.KeyValue = '' then
begin
Form1.ADOModelCurrent.Filtered := FALSE;
end
else
begin
// Form1.ADOModelCurrent.Filter := 'Client like %'+Form1.DBLookupComboBox16.KeyValue+'%';
// Form1.ADOModelCurrent.Filtered := TRUE;

Form1.Label27.Caption := Form1.DBLookupComboBox16.KeyValue;
end;

то Form1.DBLookupComboBox16.KeyValue в лайбле отображается корректно, наверное как вывод программа работает со значением переменной в Form1.DBLookupComboBox16.KeyValue - корректно. Я так поманию, БД берет для проверки за основу только первое слово из названия клиента и из-за это идет не соответствие.

А если сделать запрос через query:
Form1.ADOClientOrder.SQL.Clear;
Form1.ADOClientOrder.SQL.Add('SELECT Client FROM db WHERE Client = " '+Form1.DBLookupComboBox16.KeyValue+' " ');
Form1.ADOClientOrder.ExecSQL;

как в этом запросе вывести на экран название соответствующего клиента:
Form1.Label27.Caption := Form1.ADOClientOrder.FieldValue['Client']

так правильно?
...
Рейтинг: 0 / 0
12.07.2017, 12:16:27
    #39487379
Жышы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
maxseo,

ты смерти моей желаешь?

Еще раз, медленно.

Покажи код, в котором значение из QuotedStr() попадает в фильтр.
...
Рейтинг: 0 / 0
12.07.2017, 12:19:34
    #39487383
Жышы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBLookupComboBox
А ладно, вот тебе решение:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure TForm1.DBLookupComboBox16Click(Sender: TObject);
begin
  if Form1.DBLookupComboBox16.KeyValue = '' then
   begin
      Form1.ADOModelCur.Filtered := FALSE;
    end
  else
    begin
     Form1.ADOModelCur.Filter := 'Client like '+QuotedStr('%'+Form1.DBLookupComboBox16.KeyValue+'%');
     Form1.ADOModelCur.Filtered := TRUE;
   end;
end;


Так будет (скорее всего) работать, но так делать - неправильно. По многим причинам. Например, появится у тебя в фильтре кавычка - все и сломается.

Как правильно - тебе уже говорили:
wadmanmaxseo, потому что нужно использовать параметры.
...
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DBLookupComboBox / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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