Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DlookUp на данных первого DLookUp показывает Null, Функция не показывает значения 
:(
    Опции темы
GalinaLina
Дата 17.10.2017, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 17.10.2017

Репутация: нет
Всего: нет



Привет народ!

Я не имею опыта работы с vba в access, потому очень надеюсь на вашу помощ.

У меня имеется главна таблица SendDaten, которая состоит из множества столбцов и 818 строк. В нее мне надо подтянуть данные из других таблиц (что я делаю при помощи функции DLookUp, которую вписываю между .Edit и .Update) и вот потом на основании данных,которые записались в мою таблицу SendDaten после .Update мне нужно написать еще один DLookUp критериями которого являются новые заполненные поля из таблицы SendDaten.

Что-то явно идет не так, поскольку критерии при наведении на них курсора отображаются, но результат функции = NULL. smile 
Что я делаю не так?

Вот код:

Код

Function Transportkostenberechnung()
'Funktion ermittelt die Transportkosten
'Variablen der Funktion festlegen
Dim Snd_land As String
Dim Snd_Ort_M As String
Dim snd_plz_M As Double
Dim empf_land As String
Dim empf_ort As String
Dim empf_plz As Double
Dim ldm As Double
Dim brgew As Double
Dim tbl_ZuordnGeb As DAO.Recordset
Dim gebietsnr As Double
Dim tbl_ZuordnZielreg As DAO.Recordset
Dim zielreg As Double


Dim db As DAO.Database

Dim tbl_SendDaten As DAO.Recordset

Set db = CurrentDb()

Set tbl_SendDaten = db.OpenRecordset("Sendungsdat", dbOpenDynaset)
Set tbl_ZuordnGeb = db.OpenRecordset("Zuordnung_Gebiet", dbOpenDynaset)
Set tbl_ZuordnZielreg = db.OpenRecordset("Zuordnung_Zielregion", dbOpenDynaset)

Dim volumengewicht As Double
Dim frachtpfl_gew As Double
Dim frachtpfl_gew1 As Double
Dim frachtpfl_gew2 As Double
Dim Lademeter As Double
Dim Zielregname As String
Dim Gebietsnummer As Double
Dim Transportmodus As String
Dim LGZuschl As Double



    
    tbl_SendDaten.MoveFirst

    Do Until tbl_SendDaten.EOF = True
    'Gewichte berechnen
             volumengewicht = tbl_SendDaten.Fields("Lademeter") * 1500
             brgew = tbl_SendDaten.Fields("brgew")
    'Gewichte aufrunden
             frachtpfl_gew1 = -100 * Int(volumengewicht / -100)
             frachtpfl_gew2 = -100 * Int(brgew / -100)
    'Gewichtsprьfung and display
                 If tbl_SendDaten.Fields("volumengewicht") > tbl_SendDaten.Fields("brgew") Then
    
                     tbl_SendDaten.Edit
                     tbl_SendDaten.Fields("volumengewicht") = volumengewicht
                     tbl_SendDaten.Fields("frachtpfl_gew") = frachtpfl_gew1
        
                          If frachtpfl_gew1 < 20001 Then
                          tbl_SendDaten.Fields("Transportmodus") = "LTL"
                          Else
                          tbl_SendDaten.Fields("Transportmodus") = "FTL"
                          End If
        

        tbl_SendDaten.Fields("gebietsnr") = DLookup("[Gebietsnummer]", "Zuordnung_Gebiet", "Land = '" & tbl_SendDaten.Fields("Empf_Land") & "' and PLZ_min <= " & Val(tbl_SendDaten.Fields("Empf_PLZ")) & " and PLZ_max >= " & Val(tbl_SendDaten.Fields("Empf_PLZ")) & "")
        Debug.Print DLookup("[Gebietsnummer]", "Zuordnung_Gebiet", "Land = '" & tbl_SendDaten.Fields("Empf_Land") & "' and PLZ_min <= " & Val(tbl_SendDaten.Fields("Empf_PLZ")) & " and PLZ_max >= " & Val(tbl_SendDaten.Fields("Empf_PLZ")) & "")
        
        tbl_SendDaten.Fields("zielreg") = DLookup("[Zielregion]", "Zuordnung_Zielregion", "PLZ = " & tbl_SendDaten.Fields("Snd_PLZ_M") & " and Stadt = '" & tbl_SendDaten.Fields("Snd_Ort_M") & "'")
        Debug.Print DLookup("[Zielregion]", "Zuordnung_Zielregion", "PLZ = " & tbl_SendDaten.Fields("Snd_PLZ_M") & " and Stadt = '" & tbl_SendDaten.Fields("Snd_Ort_M") & "'")
        tbl_SendDaten.Update
        
                Zielregname = tbl_SendDaten.Fields("zielreg")
                Gebietsnummer = tbl_SendDaten.Fields("gebietsnr")
                Transportmodus = tbl_SendDaten.Fields("Transportmodus")
                
                If tbl_SendDaten.Fields("Transportmodus") = "LTL" Then
                tbl_SendDaten.Edit
                tbl_SendDaten.Fields("LGZuschl") = DLookup("[Gebietszuschlag]", "Leergutzuschlдge", "Gebietsnummer = " & Gebietsnummer & " and Versandregion = '" & Zielregname & "' and Transportmodus = '" & Transportmodus & "'")
                Debug.Print DLookup("[Gebietszuschlag]", "Leergutzuschlдge", "Gebietsnummer = " & Gebietsnummer & " and Versandregion = '" & Zielregname & "' and Transportmodus = '" & Transportmodus & "'")
                tbl_SendDaten.Update
                Else
                tbl_SendDaten.Edit
                tbl_SendDaten.Fields("LGZuschl") = DLookup("[Gebietszuschlag]", "Leergutzuschlдge", "Gebietsnummer = " & Gebietsnummer & " and Versandregion = '" & Zielregname & "' and Transportmodus = '" & Transportmodus & "'")
                Debug.Print DLookup("[Gebietszuschlag]", "Leergutzuschlдge", "Gebietsnummer = " & Gebietsnummer & " and Versandregion = '" & Zielregname & "' and Transportmodus = '" & Transportmodus & "'")
                tbl_SendDaten.Update
                End If
                tbl_SendDaten.MoveNext

        
    Else
    
        tbl_SendDaten.Edit
        tbl_SendDaten.Fields("volumengewicht") = volumengewicht
        tbl_SendDaten.Fields("frachtpfl_gew") = frachtpfl_gew2
        
               If frachtpfl_gew2 < 20001 Then
               tbl_SendDaten.Fields("Transportmodus") = "LTL"
               Else
               tbl_SendDaten.Fields("Transportmodus") = "FTL"
               End If
        
        tbl_SendDaten.Fields("gebietsnr") = DLookup("[Gebietsnummer]", "Zuordnung_Gebiet", "Land = '" & tbl_SendDaten.Fields("Empf_Land") & "' and PLZ_min <= " & Val(tbl_SendDaten.Fields("Empf_PLZ")) & " and PLZ_max >= " & Val(tbl_SendDaten.Fields("Empf_PLZ")) & "")
        tbl_SendDaten.Fields("zielreg") = DLookup("[Zielregion]", "Zuordnung_Zielregion", "PLZ = " & tbl_SendDaten.Fields("Snd_PLZ_M") & " and Stadt = '" & tbl_SendDaten.Fields("Snd_Ort_M") & "'")
      
        tbl_SendDaten.Update
        
                Zielregname = tbl_SendDaten.Fields("zielreg")
                Gebietsnummer = tbl_SendDaten.Fields("gebietsnr")
                Transportmodus = tbl_SendDaten.Fields("Transportmodus")
                
                If tbl_SendDaten.Fields("Transportmodus") = "FTL" Then
                tbl_SendDaten.Edit
                tbl_SendDaten.Fields("LGZuschl") = DLookup("[Gebietszuschlag]", "Leergutzuschlдge", "Gebietsnummer = " & Gebietsnummer & " and Versandregion = '" & Zielregname & "' and Transportmodus = '" & Transportmodus & "'")
                Debug.Print DLookup("[Gebietszuschlag]", "Leergutzuschlдge", "Gebietsnummer = " & Gebietsnummer & " and Versandregion = '" & Zielregname & "' and Transportmodus = '" & Transportmodus & "'")
                tbl_SendDaten.Update
                Else
                tbl_SendDaten.Edit
              
                tbl_SendDaten.Fields("LGZuschl") = DLookup("[Gebietszuschlag]", "Leergutzuschlдge", "Gebietsnummer = " & Gebietsnummer & " and Versandregion = '" & Zielregname & "' and Transportmodus = '" & Transportmodus & "'")
                Debug.Print DLookup("[Gebietszuschlag]", "Leergutzuschlдge", "Gebietsnummer = " & Gebietsnummer & " and Versandregion = '" & Zielregname & "' and Transportmodus = '" & Transportmodus & "'")
                tbl_SendDaten.Update
                End If

    End If
    
    tbl_SendDaten.MoveNext
Loop
End Function


Функция выдает значение NULL начиная со строчки номер 77 smile 
Спасибо за советы!!!

PM MAIL   Вверх
Akina
Дата 17.10.2017, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 453



Перепишите код так, чтобы видеть, что именно Вы выполняете. Скажем, тот же оператор 77 перепишите так:
Код

' было
tbl_SendDaten.Fields("LGZuschl") = DLookup("[Gebietszuschlag]", "Leergutzuschlдge", "Gebietsnummer = " & Gebietsnummer & " and Versandregion = '" & Zielregname & "' and Transportmodus = '" & Transportmodus & "'")
' стало
strWhere = "Gebietsnummer = " & Gebietsnummer & " and Versandregion = '" & Zielregname & "' and Transportmodus = '" & Transportmodus & "'"
Debug.Print "Operator 77 WHERE Condition is -=" & strWhere & "=-"
tbl_SendDaten.Fields("LGZuschl") = DLookup("[Gebietszuschlag]", "Leergutzuschlдge", strWhere)

и посмотрите, насколько правильно с точки зрения структуры таблицы и SQL-синтаксиса построенное условие.
Особое внимание уделите кавычкам - вдруг они имеются в подставляемых значениях...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
GalinaLina
Дата 18.10.2017, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 17.10.2017

Репутация: нет
Всего: нет



Привет ребята! 
Мне помогли найти ошибку!  smile 

Она не в коде. DLookUp написан правильно, но вот его критерий Versandregion был ответственный за то,что значение не подтягивалось. В таблице "Leergutzuschlдge"в которой он обрабатывал столбик Versandregion данные были написаны вот так: "DE Süd", а в критерий Versandregion = '" & Zielregname & "' подтягивались значения в форме "DE Sued". Поэтому не работало.

Вывод: для функции DLookUp важно проверить,чтоб данные во всех таблицах, с которыми вы работаете совпадали smile  Не всегда сразу заметно.
PM MAIL   Вверх
Akina
Дата 18.10.2017, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 453



Да я бы вообще рекомендовал отказаться от DLookUp, ибо каждое обращение к ней вызывает выполнение полноценного SQL-запроса. Более того, я бы рекомендовал в принципе пересмотреть логику - ну бред же править по одному полю, да ещё таская туда-сюда данные, когда можно одним запросом внести сразу все изменения.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.1080 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.