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

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

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

 
 

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

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

тема: Модули
 
 автор: Гоблин   (14.04.2012 в 13:46)   личное сообщение
 
 

Народ, подскажите плиз. Есть функция в модуле. Есть свободная форма с кучей полей. При изменении (после обновления) какого-либо поля необходимо запускать эту функцию. Получается, что на каждом поле надо ставить код Call mayfunc
А на какое событие формы можно поставить один раз этот код, что бы он действовал для всех полей.

  Ответить  
 
 автор: Дядя Федор   (14.04.2012 в 17:14)   личное сообщение
 
 

А что она делает? Может ее в запрос поместить (который источник данных)?
Или попробовать на события формы.

  Ответить  
 
 автор: Гоблин   (14.04.2012 в 19:11)   личное сообщение
 
 

В данном случае хотелось бы использовать условное форматирование в свободной форме по числовым ячейкам. А оно зараза работает, только не так как надо. Условие ставлю <2 отображать зеленым, а если >5 отображать красным, между ними - черным. Но. По какой-то причине получается, что 20 больше 100. Видимо из-за форматов как по текстовому полю получается. И ничего не берет. Тогда обратился к VBA накатал функцию

For i = 1 To CInt(Forms(namform).V1.Caption) + CInt(Forms(namform).V2.Caption) + CInt(Forms(namform).V3.Caption) + CInt(Forms(namform).V4.Caption)
If Forms(namform)("L" & i) < CInt(Forms(namform)("minL" & i).Caption) Then
Forms(namform)("L" & i).ForeColor = 172839
Else
If Forms(namform)("L" & i) > CInt(Forms(namform)("maxL" & i).Caption) Then
Forms(namform)("L" & i).ForeColor = 255
Else
If Forms(namform)("L" & i) > CInt(Forms(namform)("minL" & i).Caption) And Forms(namform)("L" & i) < CInt(Forms(namform)("maxL" & i).Caption) Then
Forms(namform)("L" & i).ForeColor = 135468
Else
End If
End If
End If

Next i
где namform - глобальная переменная, которой присваивается имя открываемой формы. Далее там свои замороки... В общем работает, обращаясь к установленным заранее в формах (а их несколько, с разным количеством полей) V1- количество строк на вкладке и т.д. (у меня каждая вкладка работает как отдельная форма.. не важно) НО на каждое поле надо ставить запуск этой функции. Вот и хотел бы запускать функцию как-то один раз на форме, что бы потом вводить данные в поля, и все как-то работало.
События на форме "после обновления" , "введены изменения" и др не помогают. ХЗ почему. Может какой-то модуль класса формы или хрен знает что-то должно быть, что бы одним махом.

Хотя это все эксперименты. А с запросом на какую-нибудь ленточную форму это легче всего. А если формулы разные, да еще результат одной строки должен участвовать в вычислениях другой строки - запрос не поможет. Пока работает Eval, но это тоже не то.

  Ответить  
 
 автор: час   (15.04.2012 в 02:09)   личное сообщение
 
 

Может тебе на форму - кнопочку положить - обновить данные.
И на закрытие формы обязвтельно Call My_Function

  Ответить  
 
 автор: Гоблин   (15.04.2012 в 14:23)   личное сообщение
 
 

Не. Не катит. Все должно быть без лишних кнопок. Да в принципе хрен с ним. На каждое поле поставлю запуск функции. Остался один вопрос. Почему условное форматирование работает не правильно. Хоть форматы меняй, хоть что делай. Ладно, нет худо без добра. Что-то да получится.

  Ответить  
 
 автор: snipe   (15.04.2012 в 15:41)   личное сообщение
 
 

Условное форматирование тормозит и заметно

  Ответить  
 
 автор: Дядя Федор   (15.04.2012 в 16:24)   личное сообщение
 
 

Не согласен.
У нас ввели новый сервер.
Windows 8
Так вот.
С условным форматированием при запуске приложения работает гораздо быстрее чем с "подложенными полями"
Причем,если сеанс в терминале - работает одинаково.
Если с "иконки" (там есть такой режим) разница заметна.
Прорисовка?

  Ответить  
 
 автор: snipe   (15.04.2012 в 17:16)   личное сообщение
 
 

у меня на одном поле висело три условия причем база работает как бы локально (т.е. вытягивает инфу из SQL в себя и потом работает с этой инфой как со своей)
при отображении возникало торможение с покраской этого поля т.е. сначала появлялась подформа в табличном виде а через некоторое время цветовая раскраска
пришлось отказаться
сейчас более значимая информация находится сверху таблицы (через сортировку сделана) - т.е. в том месте где юзер еще не уставшими глазами смотрит

  Ответить  
 
 автор: Анатолий (Киев)   (17.04.2012 в 13:18)   личное сообщение
 
 


Почему условное форматирование работает не правильно. Хоть форматы меняй, хоть что делай.


Если поле на форме - свободное, то Акс считает его текстовым. Хотя странно, что числовой формат не учитывается. Формат даты учитывается правильно.

Все же вам лучше использовать условное форматирование, только в выражении применить функцию Val, т.к. поле может быть и пустым.

В вашем примере используется св-во Caption, оно есть только у элементов 2Надпись" и оно - текстовое. Что это? Как у вас выглядит неработающее выражение в условном формате?

  Ответить  
 
 автор: Гоблин   (17.04.2012 в 18:48)   личное сообщение
 
 

Точто так. Caption потому, что на форме стоят 4 скрытые надписи, указывающие количество строк на различных вкладках. Эти надписи используются в функции.
В условном форматировании пытался вставить выражение через CInt - тоже не помогло (не понял почему, но акс заругался) Val применить не догадался. Ща пошел пробовать.

ЕС! Заработало.

Все это эксперименты. Хочу вместо многих форм сделать одну, что бы форматировалась при открытии и отрабатывала за все формы согласно справочной таблицы. При этом форма должна быть свободной, и формулы из справки тащила. А при закрытии все данные вычислений добавлялись в таблицу (и по ходу изменялись те, что были изменены) Все это в разрозненном виде есть, а в один никак не слеплю.

  Ответить  
 
 автор: Гоблин   (30.04.2012 в 20:42)   личное сообщение
 
 

Видимо рано возрадовался. С val работает. В условном форматировании ставлю выражение [Поле1]>val(2,3)
Однако, не корректно. В некоторых случаях врет. И вот тут-то нашел причину. С запятой не дружит. Если ставлю в поле дробное число через запятую - врет, считает его целым. Если через точку, то все ОК.
Теперь вопрос. Это получается, что после обновления поля необходимо ставить функцию с циклом, пробегать по полю, выискивать запятую, менять ее на точку, затем сравнивать результат с эталоном и после этого принимать решение на форматирование.
Может что проще есть? Че-та я пока ничего другого не соображу. Да и через точку - не по-русски как-то.

  Ответить  
 
 автор: Гоблин   (30.04.2012 в 21:03)   личное сообщение
 
 

Воистину форум волшебный. Мучился хз сколько. Спросил и на те в который раз. Озарение
Val(Replace(Me.Поле, ",", ".")) ну и далее... и все.

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