Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.005 c
15-1215773178
ПЛОВ
2008-07-11 14:46
2008.08.31
Вопрос о координатах


1-1197786766
Алекс_
2007-12-16 09:32
2008.08.31
обработка событий VK_DOWN для дочерних контролов


3-1204629190
harisma
2008-03-04 14:13
2008.08.31
Работа с типом данных TABLE


1-1197158281
Anton
2007-12-09 02:58
2008.08.31
Как использовать movups в Asm в Delphi ?


6-1192736496
DprPasDcu
2007-10-18 23:41
2008.08.31
Как управлять сетевыми подключениями?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский