Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: 

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вот не знаю, здесь это обсудить или в форуме по Аксу?
 
 автор: Аленка   (01.10.2008 в 10:22)   личное сообщение
 
 

Но подумала, что это, может быть, засорит форум по аксу, поэтому решила пока здесь обсудить.
Раньше, когда моя база работала в старом варианте (практически не было макросов и не было вообще кода ВБА), она была, конечно, неплохая, но простая. Все основывалось на обычных запросах. Но ее хватало до определенного момента, когда я уже поняла,что дальше так продлжаться не может и решила ее изменить так, чтобы она была более контролируемой и удобной. Стала я изучать ВБА, но слишком мало времени прошло. И пока больше непонятного, чем понятного. С вашей помощью получается.
Так вот. Есть у меня внутри базы таблица заданий или дел, как угодно.
Есть у каждого дела свой срок выполнения. И есть поле с Отметкой о выполнении.
Раньше мои подружки, с которыми я работаю, могли легко дату выполнения изменить и я этого, естественно, не замечала, если только сама не помнила про какое-то дело. В итоге контроля за делами особого и не было, так как они могли перенести любое дело, не сказать мне и часто это забывалось. Но несколько раз это вскрывалось, когда я помнила какое-то дело, а они пытались меня убедить, что оно назначено НЕ на сегодня.
В итоге я сейчас думаю, можно ли как-то узнать, было дело перенесено на другой срок или нет. Заблокировать поле ДАТА_ВЫПОЛНЕНИЯ я не могу, так как дела для себя устанавливают частично они сами и частично я им. Запретить им изменение я тоже не могу, так как иногда они изменяют Дату ВЫполнения с моего разрешения, а если я запрещу, то все изменения придется вносить мне самой, что мне не хочется. И так времени нет.

Так вот, как вариант я придумала, что при вводе Даты Выполнения, эта дата копируется в другое поле, которое заблокировано для всех, кроме меня. И по этому полю я и сравниваю, было дело перенесено или нет.

Но мне интересно. Может кто-то когда-то делал такую ерунду? Ну чтобы можно было контролировать, изменена ли несанкционированно Дата ВЫполнения или нет. может есть какие-то более ЭФФЕКТИВНЫЕ и удоные варианты?

  Ответить  
 
 автор: Дрюня   (01.10.2008 в 10:30)   личное сообщение
 
 

создается не одна таблица, а две
1- дела
2- история

в 1-й таблице только:
- название дела;
- кто его создал;
- дата создания;
эти записи не редактируются (либо только тем, кто его создал).

во 2-й таблице:
1- ID дела;
2- дата коррекции;
3- ID того, кто внес коррективы

  Ответить  
 
 автор: Аленка   (01.10.2008 в 11:28)   личное сообщение
 
 

СЕНЬКС. пойду "ряализовывать"

  Ответить  
 
 автор: FORMAT   (01.10.2008 в 12:52)   личное сообщение
 
 

Можно обойтись и одной таблицей. Вставляется поле дата_изменения. А Updatы заменяются на Insertы. Актуальной считать запись с последней датой. Заодно можно будет отслеживать какие именно изменения вносились, по сравнению с первоначальным заданием.

  Ответить  
 
 автор: Дрюня   (01.10.2008 в 13:50)   личное сообщение
 
 

порочно

  Ответить  
 
 автор: FORMAT   (01.10.2008 в 14:47)   личное сообщение
 
 

Чем?

  Ответить  
 
 автор: Дрюня   (01.10.2008 в 15:26)   личное сообщение
 
 

возможностью редактировать, например, отметить как "выполнено";
если по этому "делу" будет история, то простой запрос на выбор всех "дел" будет возвращать всю историю "дела", а не одну запись по каждому "делу"
ну и т.п.

  Ответить  
 
 автор: Аленка   (01.10.2008 в 15:49)   личное сообщение
 
 

Но ведь пользователем запись будет корректироваться одна и та же. То есть истории не будет. Или я что-то неправильно понимаю?

Смысл какой у меня. В том, чтобы я могла видеть корректировку Даты Выполнения дела.
При этом перед пользователем это дело всегда будет как одна и та же запись. И он будет именно эту запись и корректировать. Соответственно, как значения будут попадать во вторую таблицу? Через запрос на обновление?

  Ответить  
 
 автор: Дрюня   (01.10.2008 в 16:23)   личное сообщение
94 Кб.
 
 

см. картинку
тока у тя слева будут "дела", а справа история

  Ответить  
 
 автор: Аленка   (01.10.2008 в 17:19)   личное сообщение
 
 

И это сделано в аксе?
а пимерчик низя?

  Ответить  
 
 автор: Дрюня   (01.10.2008 в 17:59)   личное сообщение
 
 

это VB
но база в аксесе
Ваш следующий уровень

  Ответить  
 
 автор: FORMAT   (01.10.2008 в 17:28)   личное сообщение
 
 

Ну почему же? Ведь актуальными считаются записи с последней датой обновления. В запросе на выбор всех дел ставится условие - дела с максимальной датой. Тогда возвращается одна запись по делу.
И опять же, исходя из опыта, важно знать не только кто и когда изменил записи, но и что именно он поменял. А то могет быть ситуация, когда манагер говорит, что да,мол, изменял дело: в назначении платежа поставил точку в конце предложения, а что деньги в результате ушли на Канары, то извиняйте, это не я.

  Ответить  
 
 автор: Аленка   (01.10.2008 в 17:41)   личное сообщение
 
 

спорять, они тут, спорять, а я смотрю и... нет, кое-что я понимаю

  Ответить  
 
 автор: Дрюня   (01.10.2008 в 18:08)   личное сообщение
 
 

спорить о том, что больше нравиться: щи или борщ - дело неблагодарное.
в данном случае таблица не соответствует "Второй Нормальной Форме"
хотя и такое решение имеет право на жизнь

  Ответить  
 
 автор: Аленка   (01.10.2008 в 20:27)   личное сообщение
 
 

Да нет. Мы просто пока не понимаем друг друга.
У меня все таблицы соответствуют аж до четвертой нормальной формы, хотя и трех достаточно.
Дело в том, что мне ведь вовсе и не обязательно иметь историю. Мне достаточно в текущей записи видеть последнее изменение даты. То есть грубо говоря, есть Дата Выполнения. И есть поле Первоначальная_Дата_выполнения. Если они отличаются, значит пользователь несанкционированно изменил дату выполнения дела. Вот.
Проблема в том, что Первоначальная Дата выполнения должна быть равна той дате, которая была введена в поле Дата Выполнения первый раз. Все остальные изменения не должны сохраняться в поле Первоначальная Дата Выполнения. При этом мне даже промежуточные изменения не интересны. Только последнее. То есть все гораздо проще.
Только вот я не знаю, как сделать так, чтобы Первоначальная Дата ВЫполнения получала первое значение поля Дата выполнения, но при этом все остальные изменения чтобы не отражались в поле Первоначальная Дата выполнения.
Пока единственный вариант, который я вижу - это вводить вручную, но это очень неудобно, так как это тоже не дает необходимого контроля. Ведь я не буду знать, какая дата реально первоначальная, ведь не только я ввожу дела.

  Ответить  
 
 автор: FORMAT   (02.10.2008 в 11:30)   личное сообщение
 
 

При вводе в поле Дата выполнения проверяется поле Первоначальная дата выполнения.
Если Первоначальная дата выполнения IsNull, тогда данные заносятся в поле Первоначальная дата выполнения, Иначе - нет.

  Ответить  
 
 автор: Аленка   (02.10.2008 в 14:11)   личное сообщение
 
 

мне стыдно. почему я про IF не подумала?
сорри

  Ответить  
 
 автор: Аленка   (02.10.2008 в 15:12)   личное сообщение
 
 

Что я делаю неправильно?
IIf(IsNull([Поле1]);[Поле1]=[Дата_выполнения];"")
Если поле1 пустое, то в него помещается значение поля Дата_выполнения иначе оно остается в неизменном виде.

  Ответить  
 
 автор: Дрюня   (02.10.2008 в 15:29)   личное сообщение
 
 

неправильный синтаксис IIF
слева должен быть контрол, которому присваивается результат

Text = IIF(...

  Ответить  
 
 автор: Аленка   (02.10.2008 в 15:33)   личное сообщение
 
 

То есть
Поле1 = IIf(IsNull([Поле1]);[Поле1]=[Дата_выполнения];"")
Так что ли?

  Ответить  
 
 автор: Аленка   (02.10.2008 в 15:57)   личное сообщение
 
 

да нет. так вообще не то.
Вот я в запросе делаю так:
Поле1:IIf([IsNull(Поле1);[Дата_выполнения];"") - сообщает о циклической ошибке.
Если я пишу это выражение в форме в свободном поле, то почему-то это поле всегда воспринимается несвободным и соответственно вставляется значения из части False.
В любом случае, даже когда у меня и работает и синтаксис врод верный, получается, что при изменении даты она все равно вставляется в Мое поле.

СПАСИТЕ! как написать выражение, чтобы в поле1 вставлялось значение поля0 при первом его заполнении и чтобы все изменения более не сохранялись в поле1.
И где это лучше сделать все таки, в запросе или форме? И такое поле должно быть в таблице, или это делать с помощью свободных полей в запросе или в форме?
ПЛИЗ

  Ответить  
 
 автор: FORMAT   (02.10.2008 в 17:24)   личное сообщение
 
 

Private Sub Поле0_AfterUpdate()
If IsNull(Me.Поле1.Value) Then
Me.Поле1.Value = Me.Поле0.Value
End If
End Sub

  Ответить  
 
 автор: Аленка   (02.10.2008 в 17:34)   личное сообщение
 
 

С П А С И Б О!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!! огромное!

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList