![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]
> -нет (ошибка).
озвучь