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

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

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

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

Получается что в вашем случае, как и в моем, способ работает тоже только в одну сторону, а хотелось бы в обе стороны.
...
Рейтинг: 0 / 0
21.11.2018, 17:08
    #39736261
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить предыдущее значение поля
Не получилось выложить скриншот: ссылка
...
Рейтинг: 0 / 0
21.11.2018, 19:01
    #39736361
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить предыдущее значение поля
Чтоб решить какую-либо задачу нужно,как минимум, понять её условия:таблица,грубо говоря,это "куча",без какого-либо упорядочивания,данных, в которых порядок появляется после сортировки по какому-либо полю и что Вы имеете ввиду говоря "предыдущая" или "следующая" запись лично мне не понятно(от слова совсем)
Я бы решал вашу задачу так:при создании новой записи записывал(значение по умолчанию) в поле "предыдущиеПоказания" значение "текущиеПоказания" из предыдущей записи,естессно с соответствующим отбором,например,по клиенту(или какому другому критерию-Вам виднее). Далее Вы элементарным запросом всегда узнаете показания на начало и конец заданного периода
...
Рейтинг: 0 / 0
21.11.2018, 22:54
    #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
22.11.2018, 19:34
    #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
23.11.2018, 18:36
    #39737688
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить предыдущее значение поля
Eugene-LS ,
можете ли Вы помочь еще раз с аналогичным примером?
К сожалению своих мозгов в таком ключе увы не хватает.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Получить предыдущее значение поля / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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