Не удается обновить поля таблицы в зависимости от значения по номеру - PullRequest
1 голос
/ 05 марта 2020

Итак, у меня есть форма, в которой я могу выбрать файл Excel, он создаст таблицу, которая является точной копией этого файла, а затем попытается сопоставить поля из этой таблицы с таблицей проекта и обновить соответствующие поля. Иногда проблема заключается в том, что поле проектов не обновляется. В качестве примера существующее значение составляет 1,0319. Если мой файл Excel имеет 1.026, он не будет обновляться. 1.026 действительно появляется во временной таблице. Но если я изменю его на 1.016 в Excel, он обновится. Затем, если я вернусь к 1.026, он обновится. Однако, если я изменю его на 1.0319, исходное значение, оно не будет обновляться. Это, честно говоря, сбило меня с толку, и мне интересно, действительно ли это ошибка в доступе или VB. Вот код, я немного упростил его, удалив другие поля, для которых он проверяет, и загрузку Excel, так как она отлично работает.

Dim sSQL As String
Dim db As Database
Dim recTemp, recProj As Recordset    
Dim intUpdatedRecordCount As Integer
Dim bUpdatedRecord As Boolean
Dim sSelectedFieldsQuery As String  

sSelectedFieldsQuery = "P_Ratio"

'Update Generator data with imported table
Set db = CurrentDb()  

sSQL = "SELECT TempImpProjRes.Desc, TempImpProjRes.ElemName, TempImpProjRes.BusA, TempImpProjRes.ID, TempImpProjRes.ProjID, " & _
                    "TempImpProjRes.ElemID, " & sSelectedFieldsQuery & " FROM TempImpProjRes"

Set recTemp = db.OpenRecordset(sSQL, dbOpenDynaset, dbConsistent)

'begin to loop over imported data
If recTemp.RecordCount > 0 Then
    recTemp.MoveFirst
    Do While Not recTemp.EOF
        sSQL = "SELECT Projects.ProjID, Projects.ElemID,"Projects.P_Ratio FROM Projects WHERE Projects.ProjID=" & recTemp!ProjID & " AND Projects.ElemID=" & recTemp!ElemID"
        Set recProj = db.OpenRecordset(sSQL, dbOpenDynaset, dbConsistent)

            intUpdatedRecordCount = 0
            bUpdatedRecord = False                                           
            bUpdatedRecord = Not CDbl(Format(recProj!P_Ratio, "0.00")) = CDbl(Format(recTemp!P_Ratio, "0.00"))
            intUpdatedRecordCount = intUpdatedRecordCount + BooleanToInt(bUpdatedRecord)                

            'if any field has been updated then we need to update the respective value in the Projects table
            If intUpdatedRecordCount > 0 Then
                recProj.Edit
                recProj!P_Ratio = CDbl(Format(recTemp!P_Ratio, "0.0000"))
                recProj!Updated = Date
                recProj.Update
            End If

        recProj.Close
        Set recProj = Nothing
        recTemp.MoveNext
    Loop
End If

recTemp.Close
db.Close
Set recTemp = Nothing
Set db = Nothing  
...