|
|
|
| Но подумала, что это, может быть, засорит форум по аксу, поэтому решила пока здесь обсудить.
Раньше, когда моя база работала в старом варианте (практически не было макросов и не было вообще кода ВБА), она была, конечно, неплохая, но простая. Все основывалось на обычных запросах. Но ее хватало до определенного момента, когда я уже поняла,что дальше так продлжаться не может и решила ее изменить так, чтобы она была более контролируемой и удобной. Стала я изучать ВБА, но слишком мало времени прошло. И пока больше непонятного, чем понятного. С вашей помощью получается.
Так вот. Есть у меня внутри базы таблица заданий или дел, как угодно.
Есть у каждого дела свой срок выполнения. И есть поле с Отметкой о выполнении.
Раньше мои подружки, с которыми я работаю, могли легко дату выполнения изменить и я этого, естественно, не замечала, если только сама не помнила про какое-то дело. В итоге контроля за делами особого и не было, так как они могли перенести любое дело, не сказать мне и часто это забывалось. Но несколько раз это вскрывалось, когда я помнила какое-то дело, а они пытались меня убедить, что оно назначено НЕ на сегодня.
В итоге я сейчас думаю, можно ли как-то узнать, было дело перенесено на другой срок или нет. Заблокировать поле ДАТА_ВЫПОЛНЕНИЯ я не могу, так как дела для себя устанавливают частично они сами и частично я им. Запретить им изменение я тоже не могу, так как иногда они изменяют Дату ВЫполнения с моего разрешения, а если я запрещу, то все изменения придется вносить мне самой, что мне не хочется. И так времени нет.
Так вот, как вариант я придумала, что при вводе Даты Выполнения, эта дата копируется в другое поле, которое заблокировано для всех, кроме меня. И по этому полю я и сравниваю, было дело перенесено или нет.
Но мне интересно. Может кто-то когда-то делал такую ерунду? Ну чтобы можно было контролировать, изменена ли несанкционированно Дата ВЫполнения или нет. может есть какие-то более ЭФФЕКТИВНЫЕ и удоные варианты? | |
|
| |
|
|
|
| создается не одна таблица, а две
1- дела
2- история
в 1-й таблице только:
- название дела;
- кто его создал;
- дата создания;
эти записи не редактируются (либо только тем, кто его создал).
во 2-й таблице:
1- ID дела;
2- дата коррекции;
3- ID того, кто внес коррективы | |
|
| |
|
|
|
| СЕНЬКС. пойду "ряализовывать" | |
|
| |
|
|
|
| Можно обойтись и одной таблицей. Вставляется поле дата_изменения. А Updatы заменяются на Insertы. Актуальной считать запись с последней датой. Заодно можно будет отслеживать какие именно изменения вносились, по сравнению с первоначальным заданием. | |
|
| |
|
|
|
|
|
| возможностью редактировать, например, отметить как "выполнено";
если по этому "делу" будет история, то простой запрос на выбор всех "дел" будет возвращать всю историю "дела", а не одну запись по каждому "делу"
ну и т.п. | |
|
| |
|
|
|
| Но ведь пользователем запись будет корректироваться одна и та же. То есть истории не будет. Или я что-то неправильно понимаю?
Смысл какой у меня. В том, чтобы я могла видеть корректировку Даты Выполнения дела.
При этом перед пользователем это дело всегда будет как одна и та же запись. И он будет именно эту запись и корректировать. Соответственно, как значения будут попадать во вторую таблицу? Через запрос на обновление? | |
|
| |
|
94 Кб. |
|
| см. картинку
тока у тя слева будут "дела", а справа история | |
|
| |
|
|
|
|
| это VB
но база в аксесе
Ваш следующий уровень | |
|
| |
|
|
|
| Ну почему же? Ведь актуальными считаются записи с последней датой обновления. В запросе на выбор всех дел ставится условие - дела с максимальной датой. Тогда возвращается одна запись по делу.
И опять же, исходя из опыта, важно знать не только кто и когда изменил записи, но и что именно он поменял. А то могет быть ситуация, когда манагер говорит, что да,мол, изменял дело: в назначении платежа поставил точку в конце предложения, а что деньги в результате ушли на Канары, то извиняйте, это не я. | |
|
| |
|
|
|
| спорять, они тут, спорять, а я смотрю и... нет, кое-что я понимаю | |
|
| |
|
|
|
| спорить о том, что больше нравиться: щи или борщ - дело неблагодарное.
в данном случае таблица не соответствует "Второй Нормальной Форме"
хотя и такое решение имеет право на жизнь | |
|
| |
|
|
|
| Да нет. Мы просто пока не понимаем друг друга.
У меня все таблицы соответствуют аж до четвертой нормальной формы, хотя и трех достаточно.
Дело в том, что мне ведь вовсе и не обязательно иметь историю. Мне достаточно в текущей записи видеть последнее изменение даты. То есть грубо говоря, есть Дата Выполнения. И есть поле Первоначальная_Дата_выполнения. Если они отличаются, значит пользователь несанкционированно изменил дату выполнения дела. Вот.
Проблема в том, что Первоначальная Дата выполнения должна быть равна той дате, которая была введена в поле Дата Выполнения первый раз. Все остальные изменения не должны сохраняться в поле Первоначальная Дата Выполнения. При этом мне даже промежуточные изменения не интересны. Только последнее. То есть все гораздо проще.
Только вот я не знаю, как сделать так, чтобы Первоначальная Дата ВЫполнения получала первое значение поля Дата выполнения, но при этом все остальные изменения чтобы не отражались в поле Первоначальная Дата выполнения.
Пока единственный вариант, который я вижу - это вводить вручную, но это очень неудобно, так как это тоже не дает необходимого контроля. Ведь я не буду знать, какая дата реально первоначальная, ведь не только я ввожу дела. | |
|
| |
|
|
|
| При вводе в поле Дата выполнения проверяется поле Первоначальная дата выполнения.
Если Первоначальная дата выполнения IsNull, тогда данные заносятся в поле Первоначальная дата выполнения, Иначе - нет. | |
|
| |
|
|
|
|
| Что я делаю неправильно?
IIf(IsNull([Поле1]);[Поле1]=[Дата_выполнения];"")
Если поле1 пустое, то в него помещается значение поля Дата_выполнения иначе оно остается в неизменном виде. | |
|
| |
|
|
|
| неправильный синтаксис IIF
слева должен быть контрол, которому присваивается результат
Text = IIF(... | |
|
| |
|
|
|
| То есть
Поле1 = IIf(IsNull([Поле1]);[Поле1]=[Дата_выполнения];"")
Так что ли? | |
|
| |
|
|
|
| да нет. так вообще не то.
Вот я в запросе делаю так:
Поле1:IIf([IsNull(Поле1);[Дата_выполнения];"") - сообщает о циклической ошибке.
Если я пишу это выражение в форме в свободном поле, то почему-то это поле всегда воспринимается несвободным и соответственно вставляется значения из части False.
В любом случае, даже когда у меня и работает и синтаксис врод верный, получается, что при изменении даты она все равно вставляется в Мое поле.
СПАСИТЕ! как написать выражение, чтобы в поле1 вставлялось значение поля0 при первом его заполнении и чтобы все изменения более не сохранялись в поле1.
И где это лучше сделать все таки, в запросе или форме? И такое поле должно быть в таблице, или это делать с помощью свободных полей в запросе или в форме?
ПЛИЗ | |
|
| |
|
|
|
| Private Sub Поле0_AfterUpdate()
If IsNull(Me.Поле1.Value) Then
Me.Поле1.Value = Me.Поле0.Value
End If
End Sub | |
|
| |
|
|
|
| С П А С И Б О!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!! огромное! | |
|
| |