Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.31;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.014 c
2-1216970038
Dennis I. Komarov
2008-07-25 11:13
2008.08.31
что внутри with


15-1215190910
Наталия
2008-07-04 21:01
2008.08.31
вэб-камера


1-1198005654
Punch
2007-12-18 22:20
2008.08.31
MDI и мерцания MDIChild


15-1215472450
Хохол
2008-07-08 03:14
2008.08.31
Система сообщений(философия)


2-1216987008
Delphist
2008-07-25 15:56
2008.08.31
Генератор