Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
coma
1

Подстановка значений

27.07.2006, 20:16. Просмотров 2685. Ответов 18
Метки нет (Все метки)

Имеется таблица с данными о клиентах и такаяже но о партнерах. А так же имеется таблица "Закупки", где оторбражаются все покупки и услуги предоставленные партнерами клиентам.
Задача такая: В таблице Клиенты есть поля "Важность" , а для Партнеров- "Активность".
Требуется сделать так, что бы данные поля заполнялись автоматически.
Важность: при достижении определенного уровня закупок должна меняться. К премеру: до 10-обычный, 10-20 важный, более 20 - очень важный
Активность: определяется датой последней продажи. К премеру: продажи есть за последние пол года-"активный", продаж за пол года нет, но есть за год-"пассивный", продаж нету более года-"недействующий"
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.07.2006, 20:16
Ответы с готовыми решениями:

Подстановка значений
Подскажите, каким образом можно сделать так, чтобы в таблице Отношения поле ПаспортТренера имело...

Подстановка значений
Добрый день! Нужна помощь. В примере две таблицы исходные и одна сводная. Одна форма - Сводная....

Подстановка значений в поля
Всем привет. Подмогите пожалуста. У меня есть БД. У нее єсть таблиця "Товари" с полями: 1)Модел...

Подстановка нулевых значений ?
Всем привет . Возникла проблема с кодом sql, в котором я, собственно, нибумбум . Собственно, сабж...

18
5 / 5 / 1
Регистрация: 06.12.2006
Сообщений: 329
27.07.2006, 20:41 2
Если требуется, то и делайте.
0
coma
27.07.2006, 20:45 3
Зачем сразу так грубо.
Я просто совета попросил, а Вы так вот пишите.
Если вы не хотети подсказать или не знаете как, то это ведь не повод грубить. Может кто то другой напишет/подскажет.
Спасибо.
5 / 5 / 1
Регистрация: 06.12.2006
Сообщений: 329
27.07.2006, 20:52 4
Совет или помощь просят немного в другой форме, а не в плуприказном порядке.
0
coma
27.07.2006, 21:03 5
Я просто забыл в конце поста написать фразу "Если можете, помогите пожайлусто". А сразу и не заметил что не написал
А требования...это для меня, те требования, которые мне поставили.
Извиняюсь за данный конфуз. Простите.
Пойму если сейчас ни чего не напишете, но я благодарен за помощь, которуб Вы мне неоднократно оказывали, как неопытному пользователю. Спасибо большое.
5 / 5 / 1
Регистрация: 06.12.2006
Сообщений: 329
27.07.2006, 22:37 6
Bce, проехали.

А, что такое уровень закупок?
0
coma
28.07.2006, 00:09 7
В таблице закупки есть поле кол-во и сумма, где указывается кол-во купленных лицензий и общая сумма.
Уровень закупок,это суммарное кол-ве купленных лицензий клиентом за все время сотрудничества.
117 / 117 / 10
Регистрация: 12.05.2010
Сообщений: 1,207
28.07.2006, 13:16 8
Вы, к сожалению, только изложили суть дела, но не изложили предметно задачу и, собственно, саму проблему: не знаете с чего начать, не получается что-то конкретное и т. д....

Могу понять задачу так: при внесении изменений в таблицу "Закупки" (редактирование записей, их добавление или удаление) необходимо для соответствующего Клиента и/или Партнера в соответствующих таблицах изменять содержимое полей "Важность" и "Активность".

Решить эту задачу можно либо на Бейсике, либо запросами на обновление по описанным Вами правилам.

Так?
0
coma
28.07.2006, 14:03 9
Вы совершенно правы.
Вы не могли бы уточнить как это сделать запросами?
И возможно ли, что бы изначально так же заполнилось все с помощью запроса?(в данный момент эти поля пусты)
Меня просто попросили сделать это все, т.к. в отделе нужна база, а делать некому, а я ни когда ранее не работал в access и приходится все осваивать на ходу.
5 / 5 / 1
Регистрация: 06.12.2006
Сообщений: 329
28.07.2006, 14:28 10
Есть два метода решения Вашей проблемы:



1. Вы должны отследить все места возможного изменения в таблицах Клиенты и Партнеры тех полей (влияющие поля), которые влияют на значения полей "Важность" и "Активность" (зависимые поля), и при изменении поля влиния перевычислить соответствующее зависимое поле. В форме, в которой вносим информацию о закупках таких мест два: процедура Form_AfterUpdate и Form_AfterDelConfirm. Еще нужно учесть, что "Активность" зависит от текущей даты (сегодня партнер активный, а завтра может стать пассивным). Поэтому действия по обновлению полей следует выполнить и при открытии базы. Например, в процедуре Form_Load главной формы (та, с которой начинается работа). Если же у Вас работают с базой и ночью, то нужно отследить полночь (переход на следующий день).

Недостаток, невозможно отловить изменения, которые производятся не через формы, а непосредственно в таблицах



2. Отказываемся от полей "Важность" и "Активность" и каждый раз, когда нам нужны значения важности или активности, вычисляем их (обычно это делается непосредственно в запросе). Указанный в пункте 1 недостаток исчезает, но появляется новый. При увеличении количества записей таблицы "Закупки", естественно, возрастает время вычислений.



Так, что решение за Вами, а затем поговорим о следующем этапе.
0
117 / 117 / 10
Регистрация: 12.05.2010
Сообщений: 1,207
28.07.2006, 19:25 11
Действительно, а для чего Вам нужны поля "Активность" и "Важность"? Если они должны отображаться для кадого Клиента и/или Партнёра прямо в форме, через которую Вы работаете с таблицей "Закупки", то понятно. Но если эти поля используются в каких-то изредка печатаемых отчётах, то от обновления этих полей можно отказаться, а вычислять их только при работе с отчётом...
0
5 / 5 / 1
Регистрация: 06.12.2006
Сообщений: 329
28.07.2006, 19:48 12
Да даже и при работе с формой "Закупки", поместив вычисление важности и активности в запросы, являющиеся источником строк ComboBox-ов для Клиента и Партнера, можно отобразить эти параметры (для справки) в списке. А при обновлении или удалении записей формы достаточно сделать Requery для ComboBox-ов.
0
coma
28.07.2006, 20:24 13
Михайло (28.07.2006)
Действительно, а для чего Вам нужны поля "Активность" и "Важность"? Если они должны отображаться для кадого Клиента и/или Партнёра прямо в форме, через которую Вы работаете с таблицей "Закупки", то понятно. Но если эти поля используются в каких-то изредка печатаемых отчётах, то от обновления этих полей можно отказаться, а вычислять их только при работе с отчётом...
В том то и дело, что должно отображаться в форме у каждого клиента.

Я для наглядности решил прекрепить данную базу. В ней сейчас отсутствуют соответсвуюющие "окошки" в формах.
Спасибо, за то что уделяете мне время.
5 / 5 / 1
Регистрация: 06.12.2006
Сообщений: 329
28.07.2006, 21:04 14
А в каких формах должны фигурировать обсуждаемые поля? Если в "кленты" и "партнеры", то их там можно организовать вообще не в запросе, а сделать источником данных каждого из полей функцию по вычислению значений важности или активности.
0
coma
28.07.2006, 21:45 15
Совершенно верно: поле "важность" в форме "клиенты", поле "активность"-"партнеры".
5 / 5 / 1
Регистрация: 06.12.2006
Сообщений: 329
28.07.2006, 22:44 16
Эти две функции поместите в стандартный модуль базы.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Public Function FVag(id_kl)
Dim l As Long
  If Not IsNull(id_kl) Then
    l = DSum("[количество РМ]", "[подтаблица-закупки]", "[Код клиента]=" & id_kl)
    If l 
      FVag = "Обычный"
    ElseIf l 
      FVag = "Важный"
    Else
      FVag = "Очень важный"
    End If
  End If
End Function
 
Public Function FAct(id_pr)
Dim d As Long
  If Not IsNull(id_pr) Then
    d = DateDiff("d", DMax("[Дата_оплаты]", "[подтаблица-закупки]", "[Продажу ведет]=" & id_pr), Date)
    If d 
      FAct = "Активный"
    ElseIf d 
      FAct = "Пассивный"
    Else
      FAct = "Недействующий"
    End If
  End If
End Function
В форме "клиенты" создайте текстовое поле , например, Vagnost и в качестве его данных пропишите (без кавычек) "=FVag([Код клиента])". Для элемента управления "подтаблица-закупки(для клиента)" в обработчике события "Выход" пропишите [Vagnost].Requery.



Аналогично, в форме "партнеры" создайте текстовое поле , например, Activnost и в качестве его данных пропишите (без кавычек) "=FAct([код партнера])". Для элемента управления "подтаблица-работа партнеров с каждым из клиентов" (сейчас он имеет у Вас имя Форма1) в обработчике события "Выход" пропишите [Activnost].Requery.



Т.е. каждый раз при выходе из подчиненых форм, поля которых влияют на параметры важности и активности, будет выполняться пересчет параметров.



Если что не так, то извиняйте. Буду только через месяц, но я думаю, что без помощи Вас народ не оставит.
0
5 / 5 / 1
Регистрация: 06.12.2006
Сообщений: 329
29.07.2006, 16:03 17
Вчера в спешке напорол ерунды. Извиняюсь и исправляюсь.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Public Function FVag(id_kl)
Dim l
If Not IsNull(id_kl) Then
l = DSum("[количество РМ]", "[подтаблица-закупки]", "[Код клиента]=" & id_kl)
If Not IsNull(l) Then
If l
   FVag = "Обычный"
ElseIf l
   FVag = "Важный"
Else
  FVag = "Очень важный"
End If
End If
End If
End Function
 
Public Function FAct(id_pr)
Dim d
If Not IsNull(id_pr) Then
d=DMax("[Дата_оплаты]", "[подтаблица-закупки]", "[Продажу ведет]=" & id_pr)
If Not IsNull(d) Then
d = DateDiff("d", d, Date)
If d
  FAct = "Активный"
ElseIf d
  FAct = "Пассивный"
Else
  FAct = "Недействующий"
End If
End If
End If
End Function
Если поля Vagnost или Activnost будут пустыми, то это значит, что а) в таблице "Закупки" по клиенту или, соответственно, партнеру отсутствуют сведения или б) не заполнено ни одно из полей количество РМ по клиенту или Дата_оплаты по партнеру.



Вместо [Vagnost].Requery, [Activnost].Requery пожалуй лучше для быстродействия в обоих случаях проставить Me.Recalc.
0
5 / 5 / 1
Регистрация: 06.12.2006
Сообщений: 329
29.07.2006, 16:21 18
Да, оказывается некорректно передается информация. Поэтому заменяю знаки отношений на их наименования, обрамлены знаком #.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Public Function FVag(id_kl)
Dim l
If Not IsNull(id_kl) Then
l = DSum("[количество РМ]", "[подтаблица-закупки]", "[Код клиента]=" & id_kl)
If Not IsNull(l) Then
If l #меньше#10  Then
FVag = "Обычный"
ElseIf l #меньше или равно#20 Then
FVag = "Важный"
Else
FVag = "Очень важный"
End If
End If
End If
End Function
 
Public Function FAct(id_pr)
Dim d
If Not IsNull(id_pr) Then
d=DMax("[Дата_оплаты]", "[подтаблица-закупки]", "[Продажу ведет]=" & id_pr)
If Not IsNull(d) Then
d = DateDiff("d", d, Date)
If d #меньше#183 Then
FAct = "Активный"
ElseIf d #меньше#365 Then
FAct = "Пассивный"
Else
FAct = "Недействующий"
End If
End If
End If
End Function
0
coma
31.07.2006, 15:22 19
Спасибо большое, все работает.
Только вот хотел узнать: когда я заношу данный в ворме в подчиненную форсу "закупки" и потом ставлю курор в одно из окошек формы, то мне выдается сообщении о том, что не существует макроса Vagnost (при действии в форме "клиенты") и Activnost (в форме - "партнеры"). Не подскажете, как это исправить?
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.07.2006, 15:22

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

Подстановка значений с условием
В таблице_1 есть поле_1, значению которого соответствует множество значений поля_2. Вопрос: как в...

Автоматическая подстановка значений
Здравствуйте! Помогите пожалуйста мне разобраться со следующим вопросом: К примеру имеются 4 поля...

Подстановка значений по коду в запросе
Наша организация ведёт базу данных по клиентам и поводам их обращений. А проверку этой базы данных...

Подстановка значений в поля формы
Добрый день! Делаю для себя базу для автоматизации заполнения бланков. Это мой первый опыт Access....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.