Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQL -> ADODataset.Filter [D7]


fog ©   (2008-07-13 20:30:00) 

Кризис. Никак не получается перегнать фильтр под Дельфи.
SQL:
WHERE (Table1.Field1 LIKE '*что-то*')AND(Table1.Field1 LIKE '*где-то*') и т.д. В Access-е работает.
Field1 - Memo.

ADODataset.Filter := 'Field1 LIKE '*что-то*'' - работает.
ADODataset.Filter := '(Field1 LIKE '*что-то*')AND(Field1 LIKE '*где-то*')' -нет (ошибка).

Help, pls.


Нат   (2008-07-25 05:34:00) [1]

Странно, многие утверждают, что процент и звездочка эквивалентны.
У меня сделан поиск на свойстве фильтр, где подставляется "нечто*" и работает.

А в посте №4 автор приводит код с ошибкой, т.к искомая строка не заключена в кавычки (" ") или quoted()


fog   (2008-07-14 21:01:00) [2]

Опять грабли - на '=' и '/'.
Пример: '%ПДК = 1 мг/кг%'. Приходиться по частям - '%ПДК%', потом '%1 мг%'


fog   (2008-07-14 20:54:00) [3]


> Palladin ©   (14.07.08 20:08) [15]

OK.
Но на какой SQL ориентироваться (89 или 92) по использованию %,*, ?, _, # и ESCAPE?


Palladin   (2008-07-14 20:08:00) [4]

прими как должное... не все, что работает в access (либо другом прикладном ПО к СУБД), так же работает и через провайдера...


fog   (2008-07-14 19:58:00) [5]


> sniknik ©   (13.07.08 22:44) [3]
> * -> %


> Palladin ©   (14.07.08 19:47) [13]
> перевожу, символы "звездочка" заменить символами "процент"

Спасибо, заработало. Но остался вопрос - почему wildcard работает в Access-e и частично работает в дельфи [8] и наоборот - заменил * на % в Access-e и не работает.


Palladin   (2008-07-14 19:47:00) [6]

перевожу, символы "звездочка" заменить символами "процент"


sniknik   (2008-07-14 19:39:00) [7]

[3]


fog   (2008-07-14 19:12:00) [8]

Попробовал произвести фильтрацию через Commandtext

ADODataSet1.CommandText := 'SELECT * FROM Table1 WHERE Field1 LIKE *что-то*';

Возвращает 0 (RecordCount).
Аналогично ситуация с ADOQuery.
SQL = 'SELECT * FROM Table1 WHERE (Table1.Field1 LIKE "*что-то*");'
SQL-запрос взял из Access-a (там работает)

Почему не берет ADO?


fog   (2008-07-14 00:19:00) [9]


> Anatoly Podgoretsky ©   (13.07.08 23:57) [9]
> Ерунда получается, а не фильтр

А вот и нет. Изначально в БД - 87 записей, после фильтрации - 12.
Проверял через Label1.Caption := IntToStr(ADODataSet1.RecordCount);

От того, что  заменить "Field1" на "Abstract", а "*что-то*" на "*дитиокарбамат*" - ничего не меняется.
БД- тестовая. 2 поля - AutoIncrement и Memo.

Вопрос остается - как перевести SQL "WHERE..." [0] в текстовую строку для ADODataSet.Filter.


Anatoly Podgoretsky   (2008-07-13 23:57:00) [10]

Ерунда получается, а не фильтр


fog   (2008-07-13 23:52:00) [11]


> sniknik ©   (13.07.08 23:02) [5]
> > Нет ошибки при компиляции и выполнении.
> есть. и пока не будеш говорить правду ничего не исправишь.
>

"Пытай-пытай, Мюллер" )))

Дано:
База - Access.
ADOConnection(JET.OLEDB.4.0), ADODataSet, DataSource, DBGrid, 2 Button's.
CommandText (Dataset) - "SELECT * FROM Table1"
Поля в Dataset - соответствуют Table1.
Решаемая задача - фильтрация по Memo-полю.
Решение:

procedure TForm5.Button2Click(Sender: TObject);
begin
ADODataSet1.Filter := '(Field1 LIKE *что-то*)';
ADODataSet1.Filtered := true;
end;

Результат - работает. БЕЗ ЛЮБЫХ ОШИБОК.

Усложняем задачу - фильтрация по нескольким словам.
В Access - "довешиваем" WHERE через AND(OR) см.[0]
В Дельфи - см.[4] - получается ошибка.

Вот и пытаюсь понять - куда копать?

P.S. А можно ли (целесообразно ли, соотв.) произвести сортировку memo-поля по аналогии с поколоночной сортировкой Items в TListView?


Anatoly Podgoretsky   (2008-07-13 23:40:00) [12]

> fog  (13.07.2008 22:51:04)  [4]

Ах да, новый фкод на первый взгляд бессмысленный.


Anatoly Podgoretsky   (2008-07-13 23:38:00) [13]

> fog  (13.07.2008 22:51:04)  [4]

Так это совсем другой код.


sniknik   (2008-07-13 23:02:00) [14]

> Нет ошибки при компиляции и выполнении.
есть. и пока не будеш говорить правду ничего не исправишь.


fog   (2008-07-13 22:51:00) [15]

...raised exception class EOleException with message "Arguments are of the wrong type, are out of acceptable range, or are in conflict with another"


> Anatoly Podgoretsky ©   (13.07.08 20:46) [2]
> Не может ни то, ни то работать, обе конструкции должны выдать
> ошибку и компиляция прекратиться.

Нет ошибки при компиляции и выполнении.


procedure TForm5.Button2Click(Sender: TObject);
begin
ADODataSet1.Filter := '(Field1 LIKE *что-то*)AND(Field1 LIKE *где-то*)';
ADODataSet1.Filtered := true;
end;

Без после AND... работает.


sniknik   (2008-07-13 22:44:00) [16]

* -> %


Anatoly Podgoretsky   (2008-07-13 20:46:00) [17]

Не может ни то, ни то работать, обе конструкции должны выдать ошибку и компиляция прекратиться.


Правильный$Вася   (2008-07-13 20:35:00) [18]


> -нет (ошибка).

озвучь


Наверх

Титульная страница Поиск, карта сайта Написать письмо