Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2009, 17:36   #1
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию Фильтр по текстовому полю

Помогите начинающему аналитику БД.
Проблема: создаю базу данных, где учитываются маркетинговые акции. В таблице акции есть поле номер_акции и акция. В номере соответственно указывается инвентарный номер, который включает в себя
1. Тип акции (локальная, федеральная)
2. Месяц начала акции
3. Канал сбыта
4. Тип акции
5. Порядковый номер акции.
Создаю маску ввода, внешний вид получается такой:
Фед-01-Опт-01-01 и все выглядит очень читабельно.
Проблема в том, что когда я создаю фильтр для отфильтровки нужной акции, то при наличии знака "-" (а он идет как разделитель в маске ввода, чтобы можно было понять в какое поле, что вводить), то фильтр не срабатывает... Отфильтровывается 0 значений. Если убирать знаки "-", то фильтр работает, но выглядит номер акции нечитабельно и вводится еще сложнее (не понятно, где заканчивается одно и начинается другое... (Фед01Опт0101).
Как быть и что можно поправить?
Иванов_ДМ вне форума Ответить с цитированием
Старый 28.12.2009, 19:05   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте начинающий аналитик БД Иванов_ДМ.
Из Вашего описания понятно, что проблема существует, но представления о "проблеме" оно не даёт.
Выложите архив с заранее подготовленным (избавленным от переизбыточных данных, OLE объектов,.... и сжатый средствами MS Access) файлом БД, описанием "проблемы" и ожидаемого результата. И на примере Вашей БД можно будет продемонстрировать способы её решения.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 28.12.2009, 20:50   #3
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию

Teslenko_EA, спасибо за ответ.
Выкладываю архив с двумя вариантами одной БД. В первом - желаемый формат данных в столбце, по которому не работает фильтр в запросе, в другом - действительный формат файла (фильтр в запросе по нему работает), но такой формат малопонятен для людей и вносящих новые данные, и просто смотрящих на существующие.
Как сделать так, чтобы и данные писались через дефис, например так: Фед-01-Опт-01-01 (а не вот так: Фед01Опт0101) и отфильтровка в запросе работала?
Вложения
Тип файла: rar База данных.rar (5.85 Мб, 26 просмотров)
Иванов_ДМ вне форума Ответить с цитированием
Старый 28.12.2009, 22:29   #4
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Иванов_ДМ, Вы очевидно невнимательно прочли мой предыдущий пост, файл в архиве должен быть - "избавленным от переизбыточных данных, OLE объектов,.... и сжатый средствами MS Access". Для оказания безвозмездной помощи, у меня нет в планах получения файлов размером более 200Кб. Или уменьшайте бесполезный объем, или ищите помощь на коммерческой основе.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 29.12.2009, 08:58   #5
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию

Teslenko_EA извиняюсь, вроде все удалил и почистил, но не обратил внимания, что размер такой был.
Перекачал сейчас таблицы в новые файлы, теперь они гораздо меньше.
Вложения
Тип файла: rar База данных2.rar (40.7 Кб, 18 просмотров)
Иванов_ДМ вне форума Ответить с цитированием
Старый 30.12.2009, 22:14   #6
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте начинающий аналитик БД Иванов_ДМ.
1. основное назначение таблиц БД - хранение данных, для обработки данных применяется диалоговое окно (форма), максимально исключающая ошибки "человеческого фактора". Основная причина проблема, которую Вы себе создали, именно в отсутствии интерфейса.
2. маска ввода (в Вашей конструкции выглядит так: "&&&\-00\-&&&\-00\-00;;_") предназначена исключительно для облегчения ввода данных, т.е. поле отображающее введенные с её помощью данные вида "Фед-01-Опт-01-01" фактически содержит значение "Фед01Опт0101" и потому фильтр содержащий "-" не "работает".
3. Поле запроса сформированное как в подобной конструкции:
Код:
SELECT Left([Номер_акции],3) & "-" & Mid([Номер_акции],4,2) & "-" & Mid([Номер_акции],6,3) & "-" & Mid([Номер_акции],9,2) & "-" & Mid([Номер_акции],11,2)
FROM Акции
будет содержать и отображать данные в необходимом формате.
Но результат будет лучше (с учетом планируемого использования) если:
1) использовать форму для работы сданными,
2) поля 1. Тип акции..., 2. Месяц начала..., 3. Канал сбыта, 4. Тип акции, 5. Порядковый номер... - сделать отдельными в таблице "Акции" с заполнением из списков (наборов констант), а поле Номер_акции формировать только в запросе конкатенацией (объединением) полей таблицы.
Это только советы без замечаний и рекомендаций.
Удачи Вам.
С Новым Годом.
Евгений.

Последний раз редактировалось Teslenko_EA; 30.12.2009 в 22:18.
Teslenko_EA вне форума Ответить с цитированием
Старый 30.12.2009, 22:48   #7
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию

Спасибо, кажется разобрался... Для фильтра в запросе можно также поставить значение без знаков "-".
Интересная мысль про сводный номер из различных значений, как-то в голову не приходило...
Только как тогда сделать автоматически порядковый номер (он отличает акции, которые идентичны по всем остальным значениям), который идет последним?
Иванов_ДМ вне форума Ответить с цитированием
Старый 31.12.2009, 13:13   #8
Abrakadabra
Форумчанин
 
Регистрация: 26.04.2008
Сообщений: 487
По умолчанию

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
маска ввода (в Вашей конструкции выглядит так: "&&&\-00\-&&&\-00\-00;;_")
Если ее немного видоизменить, напр.так:
&&&\-00\-&&&\-00\-00;0;_

то в таблице получите именно то, что видите, и ваша проблема, изложенная в начале, будет решена.
Abrakadabra вне форума Ответить с цитированием
Старый 01.01.2010, 17:50   #9
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте начинающий аналитик БД Иванов_ДМ.
После разделения поля Номер_акции на пять полей (F1-F5), создайте составной ключ для созданных пяти полей и уникальность будет поддерживаться.
Задача определения номера для создаваемой "Акции" может быть решена с применением подобной SQL конструкции:
Код:
SELECT Max(Val([F5]))+1 AS НовыйНомер FROM Акции WHERE F1='Фед' AND F2='01' AND F3='Опт' AND F4='01'
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтрация по текстовому полю andirock2112 БД в Delphi 3 18.05.2009 09:23
MFC: передача позиции ползунка текстовому полю umnick Visual C++ 1 12.11.2008 19:54
Вопросы по текстовому редактору! Bitrayder Общие вопросы C/C++ 4 10.03.2008 20:55