Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Параметр "для любого значения"! ADO + Access 
:(
    Опции темы
Rowi
Дата 3.3.2009, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 12.12.2005
Где: Украина

Репутация: нет
Всего: нет



Здравствуйте!

Используется Delphi5 + ADO + Access
Есть простейший запрос с фильтрацией типа:
Код

SELECT * FROM MyTable 
WHERE 
FieldName1=:Param1 
AND 
FieldName2=:Param2

С самой фильтрацией проблем нет, но если необходимо временно отключить фильтр по одному полю, какое значение параметра необходимо установить, чтобы, например, поле "FieldName1" не фильтровалось?
Пробовал
Код

ParamByName('Param1').Value:= '*';

Пробовал
Код

ParamByName('Param1').Value:= '%';

В результате - пустой набор записей!

Т.е. вопрос: какое значение параметра (для Access'а!) соответствует "равно любому значению"?

Текст запроса изменять не хотелось бы - тогда теряется всё преимущество использования параметров!
Есть ли такой способ? Или только изменять текст запроса?

P.S. Да, кстати, если это важно - тип поля: числовой (целые числа)

Это сообщение отредактировал(а) Rowi - 3.3.2009, 18:18
PM MAIL   Вверх
Kbl4AH
Дата 3.3.2009, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(Rowi @  3.3.2009,  18:12 Найти цитируемый пост)
Есть ли такой способ?

нет
PM MAIL ICQ   Вверх
Данкинг
Дата 3.3.2009, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Зачем что-то придумывать? Заведи переменную для AdoQuery.Text и меняй её по своему усмотрению, или две разные переменных сделай.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Akella
Дата 3.3.2009, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Rowi @  3.3.2009,  18:12 Найти цитируемый пост)
ParamByName('Param1').Value:= '*';


Цитата(Rowi @  3.3.2009,  18:12 Найти цитируемый пост)
ParamByName('Param1').Value:= '%';


но в запросе у тебя 2 параметра
PM MAIL   Вверх
Kbl4AH
Дата 3.3.2009, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(Akella @  3.3.2009,  22:51 Найти цитируемый пост)
но в запросе у тебя 2 параметра

он написал, какие значения параметру1 он пробовал присвоить

Это сообщение отредактировал(а) Kbl4AH - 3.3.2009, 23:07
PM MAIL ICQ   Вверх
Akella
Дата 4.3.2009, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



а чему был равен в это время параметр 2?
PM MAIL   Вверх
Kbl4AH
Дата 4.3.2009, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(Akella @  4.3.2009,  00:26 Найти цитируемый пост)
а чему был равен в это время параметр 2?

какому-то нормальному значению

ЗЫ. 
2 Rowi Возможен такой способ:
Код
SELECT * FROM MyTable WHERE FieldName1=:Param1 AND FieldName2=:Param2

Поменять на:
Код
SELECT * FROM MyTable WHERE FieldName1 like перевод_в_строку(:Param1) AND FieldName2=:Param2

PM MAIL ICQ   Вверх
Rodman
Дата 4.3.2009, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



если хошь достать все.. че просто не делать параметр?!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Rowi
Дата 4.3.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 12.12.2005
Где: Украина

Репутация: нет
Всего: нет



Цитата(Kbl4AH @  4.3.2009,  09:02 Найти цитируемый пост)
Цитата(Akella @  4.3.2009,  00:26 )а чему был равен в это время параметр 2?
какому-то нормальному значению

Да, какому-то нормальному значению, при котором заведомо должны быть записи.

Цитата(Kbl4AH @  4.3.2009,  09:02 Найти цитируемый пост)
Возможен такой способ:
SELECT * FROM MyTable WHERE FieldName1=:Param1 AND FieldName2=:Param2
Поменять на:
SELECT * FROM MyTable WHERE FieldName1 like перевод_в_строку(:Param1) AND FieldName2=:Param2

Но FieldName1 ведь не строчного типа! 
Кроме того, перевод в строку вроде и не нужен: и '*' и '%' присваиваются для Param1 как строки. А по другому вроде никак такие значения не присвоишь...

Добавлено через 1 минуту и 22 секунды
Цитата(Rodman @  4.3.2009,  09:58 Найти цитируемый пост)
если хошь достать все.. че просто не делать параметр?!

эээм.........  не совсем понял...
PM MAIL   Вверх
Kbl4AH
Дата 4.3.2009, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(Rowi @  4.3.2009,  17:31 Найти цитируемый пост)
Но FieldName1 ведь не строчного типа! 

да, глюканул
Код

SELECT * FROM MyTable WHERE перевод_в_строку(FieldName1) like :Param1 AND FieldName2=:Param2

А тип Param1 (если в аксессе бывает тип переменной) делай строковый

Это сообщение отредактировал(а) Kbl4AH - 4.3.2009, 18:31
PM MAIL ICQ   Вверх
Rowi
Дата 4.3.2009, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 12.12.2005
Где: Украина

Репутация: нет
Всего: нет



Цитата(Kbl4AH @  4.3.2009,  18:28, ost1802548)

SELECT * FROM MyTable WHERE перевод_в_строку(FieldName1) like :Param1 AND FieldName2=:Param2
А тип Param1 (если в аксессе бывает тип переменной) делай строковый

ОК, попробую...
А кстати, как в SQL-запросе перевод в строку делать? Там ведь IntToStr() не поставишь...
PM MAIL   Вверх
Kbl4AH
Дата 4.3.2009, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(Rowi @  4.3.2009,  18:57 Найти цитируемый пост)
Там ведь IntToStr() не поставишь...

не поставишь... зато поставишь другое)))
я access не знаю в отличие от google'a(((
PM MAIL ICQ   Вверх
Akella
Дата 4.3.2009, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Rowi @  4.3.2009,  18:57 Найти цитируемый пост)
как в SQL-запросе перевод в строку делать? Т

Зависит от СУБД, в Firebird
Код
cast()

PM MAIL   Вверх
Rowi
Дата 10.3.2009, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 12.12.2005
Где: Украина

Репутация: нет
Всего: нет



Ура! Разобрался!!! smile 
Просто вместо
Код

SELECT * FROM MyTable 
WHERE 
FieldName1=:Param1 
AND 
FieldName2=:Param2

я ввожу
Код

SELECT * FROM MyTable 
WHERE 
FieldName1 LIKE :Param1 
AND 
FieldName2 LIKE :Param2

В итоге умный Access (или ADO - уж не знаю, кто именно))) автоматически (!) преобразует значение поля в строковый вид (а LIKE работает только со строковыми значениями) и в итоге все работет!!!
По крайней мере при значении '%' (при '*' не пробовал, но тоже должно по идее)
Код

ParamByName('Param1').Value:= '%';

всё работает: фильтруется только по FieldName2, а по FieldName1 - никакой фильтрации, выдаются все значения. Что и требовалось, без изменения текста запроса!
PM MAIL   Вверх
Akella
Дата 11.3.2009, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Rowi @  10.3.2009,  19:09 Найти цитируемый пост)
вместо


Цитата(Rowi @  10.3.2009,  19:09 Найти цитируемый пост)
=:


Цитата(Rowi @  10.3.2009,  19:09 Найти цитируемый пост)
я ввожу


Цитата(Rowi @  10.3.2009,  19:09 Найти цитируемый пост)
LIKE

 smile  эх, как же мы недосмотрели smile 
PM MAIL   Вверх
Kbl4AH
Дата 12.3.2009, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(Akella @  11.3.2009,  17:46 Найти цитируемый пост)
эх, как же мы недосмотрели

Цитата(Kbl4AH @  4.3.2009,  18:28 Найти цитируемый пост)
SELECT * FROM MyTable WHERE перевод_в_строку(FieldName1) like :Param1 AND FieldName2=:Param2

все мы досмотрели, просто не понятно было, что человек хотел от запроса...


PM MAIL ICQ   Вверх
Rowi
Дата 21.9.2012, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 12.12.2005
Где: Украина

Репутация: нет
Всего: нет



Продолжая свою же тему...

Задача та же, но поле логического типа (true/false).
Если для строкового нужно ставить "%" (что соответствует любому значению), 
то что надо ставить для логического, чтобы соответствовало любому значению?

Добавлено через 9 минут и 29 секунд
Блин, дико извиняюсь - уже решил.

Оказывается, в свойствах параметра не нужно было менять тип данных:
при DataType=ftWideString и Type=OleStr всё работает! (Value=%)

Извините за беспокойство, спасибо!
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1103 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.