Форум: "Начинающим";
Текущий архив: 2008.08.31;
Скачать: [xml.tar.bz2];
ВнизSQL -> ADODataset.Filter Найти похожие ветки
← →
fog (2008-07-13 20:30) [0]Кризис. Никак не получается перегнать фильтр под Дельфи.
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-13 20:35) [1]
> -нет (ошибка).
озвучь
← →
Anatoly Podgoretsky © (2008-07-13 20:46) [2]Не может ни то, ни то работать, обе конструкции должны выдать ошибку и компиляция прекратиться.
← →
sniknik © (2008-07-13 22:44) [3]* -> %
← →
fog (2008-07-13 22:51) [4]...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 23:02) [5]> Нет ошибки при компиляции и выполнении.
есть. и пока не будеш говорить правду ничего не исправишь.
← →
Anatoly Podgoretsky © (2008-07-13 23:38) [6]> fog (13.07.2008 22:51:04) [4]
Так это совсем другой код.
← →
Anatoly Podgoretsky © (2008-07-13 23:40) [7]> fog (13.07.2008 22:51:04) [4]
Ах да, новый фкод на первый взгляд бессмысленный.
← →
fog (2008-07-13 23:52) [8]
> 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:57) [9]Ерунда получается, а не фильтр
← →
fog (2008-07-14 00:19) [10]
> 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.
← →
fog (2008-07-14 19:12) [11]Попробовал произвести фильтрацию через Commandtext
ADODataSet1.CommandText := "SELECT * FROM Table1 WHERE Field1 LIKE *что-то*";
Возвращает 0 (RecordCount).
Аналогично ситуация с ADOQuery.
SQL = "SELECT * FROM Table1 WHERE (Table1.Field1 LIKE "*что-то*");"
SQL-запрос взял из Access-a (там работает)
Почему не берет ADO?
← →
sniknik © (2008-07-14 19:39) [12][3]
← →
Palladin © (2008-07-14 19:47) [13]перевожу, символы "звездочка" заменить символами "процент"
← →
fog (2008-07-14 19:58) [14]
> sniknik © (13.07.08 22:44) [3]
> * -> %
> Palladin © (14.07.08 19:47) [13]
> перевожу, символы "звездочка" заменить символами "процент"
Спасибо, заработало. Но остался вопрос - почему wildcard работает в Access-e и частично работает в дельфи [8] и наоборот - заменил * на % в Access-e и не работает.
← →
Palladin © (2008-07-14 20:08) [15]прими как должное... не все, что работает в access (либо другом прикладном ПО к СУБД), так же работает и через провайдера...
← →
fog (2008-07-14 20:54) [16]
> Palladin © (14.07.08 20:08) [15]
OK.
Но на какой SQL ориентироваться (89 или 92) по использованию %,*, ?, _, # и ESCAPE?
← →
fog (2008-07-14 21:01) [17]Опять грабли - на "=" и "/".
Пример: "%ПДК = 1 мг/кг%". Приходиться по частям - "%ПДК%", потом "%1 мг%"
← →
Нат (2008-07-25 05:34) [18]Странно, многие утверждают, что процент и звездочка эквивалентны.
У меня сделан поиск на свойстве фильтр, где подставляется "нечто*" и работает.
А в посте №4 автор приводит код с ошибкой, т.к искомая строка не заключена в кавычки (" ") или quoted()
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.08.31;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c