powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблема с циклом
21 сообщений из 21, страница 1 из 1
Проблема с циклом
    #32404258
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Dim TempOrder1 As DAO.RecordSet
Dim TempOrder2 As DAO.RecordSet
Dim TblOrder As DAO.RecordSet

Set TempOrder1 = CurrentDb.OpenRecordset( "__TEMP_order" )
Set TempOrder2 = CurrentDb.OpenRecordset( "temp_order" )

TempOrder1.MoveFirst
TempOrder2.MoveFirst
    For i =  0  To TempOrder1.Fields.Count -  1 
        If TempOrder1.Fields(i) <> TempOrder2.Fields(i) Then
            With TempOrder1
                .Edit
                    .Fields(i) = TempOrder2.Fields(i)
                .Update
            End With
    Set TblOrder = CurrentDb.OpenRecordset( "select * from orders where operid = '" & TempOrder1!OperId & "'" )
            With TblOrder
                .Edit
                    .Fields(i) = TempOrder1.Fields(i)
                .Update
                .Close
            End With
        End If
    Next

В этих рекордсетах содержится только одна запись.
Заведомо известно, что TempOrder1.Fields(6) <> TempOrder2.Fields(6). Однако при выполнении программа проскакивает участок кода, связанный с условием IF.
Пробовал пошагово выполнять цикл. Программа видит, что TempOrder1.Fields(6) <> TempOrder2.Fields(6).
...
Рейтинг: 0 / 0
Проблема с циклом
    #32404261
Фотография AlexJuice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот это
Код: plaintext
1.
TempOrder1.MoveFirst
TempOrder2.MoveFirst

зачем?
...
Рейтинг: 0 / 0
Проблема с циклом
    #32404264
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На всякий пожарный...
...
Рейтинг: 0 / 0
Проблема с циклом
    #32404273
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>На всякий пожарный...
При возникновении какой-либо ошибки в рекордсет могут попасть более чем одна запись. Но я уверен, что первая запись будет верной.
...
Рейтинг: 0 / 0
Проблема с циклом
    #32404278
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Может, одно из этих значений Null? Тогда любая проверка будет давать False.
...
Рейтинг: 0 / 0
Проблема с циклом
    #32404281
Фотография Polev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чему равны?
Как насчет
msgbox TempOrder1.Fields(6) & "-" & TempOrder2.Fields(6)
...
Рейтинг: 0 / 0
Проблема с циклом
    #32404288
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саныч - голова!
TempOrder1.Fields(6)=Null
Как мне тогда осуществлять эту проверку?
...
Рейтинг: 0 / 0
Проблема с циклом
    #32404289
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Кстати, насчет MoveFirst.
1. Если есть больше, чем одна запись, то OpenRecordset все равно становится на первую.
2. Первая запись при незаданной сортировке - это неизвестно какая.
...
Рейтинг: 0 / 0
Проблема с циклом
    #32404293
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так:

Код: plaintext
TempOrder1(i) <> TempOrder2(i)
...
Рейтинг: 0 / 0
Проблема с циклом
    #32404294
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
select case true
case a=b, isnull(a) and isnull(b)
case else
'а тут то, что дожно исполниться в случае a<>b
end select
...
Рейтинг: 0 / 0
Проблема с циклом
    #32404296
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Vsevolod V
Раньше инсерты писал на рекордсетах - теперь апдейты - ну-ну:)
...
Рейтинг: 0 / 0
Проблема с циклом
    #32404298
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kelme
Это тоже самое
...
Рейтинг: 0 / 0
Проблема с циклом
    #32404300
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hummer
Прогресс на лицо! (или регресс?) ^^
...
Рейтинг: 0 / 0
Проблема с циклом
    #32404305
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Vsevolod V
No comments.
...
Рейтинг: 0 / 0
Проблема с циклом
    #32404318
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
For i =  0  To TempOrder1.Fields.Count -  1 
        Select Case True
            Case TempOrder1.Fields(i) = TempOrder2.Fields(i), IsNull(TempOrder1.Fields(i)) And IsNull(TempOrder2.Fields(i))
            Case Else
                With TempOrder1
                    .Edit
                        .Fields(i) = TempOrder2.Fields(i)
                    .Update
                End With
        Set TblOrder = CurrentDb.OpenRecordset( "select * from orders where operid = '" & TempOrder1!OperId & "'" )
                With TblOrder
                    .Edit
                        .Fields(i) = TempOrder1.Fields(i)
                    .Update
                    .Close
                End With
        End Select
    Next

Invalid use of NULL
...
Рейтинг: 0 / 0
Проблема с циклом
    #32404332
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Case TempOrder1.Fields(i) = TempOrder2.Fields(i), IsNull(TempOrder1.Fields(i)) And IsNull(TempOrder2.Fields(i))


Конечно, а если только одно из полей IsNull, тогда это условие пролетает
...
Рейтинг: 0 / 0
Проблема с циклом
    #32404344
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Vsevolod V
Можно без Case, а с помощью функции Nz.

Nz(TempOrder1.Fields(i),0) - вернёт 0, если поле NULL.
...
Рейтинг: 0 / 0
Проблема с циклом
    #32404354
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hummer
А ведь ты прав!
---
Всем спасибо.
...
Рейтинг: 0 / 0
Проблема с циклом
    #32404361
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Vsevolod V
:)
Запросы изучи - быстрее будет:)
...
Рейтинг: 0 / 0
Проблема с циклом
    #32404365
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Kelmeесли только одно из полей IsNull, тогда это условие пролетает
Что и требуется. Программа идет обрабатывать случай "не равно".

2 Vsevolod V:
Пользоваться nz опасно. Оно вернет True, даже если одно из значений 0, а другое Null.
...
Рейтинг: 0 / 0
Проблема с циклом
    #32404374
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже об этом подумал и сделал так:
Nz(TempOrder1.Fields(i),рр)
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблема с циклом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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