Программирование MsAccess, VB, VBA

  

© am 1999-2010

Добро пожаловать, незнакомец! [вход]   

|  Домой   |   Новости   |   Гостевая   |   Форумы   |   Поиск   |   Страницы Авторов   |

Форумы/     Сообщений: всего:53643, сегодня:0, за неделю:31, за месяц:46, за год:1617
Использование СУБД Ms Access, программирование на VB, VBA
Данный форум посвящен различным вопросам создания приложений баз данных на платформах - Microsoft Access, Microsoft Visual Basic.

Public forum

  Home Ответить подписка В избранное Из избранного

Вычисляемое поле Профиль пользователяOl_Bak   
В форме каждый день заносятся в поля числовые данные. В некоторых полях информация заносится с нарастающим итогом.
Например:
Дата Поле 1
01.01.2010 10000
02.01.2010 11000
и.т.д.
Как в форме организовать поле, которое бы показывало прирост (разницу с предыдущей записью этого поля за прошлый день)
Для примера, возле поля 1 вставить поле 2
Дата Поле 1 Поле 2
01.01.2010 10000
02.01.2010 11000 1000
31.01.2010 13:35

Re:Вычисляемое поле Сергей Лалов   
Вас устроит вариант, если для расчета вам нужно будет нажимать кнопку на форме,чтобы посмотреть разницу по выделенной и предыдущей записи ? Или вам статистику с этими значениями разницы надо вести в таблице тоже. Данные должны только на форме отображаться,или же в таблицу тоже заноситься другим словом? Скажите, соберем вам образец и приложим.
31.01.2010 15:09

Re:Вычисляемое поле Профиль пользователяOl_Bak   
Да, должны заносится в таблицу.
31.01.2010 15:38

Re:Вычисляемое поле Профиль пользователяDenis V.   
Какая-то обратная у Вас задача. Обычно в таблицу записываются данные, просто данные. Например, приход чего-то столько-то, дата такая-то. Потом возникает необходимость просмотреть историю нарастающим итогом. А у Вас нарастающим итогом данные заносятся... точно на каждый день одна запись?
Можно составить запрос, в котором объединить таблицу саму с собой по условию, что даты отличаются на один день и расчитать разницу.
31.01.2010 21:01

Re:Вычисляемое поле Профиль пользователяOl_Bak   
Каждый день заносятся показатели оборудования, они идут с нарастанием. Необходимо на форме видеть величину прироста, потом от него будут производится некоторые вычисления.

Как объединить таблицу саму с собой
31.01.2010 21:28

Re:Вычисляемое поле Anonimous   
Доброй ночи, я подумал тут пару минут, решение получилось немного сумбурным, но работает. Примерно как сказал Денис, только я разложил все на составляющие. В качестве объединенных таблиц наглядно на форме в главной вставил таблицу1,и в подчиненной ее же, только условием для связи/отбора сделал не чистое поле, а значение дата-1, для этого создал отдельное поле на форме,назвал его poledata. и привязал подчиненную именно на это поле. Создал второе поле,назвал его poleznachenie, источником данных у которого является поле значение из подчиненной формы(которое предварительно уже отфильтровано по предыдущей дате). Итак, значение предыдущей даты известно, осталось отнять текущее от предыдущего.
Код простенький, повесил на кнопку:


Private Sub Кнопка37_Click()
Dim P As Integer
Dim D As Integer
P = Me.predznachenie
D = Me.значение
Me.разница = D - P
End Sub


Все, процесс пошел...образец приложил.
Можно вместо подчиненной формы написать выборку SQL прямо в коде, по этому же принципу, присвоить переменную этому выбранному значению,и провернуть то же самое чисто в коде, но пора спать уже)).
Образец БД прилагаю.
Присоединенный файл:Опыты.rar (Размер: 23478 байт, Скачиваний:51)
01.02.2010 02:18

Re:Вычисляемое поле Anonimous   
С Уважением,
ЛАлов Сергей
01.02.2010 02:19

Re:Вычисляемое поле Профиль пользователяas111   
Сергей думаю что решение немного не доработано. Что если
в какой-то из дней поле не будет заполнено, например в субботу
или воскресенье сотрудники наверняка отдыхают. Скорее надо ввести
нумерацию записей в запросе (см. примеры на сайте) и создать
запрос с двумя копиями полученной автонумерации, связав копии
уже по значению этого поля автонумерации - 1. Соответственно
в этом последнем запросе и вычислять разницу.
03.02.2010 12:28

Re:Вычисляемое поле Сергей Лалов   
Да,согласен, решение недоработано по следующим моментам:
во первых обработчик нулевых значений поля надо включить.
Добавить условие if которое в случае выходных дней обращается например к пятнице. Вообще предварительно проверяет день недели. Организуется просто ,при помощи функции WeekDay(тра та та)если к примеру функция выдает значение тиекущего дня =1 понедельнику, то обращение идет к пятнице прошлой недели. В принципе задача несложная. Если актуально еще вопрос,доработаю в коде и пришлю..
03.02.2010 13:19

Re:Вычисляемое поле Профиль пользователяOl_Bak   
актуально
03.02.2010 21:49

Re:Re:Вычисляемое поле Профиль пользователяВолшебник   
Re:Вычисляемое поле Ol_Bak

Да, должны заносится в таблицу.


Зачем хранить в таблицах то, что можно посчитать? Плохо это.
04.02.2010 11:41

Re:Вычисляемое поле Сергей Лалов   
Все сделал, можно пойти следующим путем, все сделал в коде.
Обработка на значение нулевого поля есть, если запись первая, то вопрос ошибки так же решается при помощи on error resume next- то есть курсор переходит на следующую запись и считает разницу второго и первого значения, то есть уворачивается от нулевого значения записи EOF.
Private Sub Кнопка18_Click()
On Error Resume Next
Dim A As Integer
Dim B As Integer
If IsNull(Me.значение) = True Then
MsgBox "Значение поля нулевое, заполните внесите необходимое значение," & _
"чтобы поле не оставалось нулевым, скорее всего вы находитесь на последней незаполненной записи"
Exit Sub
Else
DoCmd.GoToRecord , , acPrevious
A = Me.значение
 DoCmd.GoToRecord , , acNext
 B = (Me.значение - A)
 Me.разница = B
 Me.разница.Requery


End If
End Sub




Образец прилагаю,кушать подано!

04.02.2010 15:11

Re:Вычисляемое поле Сергей Лалов   
Subj
Присоединенный файл:образец.rar (Размер: 24665 байт, Скачиваний:18)
04.02.2010 15:13

Re:Вычисляемое поле Профиль пользователяOl_Bak   
Не знаю почему, но когда открываю форму образца в режиме конструктора, выкидывает ошибку
"Microsoft Office ACCESS обнаружил ошибку, Приложение бедет закрыто и т.д и т.п......"
04.02.2010 19:00

Re:Вычисляемое поле Сергей Лалов   
Попробуйте еще,у меня стоит офис 2010, может были библиотеки,которых нет у вас. Сбросил еще раз.
Присоединенный файл:Опыты.rar (Размер: 24524 байт, Скачиваний:14)
04.02.2010 19:14

Re:Вычисляемое поле Anonimous   
Ситуация аналогичная, у меня ACCESS 2003
04.02.2010 19:29

Re:Вычисляемое поле Сергей Лалов   
Сохранил в формате 2000, пробуйте.
Присоединенный файл:Опыты1.rar (Размер: 20800 байт, Скачиваний:19)
04.02.2010 20:04

Re:Вычисляемое поле Профиль пользователяOl_Bak   
Какая то фигня получается, так все работает, но когда хочу сделать форму подчиненной - вставляю поле, выкидывает туже ошибку
05.02.2010 16:05

Re:Вычисляемое поле Сергей Лалов   
ну я не смогу сказать почему у тебя в твой родной базе не работает код)) Смотри выше на процедуру и пиши по образу ее. Перешли мне свою БД, опиши в какой форме надо написать,помогу чем смогу.
05.02.2010 16:57

Re:Вычисляемое поле Сергей Лалов   
от образец с подчиненной табличной формой:
Private Sub Кнопка2_Click()
On Error Resume Next
Dim A As Integer
Dim B As Integer
Me.подчиненная_форма_Таблица1.SetFocus
If IsNull(Me.подчиненная_форма_Таблица1.Form.значение) = True Then
MsgBox "Значение поля нулевое, заполните внесите необходимое значение," & _
"чтобы поле не оставалось нулевым, скорее всего вы находитесь на последней незаполненной записи"
Exit Sub
Else
DoCmd.GoToRecord , , acPrevious
A = Me.подчиненная_форма_Таблица1.Form.значение
 DoCmd.GoToRecord , , acNext
 B = (Me.подчиненная_форма_Таблица1.Form![значение] - A)
 Me.подчиненная_форма_Таблица1![разница] = B
 Me.подчиненная_форма_Таблица1![разница].Requery


End If
End Sub




Образец БД с подчиненной также приложил
08.02.2010 16:16

Re:Вычисляемое поле Сергей Лалов   
Subj
Присоединенный файл:Опыты1.rar (Размер: 28835 байт, Скачиваний:11)
08.02.2010 16:19

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

Присылаю свою форму, на ней работают
Присоединенный файл:автотранспорт.zip (Размер: 16984 байт, Скачиваний:12)
08.02.2010 17:56

Re:Вычисляемое поле Сергей Лалов   
Все, решил вашу задачу, в приложении твоем БД с кнопкой действующей.
А так в чем заковыка была, значения у тебя большие и поэтому объявлять в коде надо не Dim integer а Dim Long.!
Прилагаю БД с решением.
Присоединенный файл:автотранспорт.rar (Размер: 19641 байт, Скачиваний:17)
08.02.2010 19:15

Re:Вычисляемое поле Anonimous   
Спасибо!!!!!!!!!!!
08.02.2010 22:40

  Home Ответить подписка В избранное Из избранного

  Rambler's Top100TopList