Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблема с циклом / 21 сообщений из 21, страница 1 из 1
10.02.2004, 14:42
    #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
10.02.2004, 14:44
    #32404261
AlexJuice
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с циклом
А вот это
Код: plaintext
1.
TempOrder1.MoveFirst
TempOrder2.MoveFirst

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

Код: plaintext
TempOrder1(i) <> TempOrder2(i)
...
Рейтинг: 0 / 0
10.02.2004, 14:55
    #32404294
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с циклом
select case true
case a=b, isnull(a) and isnull(b)
case else
'а тут то, что дожно исполниться в случае a<>b
end select
...
Рейтинг: 0 / 0
10.02.2004, 14:56
    #32404296
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с циклом
2 Vsevolod V
Раньше инсерты писал на рекордсетах - теперь апдейты - ну-ну:)
...
Рейтинг: 0 / 0
10.02.2004, 14:56
    #32404298
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с циклом
Kelme
Это тоже самое
...
Рейтинг: 0 / 0
10.02.2004, 14:57
    #32404300
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с циклом
Hummer
Прогресс на лицо! (или регресс?) ^^
...
Рейтинг: 0 / 0
10.02.2004, 14:59
    #32404305
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с циклом
2 Vsevolod V
No comments.
...
Рейтинг: 0 / 0
10.02.2004, 15:04
    #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
10.02.2004, 15:09
    #32404332
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с циклом
Код: plaintext
Case TempOrder1.Fields(i) = TempOrder2.Fields(i), IsNull(TempOrder1.Fields(i)) And IsNull(TempOrder2.Fields(i))


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

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

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


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