powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вычисляемое поле по дате
7 сообщений из 7, страница 1 из 1
Вычисляемое поле по дате
    #39223155
nnaaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица, даны 3 поля: Imya, Chislo, Data.
Данные поступают нарастающим итогом: 01.01.1990 imya1 получил 10 печенек, 07.05.1990 imya1 получил 15 печенек (т.е. в период с 01.01.1990 по 07.05.1990 ему дали еще 5 печенек), а 20.09.1991 imya1 получил уже 25 печенек (было 15 печенек, а получил еще 10).
Аналогично с imya2: 01.01.1990 imya1 получил 10 печенек, 07.05.1990 imya2 получил 50 печенек.
Нужно выводить разницу числа этих печенек в столбце Raznica исходя из сравнения дат. Для первой даты 01.01.1990 - ничего не делать. Следующая дата (07.05.1990) должна сравниваться с предыдущей (01.01.1990) и выводиться разница печенек: 15 - 10 = 5.
Предположил, что нужно сделать столбец Raznica как вычисляемое поле, но как посчитать разницу печенек исходя из дат.
...
Рейтинг: 0 / 0
Вычисляемое поле по дате
    #39223231
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nnaaa,

1. Лучше с такими вопросами сразу обращаться в формум Access , т.к. задача здесь даже не для VBA

2. Наработка моя ниже. По хорошему нужно разово вычислять и повесить на триггер после вставки и обновления, но в Access нет триггеров...
Код: sql
1.
2.
3.
4.
5.
6.
7.
select П1.Код, П1.Imya, П1.Chislo, П1.Data, П1.Chislo - (select П3.Chislo from Печеньки as П3
                                                         where П3.Imya = П1.Imya
                                                           and П3.Data = (select Max(Data)
                                                                          from Печеньки as П2
                                                                          where П2.Imya = П1.Imya and П1.Data > П2.Data)) as Разница
from Печеньки as П1
order by П1.Imya, П1.Data asc



Модератор: Тема перенесена из форума "Visual Basic".
...
Рейтинг: 0 / 0
Вычисляемое поле по дате
    #39223495
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLADно в Access нет триггеров...
Аналог триггеров (Data Macro) появились в 2010. Но сложных вычислений лучше там не делать, сильно замедляет работу.
...
Рейтинг: 0 / 0
Вычисляемое поле по дате
    #39229087
nnaaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLAD,
А как сделать так: если после этих условий поле Разница остается пустым, то заполнить его значением из поля Chislo?
Попробовал так, выдает ошибку "Ошибочное или пропущенное зарезервированное слово или аргумент в инструкции Select или неверная пунктуация":
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select П1.Код, П1.Imya, П1.Chislo, П1.Data, П1.Chislo - (select П3.Chislo from Печеньки as П3
                                                         where П3.Imya = П1.Imya
                                                           and П3.Data = (select Max(Data)
                                                                          from Печеньки as П2
                                                                          where П2.Imya = П1.Imya and П1.Data > П2.Data)) as Разница
And IIF(П1.Разница = ""; П1.Разница = П1.Chislo ; П1.Разница = П1.Разница)
from Печеньки as П1
order by П1.Imya, П1.Data asc
...
Рейтинг: 0 / 0
Вычисляемое поле по дате
    #39229315
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чё-то, мне кажется, что Вы затеяли какую-то ерунду.
А в принципе как-то так:
Sub my()
Dim rs As DAO.Recordset, strSQL, rs1 As DAO.Recordset, strSQL1, a
strSQL = "SELECT Imya FROM печеньки GROUP BY Imya"
Set rs = CurrentDb.OpenRecordset(strSQL)
Do Until rs.EOF
strSQL1 = "SELECT chislo, Data, Raznica FROM печеньки WHERE imya='" & rs!imya & "' ORDER BY Data"
Set rs1 = CurrentDb.OpenRecordset(strSQL1)
a=0
Do Until rs1.EOF
rs1.Edit
rs1!raznica = rs1!chislo - a
a = rs1!chislo
rs1.Update
rs1.MoveNext
Loop
rs.MoveNext
Loop
End Sub
...
Рейтинг: 0 / 0
Вычисляемое поле по дате
    #39229318
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон. Забыл SRC
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Sub my()
Dim rs As DAO.Recordset, strSQL, rs1 As DAO.Recordset, strSQL1, a
strSQL = "SELECT Imya FROM печеньки GROUP BY Imya"
Set rs = CurrentDb.OpenRecordset(strSQL)
Do Until rs.EOF
    strSQL1 = "SELECT chislo, Data, Raznica FROM печеньки WHERE imya='" & rs!imya & "' ORDER BY  Data"
    Set rs1 = CurrentDb.OpenRecordset(strSQL1)
            a=0
        Do Until rs1.EOF
            rs1.Edit
                rs1!raznica = rs1!chislo - a
                a = rs1!chislo
            rs1.Update
            rs1.MoveNext
        Loop
    rs.MoveNext
Loop
End Sub
...
Рейтинг: 0 / 0
Вычисляемое поле по дате
    #39253243
nnaaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код запроса VSVLAD работает просто идеально, но для большой таблицы он производит обработку медленно, можно ли как-то оптимизировать этот код?
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вычисляемое поле по дате
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]