powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Filter рекордсета, поля типа numeric и date
12 сообщений из 12, страница 1 из 1
Filter рекордсета, поля типа numeric и date
    #33115128
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
делаю фильтр так:
для numeric
1) rcd.Filter = "sgdsumm like '" & CStr(Text1.Text) & "'".
он нормально фильтрует, но только, если я значение ввожу целиком. а если ставлю * в конце ('" & CStr(Text1.Text) & "*'"), ругается "Не удается открыть фильтр". Как это исправить?
2) а с датой вообще ничего не получается. посоветуйте, как сделать фильтр по дате, чтобы можно было также не целиком искать, а любое совпадение.
Заранее спасибо за ответ.
...
Рейтинг: 0 / 0
Filter рекордсета, поля типа numeric и date
    #33115149
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настенькаделаю фильтр так:
для numeric
1) rcd.Filter = "sgdsumm like '" & CStr(Text1.Text) & "'".
он нормально фильтрует, но только, если я значение ввожу целиком. а если ставлю * в конце ('" & CStr(Text1.Text) & "*'"), ругается "Не удается открыть фильтр". Как это исправить?
2) а с датой вообще ничего не получается. посоветуйте, как сделать фильтр по дате, чтобы можно было также не целиком искать, а любое совпадение.
Заранее спасибо за ответ.
1. Звезду замените на знак процента, если используете SQL Server. Какой источник данных? Какая библиотека доступа к данным - ADO или DAO? Что показывает Debug.Pring "('" & CStr(Text1.Text) & "*'")"? Может быть там ошибка синтаксиса, может быть знак переноса корретки, может быть кавычка.
2. Вы сами поняли, что спросили? По какому совпадению можно искать дату? Одинаковый день? Одинаковый месяц? Одинаковые буквы в названии месяца? :))
...
Рейтинг: 0 / 0
Filter рекордсета, поля типа numeric и date
    #33115176
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что выдает debug

sgdsumm like ('1*')

и потом ошибка "не удается открыть фильтр". когда ставлю звездочку со стринговыми полями, то всё в порядке.

про дату:
например, у меня в таблице такие значения

09.12.2004
11.12.2005

я ввожу 12, и он выдает эти 2 записи. т.е. совпадения как в стринговых полях.
любая часть ищется.
...
Рейтинг: 0 / 0
Filter рекордсета, поля типа numeric и date
    #33115193
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настенькачто выдает debug

sgdsumm like ('1*')

и потом ошибка "не удается открыть фильтр". когда ставлю звездочку со стринговыми полями, то всё в порядке.

про дату:
например, у меня в таблице такие значения

09.12.2004
11.12.2005

я ввожу 12, и он выдает эти 2 записи. т.е. совпадения как в стринговых полях.
любая часть ищется.
Ага, понятно:
1. Судя по названию, sgdsumm - нетекстовое поле, по этому -
Cstr(sgdsumm) или cast(sgdsumm as nvarchar(30)) в зависимости от СУБД.
2. тоже самое - дату привести к текстовому виду, а затем использовать LIKE
...
Рейтинг: 0 / 0
Filter рекордсета, поля типа numeric и date
    #33115206
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я же писала

rcd.Filter = "sgdsumm like '" & CStr(Text1.Text) & "'".

работает, но ищет только совпадение целиком. а мне надо вот что:

пример:

есть 2 значения
103
3001

я просто набираю 3, и две эти записи выводятся. как это сделать? * в конце не катит. :-(.

cast работает только с sql-запросами. у меня не sql-ЗАПРОС, а фильтр рекордсета.
...
Рейтинг: 0 / 0
Filter рекордсета, поля типа numeric и date
    #33115244
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настенькая же писала
rcd.Filter = "sgdsumm like '" & CStr(Text1.Text) & "'".
работает, но ищет только совпадение целиком. а мне надо вот что:
пример:
есть 2 значения
103
3001
я просто набираю 3, и две эти записи выводятся. как это сделать? * в конце не катит. :-(.
cast работает только с sql-запросами. у меня не sql-ЗАПРОС, а фильтр рекордсета.
Это такой легкий намек на используемую СУБД, да? ;))) Настенька, я-то знаю, что Вы принципиально не испльзуете Access, но окружающие-то об этом только догадываются.
Делайте представление и добавляйте в него поле, в котором sgdsumm переводится в текстовый вид. По этому полю и делайте LIKE.
Насчет неиспользуемости cast в Filter Вы уверены?
Но правильной политикой было бы использование хранимой процедуры, принимающей в качестве аргумента часть строки и возвращающей то, что Вам необходимо.
...
Рейтинг: 0 / 0
Filter рекордсета, поля типа numeric и date
    #33115269
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а можно по проще. без всяких представлений. надо модифицировать эту строку, чтобы искал любые совпадения.

rcd.Filter = "sgdsumm like '" & CStr(Text1.Text) & "'".

и больше ничего не надо. я не думала, что это так сложно будет. вроде, на первый взгляд элементарная вещь, а работать не хочет.
...
Рейтинг: 0 / 0
Filter рекордсета, поля типа numeric и date
    #33115318
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настенькаа можно по проще. без всяких представлений. надо модифицировать эту строку, чтобы искал любые совпадения.

rcd.Filter = "sgdsumm like '" & CStr(Text1.Text) & "'".

и больше ничего не надо. я не думала, что это так сложно будет. вроде, на первый взгляд элементарная вещь, а работать не хочет.
Использование представления - вполне нормальное решение, достаточно простое и безгеморройное.

Если же вы настаиваете на своем способе фильтрации, то попробуйте так
Код: plaintext
rcd.Filter = "sgdsumm like ('%1%')"
или так
Код: plaintext
rcd.Filter = "cast(sgdsumm as nvarchar(30)) like ('%1%')"

Если при этом ошибка, то какая? Если NOT-ожидаемый результат, то какой?
Какая библиотека доступа к данным используется? ADO, RDO, DAO?
...
Рейтинг: 0 / 0
Filter рекордсета, поля типа numeric и date
    #33115340
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ничего не работает. :-(((.
использую ado.
с cast такая ошибка:
runtime '3001'
аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт с друг другом.

с процентами тоже ошибка:
когда я пытаюсь открыть фильтр (rcd.open). пишет, "Не удается открыть фильтр".

помогите!!!
...
Рейтинг: 0 / 0
Filter рекордсета, поля типа numeric и date
    #33115369
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настеньканичего не работает. :-(((.
использую ado.
с cast такая ошибка:
runtime '3001'
аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт с друг другом.

с процентами тоже ошибка:
когда я пытаюсь открыть фильтр (rcd.open). пишет, "Не удается открыть фильтр".

помогите!!!
Настенька, Вас спасет использование представлений. Когда SQL Server отказывается принимать знак процента, иного выхода, кроме как использовать его собственные механизмы - нет. Метод Filter в ADO достаточно ограничен для той судьбы, что Вы ему уготовили.
...
Рейтинг: 0 / 0
Filter рекордсета, поля типа numeric и date
    #33115378
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, спасибо за ответы. видать, придется всё-таки использовать sql-запрос.
...
Рейтинг: 0 / 0
Filter рекордсета, поля типа numeric и date
    #33115542
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настенька

а Вы смотрели какое значение принимает строка

Код: plaintext
"sgdsumm like '" & CStr(Text1.Text) & "*'".

может там лишние кавычки или еще что

к примеру
Код: plaintext
sgdsum like '*'
выдаст ошибку и надо по другому формировать фильтр (точнее его отсутствие rcd.Filter = "")
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Filter рекордсета, поля типа numeric и date
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]