powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Получить предыдущее значение поля
8 сообщений из 8, страница 1 из 1
Получить предыдущее значение поля
    #39735831
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно получить предыдущее значение поля.
Возникает несколько вопросов:
1) как проверить, что нажата кнопка вперед или назад?
2) как обойти ошибку 3021?
Пример бд прилагается, процедура называется «GetPreviousRec()».

___________________________________
Использую Microsoft Access 2010, 64 бит.

Спасибо каждому, кто мне когда-либо здесь помог и продолжает помогать.
...
Рейтинг: 0 / 0
Получить предыдущее значение поля
    #39735876
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23,
...
Рейтинг: 0 / 0
Получить предыдущее значение поля
    #39736256
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku ,
Спасибо за пример, но он работает несколько некорректно так сказать. Т.е. только тогда, когда записи требуется просматривать вперед, но если их просматривать назад, то значения меняются местами. См.скриншот, если текущее значение 5, то предыдущее должно быть 14, а у Вас 9.

Я выкладывала 2 версии: 2010 и пересохраненную в 2002-2003. У меня предыдущие значения записей просматриваются только если просматривать записи назад от последней к первой. Процедура «GetPreviousRec()» тоже отрабатывает в Form_Current.
Как сделать так же, но вперед я чета не врубаюсь?

Получается что в вашем случае, как и в моем, способ работает тоже только в одну сторону, а хотелось бы в обе стороны.
...
Рейтинг: 0 / 0
Получить предыдущее значение поля
    #39736261
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не получилось выложить скриншот: ссылка
...
Рейтинг: 0 / 0
Получить предыдущее значение поля
    #39736361
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтоб решить какую-либо задачу нужно,как минимум, понять её условия:таблица,грубо говоря,это "куча",без какого-либо упорядочивания,данных, в которых порядок появляется после сортировки по какому-либо полю и что Вы имеете ввиду говоря "предыдущая" или "следующая" запись лично мне не понятно(от слова совсем)
Я бы решал вашу задачу так:при создании новой записи записывал(значение по умолчанию) в поле "предыдущиеПоказания" значение "текущиеПоказания" из предыдущей записи,естессно с соответствующим отбором,например,по клиенту(или какому другому критерию-Вам виднее). Далее Вы элементарным запросом всегда узнаете показания на начало и конец заданного периода
...
Рейтинг: 0 / 0
Получить предыдущее значение поля
    #39736451
Eugene-LS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну придумалось нечто такое ...

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
Public Type TPrevValues
    lT01Val As Long
    lT01Date As Variant
    lT02Val As Long
    lT02Date As Variant
    lT03Val As Long
    lT03Date As Variant
End Type

Public Function GetPreviousValues(objForm As Form) As TPrevValues
Dim s$, vAdr, vID, vDate, i%
Dim rst As DAO.Recordset
    
On Error GoTo GetPreviousValues_Err
    If objForm!cbxАдрес.ListIndex = -1 Then GoTo GetPreviousValues_Bye
    
    vAdr = objForm!cbxАдрес 'ID Адреса
    vID = objForm!txtID     'ID Записи
    vDate = objForm!txtДата 'Дата Записи ...
    
    For i = 1 To 3
        s = "SELECT TOP 1 * FROM ЭлектроЭнергия" & _
        " WHERE Id<>" & Nz(vID, 0) & " AND Адрес=" & Nz(vAdr, 0) & _
        " AND Дата < " & Format$(Nz(vDate, 0), "\#mm\/dd\/yyyy\ hh:nn:ss#") & _
        " AND Nz([Т" & i & "])>0" & _
        " ORDER BY Дата DESC;"
        'AND Nz([Т1])+Nz([Т2])+Nz([Т3])>0
        'Debug.Print s
        Set rst = CurrentDb.OpenRecordset(s, dbOpenSnapshot)  'Только просмотр
        If rst.EOF = False Then
            With rst
                Select Case i
                Case 1
                    GetPreviousValues.lT01Val = Nz(!Т1, 0)
                    GetPreviousValues.lT01Date = !Дата
                Case 2
                    GetPreviousValues.lT02Val = Nz(!Т2, 0)
                    GetPreviousValues.lT02Date = !Дата
                Case 3
                    GetPreviousValues.lT03Val = Nz(!Т3, 0)
                    GetPreviousValues.lT03Date = !Дата
                End Select
            End With
        End If
    Next i
    
    
GetPreviousValues_Bye:
    On Error Resume Next
    Set rst = Nothing
    Err.Clear
    Exit Function
    
GetPreviousValues_Err:
    MsgBox "Error " & Err.Number & vbCrLf & Err.Description & vbCrLf & _
    "in Function [GetPreviousValues]" & vbCrLf & _
    "in Module []", vbCritical, "Error!"
    Resume GetPreviousValues_Bye
End Function



Ну и + в форме вызов функции ...
БД слегка подправил, зачем там Single (в показаниях)!? - дробные показания счётчика не учитываются ...
...
Рейтинг: 0 / 0
Получить предыдущее значение поля
    #39737122
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eugene-LSНу придумалось нечто такое ...

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
Public Type TPrevValues
    lT01Val As Long
    lT01Date As Variant
    lT02Val As Long
    lT02Date As Variant
    lT03Val As Long
    lT03Date As Variant
End Type

Public Function GetPreviousValues(objForm As Form) As TPrevValues
Dim s$, vAdr, vID, vDate, i%
Dim rst As DAO.Recordset
    
On Error GoTo GetPreviousValues_Err
    If objForm!cbxАдрес.ListIndex = -1 Then GoTo GetPreviousValues_Bye
    
    vAdr = objForm!cbxАдрес 'ID Адреса
    vID = objForm!txtID     'ID Записи
    vDate = objForm!txtДата 'Дата Записи ...
    
    For i = 1 To 3
        s = "SELECT TOP 1 * FROM ЭлектроЭнергия" & _
        " WHERE Id<>" & Nz(vID, 0) & " AND Адрес=" & Nz(vAdr, 0) & _
        " AND Дата < " & Format$(Nz(vDate, 0), "\#mm\/dd\/yyyy\ hh:nn:ss#") & _
        " AND Nz([Т" & i & "])>0" & _
        " ORDER BY Дата DESC;"
        'AND Nz([Т1])+Nz([Т2])+Nz([Т3])>0
        'Debug.Print s
        Set rst = CurrentDb.OpenRecordset(s, dbOpenSnapshot)  'Только просмотр
        If rst.EOF = False Then
            With rst
                Select Case i
                Case 1
                    GetPreviousValues.lT01Val = Nz(!Т1, 0)
                    GetPreviousValues.lT01Date = !Дата
                Case 2
                    GetPreviousValues.lT02Val = Nz(!Т2, 0)
                    GetPreviousValues.lT02Date = !Дата
                Case 3
                    GetPreviousValues.lT03Val = Nz(!Т3, 0)
                    GetPreviousValues.lT03Date = !Дата
                End Select
            End With
        End If
    Next i
    
    
GetPreviousValues_Bye:
    On Error Resume Next
    Set rst = Nothing
    Err.Clear
    Exit Function
    
GetPreviousValues_Err:
    MsgBox "Error " & Err.Number & vbCrLf & Err.Description & vbCrLf & _
    "in Function [GetPreviousValues]" & vbCrLf & _
    "in Module []", vbCritical, "Error!"
    Resume GetPreviousValues_Bye
End Function




Ну и + в форме вызов функции ...
БД слегка подправил, зачем там Single (в показаниях)!? - дробные показания счётчика не учитываются ...

https://www.sql.ru/forum/actualfile.aspx?id=21740658] Приложенный файл (ПолучитьПредыдущееЗначениеПоля_v02.zip - 65Kb)
Придумалось очень сложно, но главное что работает. Eugene-LS Спасибо Вам огромное!
...
Рейтинг: 0 / 0
Получить предыдущее значение поля
    #39737688
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eugene-LS ,
можете ли Вы помочь еще раз с аналогичным примером?
К сожалению своих мозгов в таком ключе увы не хватает.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Получить предыдущее значение поля
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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