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

Форум: MS ACCESS

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

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

 
 

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

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

тема: формула в свободном поле
 
 автор: Гоблин   (20.03.2012 в 21:29)   личное сообщение
 
 

Все привет. С вопросом затупил. Есть свободная форма, в которой свободные поля. Как бы сделать так, что бы в одном свободном поле была формула. Типа в Поле3 должно быть =[Поле1]+[Поле2]. Понятно, что в конструкторе можно задать в свойствах данные через построитель выражений, но это не катит. Хочу в таблицу вписывать формулу для поля и при открытии типа как Rowsuorce присваивать только рекордсетом.
Вопросов бы не было, если бы Rowsuoce работал. Но раз есть свойство данные, стало быть есть и программный способ задавать формулу. Вопрос как?
Получается если при открытии назначить кодом [Поле3]=[Поле1]+[Поле2], но при этом если данные в поле 1 и 2 изменить, то не считает, в отличае, если это же самое задать в построителе выражений. Вот ведь задача.

  Ответить  
 
 автор: Дядя Федор   (21.03.2012 в 07:48)   личное сообщение
 
 

сделайте запрос источником данных формы где ЗНАЧЕНИЕ=[Поле1]+[Поле2], ЗНАЧЕНИЕ - источник для Поля3

  Ответить  
 
 автор: snipe   (21.03.2012 в 08:53)   личное сообщение
 
 

Пишем функцию

public function summPole( a1 as double, a2 as double) as double
summPole=a1+a2
end function

при програмном заполнении (через рекордсет)
'dim rs as recordset

me!поле3=summPole(nz(rs.fields(0),0),nz(rs.fields(1),0))

и на событие после обновления поля1 и поля2 вешаем
if summPole(nz(me!поле1,0),nz(me!поле2,0))=0 then me!поле3=null else me!поле3=summPole(nz(me!поле1,0),nz(me!поле2,0))

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

Спасибо. С функцией заманчиво выглядит, только идея в том, что бы одну и ту же форму открывать при разных условиях, и в одном и том же поле соответственно появлялась разная формула, в зависимости от той, что стоит в справочнике. Количество полей соответственно тоже меняется и в расчетах участвуют не только те ячейки, что в строке, но и из разных строк. Тут механизм требуется разработать. А+Б - это для простоты эксперимента. Буду как-то модернизировать идею с функцией.

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

Вопрос мог бы звучать примерно так: Как задать свойство "Данные" свободному полю в свободной форме? Rowsource не действует почему-то.

  Ответить  
 
 автор: Йожык   (21.03.2012 в 22:58)   личное сообщение
 
 

кажется, ControlSource
Ну и,типо, Поле.КонтролСос="=Поле1+Поле2"

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

Me.Поле4.ControlSource = "=[Поле0] + [Поле2]"

Вот это то, что надо. Так и знал, что один какой-то оператор нужен. Еж, спасибо. Теперь море функций в топку. Форма форматируется по ходу открытия, согласно данных рекордсета справочной таблицы. Вводятся цифры, по ходу работы вычисления идут по формулам справочных данных, при закрытии рекордсет добавляет (или меняет) данные в рабочей таблице.

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