Итак, у меня есть форма, в которой я могу выбрать файл 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