代码如下,数据原本可以运行,替换后就报BOF 和EOF错误,调试时指向Movefirst有问题。
Sub DInput()
    Dim i As Integer, j As Integer    ReDim ObsDP(1 To Nsc, 1 To TS), ObsDQ(1 To TS), ObsDE(1 To TS)  '以一个流量站,一个蒸发站为例
    
    With Rd
        .Open "select * from [ObsDailyP-" + CStr(StationName) + "] where [dt] between " & LongST & " and " & LongET & " order by [dt] asc", ConnectSys, adOpenStatic, adLockReadOnly
        .MoveFirst '这里提示错误
        If .RecordCount <> TS Then
            MsgBox "雨量资料缺失,请检查!"
            .Close
            Exit Sub
        End If
        i = 1
        Do
            For j = 1 To Nsc
                If IsNull(Rd(SName(j))) Then
                    ObsDP(j, i) = 0
                Else
                    ObsDP(j, i) = Rd(SName(j))
                End If
            Next j
            .MoveNext
            i = i + 1
        Loop Until .EOF
        .Close
        
        MaxOQ = -9999#
        SumOQ = 0
        .Open "select * from [ObsDailyQ-" + CStr(StationName) + "] where [dt] between " & LongST & " and " & LongET & " order by [dt] asc", ConnectSys, adOpenStatic, adLockReadOnly
        .MoveFirst
        If .RecordCount <> TS Then
            MsgBox "流量资料缺失,请检查!"
            .Close
            Exit Sub
        End If
        i = 1
        Do
            If IsNull(Rd(1)) Then
                ObsDQ(i) = 0
            Else
                ObsDQ(i) = Rd(1)
            End If
            If ObsDQ(i) > MaxOQ Then
                MaxOQ = ObsDQ(i)
                ObsI = i
            End If
            SumOQ = SumOQ + ObsDQ(i)
            .MoveNext
            i = i + 1
        Loop Until .EOF
        .Close
        
        .Open "select * from [ObsDailyE-" + CStr(StationName) + "] where [Dt] between " & LongST & " and " & LongET & " order by [dt] asc", ConnectSys, adOpenStatic, adLockReadOnly
        .MoveFirst
        If .RecordCount <> TS Then
            MsgBox "蒸发资料缺失,请检查!"
            .Close
            Exit Sub
        End If
        i = 1
        Do
            If IsNull(Rd(1)) Then
                ObsDE(i) = 0
            Else
                ObsDE(i) = Rd(1)
            End If
            .MoveNext
            i = i + 1
        Loop Until .EOF
        .Close
        
    End With
    
    ReDim AvgP(1 To TS)
    For i = 1 To TS
        AvgP(i) = 0
        For j = 1 To Nsc
            AvgP(i) = AvgP(i) + ObsDP(j, i) * F(j)       '每日平均雨量
        Next j
    Next i
    
End SubSub SaveDResults(ByVal NEi As Integer)
    Dim i As Integer, j As Integer, NC As Single
    Dim AvgOQ As Single, ObsRD As Single, SimRD As Single
    Dim ErQ As Single, ErR As Single
    
    AvgOQ = SumOQ / TS
    ObsRD = 0
    SimRD = 0
    SumLOSQ = 0
    SumLOQ = 0
    For i = 1 To TS
        ObsRD = ObsRD + (ObsDQ(i) - AvgOQ) ^ 2
        SimRD = SimRD + (DQResult(i) - ObsDQ(i)) ^ 2
        If ObsDQ(i) = 0 Or DQResult(i) = 0 Then
            SumLOSQ = SumLOSQ
        Else
            SumLOSQ = SumLOSQ + Abs(Log(ObsDQ(i) / DQResult(i)))
        End If
        If ObsDQ(i) = 0 Then
            SumLOQ = SumLOQ
        Else
            SumLOQ = SumLOQ + Abs(Log(ObsDQ(i)))
        End If
    Next i
    NC = 1 - SimRD / ObsRD
    NC = Format(NC, "#0.000")
    ErQ = (MaxSQ - MaxOQ) / MaxOQ * 100
    ErR = (SumSQ - SumOQ) / SumOQ * 100
    ErQ = Format(ErQ, "#0.00")
    ErR = Format(ErR, "#0.00")
        
    If OptiPara = True Then
        If FOption = True Or SOption = True Or TOption = True Then
            simfr(NEi) = Abs((SumSQ - SumOQ) / SumOQ) + Abs(1 - NC)
        Else
            fsample(NEi, simd) = Abs((SumSQ - SumOQ) / SumOQ) + Abs(1 - NC)
        End If
        If FrOption = True Then
            Rd.Open "select * from [SimDCResults-" + CStr(StationName) + "] ", ConnectSys, adOpenDynamic, adLockOptimistic
            Rd.AddNew
            Rd("随机运算代号") = simsjs
            Rd("场次") = NEi
            Rd("起始时间") = FSTime(NEi)
            Rd("径流深误差(%)") = ErR
            Rd("洪峰误差(%)") = ErQ
            Rd("峰现时差(时段)") = SimI - ObsI
            Rd("确定性系数") = NC
            Rd.Update
            Rd.Close
        End If
    Else
        If FiOption = True Then
        
            ConnectSys.Execute "delete * from [SimDState-" + CStr(StationName) + "] where [Dt] between  " & LongST & " and " & LongET & ""
            ConnectSys.Execute "delete * from [SimDResults-" + CStr(StationName) + "] where [时间] between  #" & Format(FSTime(NEi), "YYYY-MM-DD") & "# and #" & Format(FETime(NEi), "YYYY-MM-DD") & "#"
            
            With Rd
                .Open "select * from [SimDState-" + CStr(StationName) + "] ", ConnectSys, adOpenDynamic, adLockOptimistic
                 For i = 1 To TS
                    FSTime0 = DateAdd("d", 1, FSTime0)
                    LongST0 = DatePart("yyyy", FSTime0) * 10000 + DatePart("m", FSTime0) * 100 + DatePart("d", FSTime0)
                    For j = 1 To Nsc
                        .AddNew
                        Rd("Dt") = LongST0
                        Rd("Sub") = j
                        Rd("W") = WW(j, i)
                        Rd("Wu") = WWu(j, i)
                        Rd("Wl") = WWl(j, i)
                        Rd("S") = SS(j, i)
                        Rd("Fr") = FFr(j, i)
                        .Update
                    Next j
                 Next i
                .Close
                
                 .Open "select * from [SimDResults-" + CStr(StationName) + "] ", ConnectSys, adOpenDynamic, adLockOptimistic
                 For i = 1 To TS
                    FSTime0 = DateAdd("d", i - 1, FSTime(NEi))
                    .AddNew
                    Rd("场次") = NEi
                    Rd("时间") = FSTime0
                    Rd("计算流量") = DQResult(i)
                    Rd("实测流量") = ObsDQ(i)
                    Rd("平均降雨") = AvgP(i)
                    .Update
                 Next i
                .Close
            End With
        Else
            ConnectSys.Execute "delete * from [DState-" + CStr(StationName) + "] where [Dt] between  " & LongST & " and " & LongET & ""
            ConnectSys.Execute "delete * from [DResults-" + CStr(StationName) + "] where [时间] between  #" & Format(FSTime(NEi), "YYYY-MM-DD") & "# and #" & Format(FETime(NEi), "YYYY-MM-DD") & "#"
            ConnectSys.Execute "delete * from [DCResults-" + CStr(StationName) + "] where [起始时间]=  #" & Format(FSTime(NEi), "YYYY-MM-DD") & "#"
            
            With Rd
                .Open "select * from [DState-" + CStr(StationName) + "] ", ConnectSys, adOpenDynamic, adLockOptimistic
                 For i = 1 To TS
                    FSTime0 = DateAdd("d", 1, FSTime0)
                    LongST0 = DatePart("yyyy", FSTime0) * 10000 + DatePart("m", FSTime0) * 100 + DatePart("d", FSTime0)
                    For j = 1 To Nsc
                        .AddNew
                        Rd("Dt") = LongST0
                        Rd("Sub") = j
                        Rd("W") = WW(j, i)
                        Rd("Wu") = WWu(j, i)
                        Rd("Wl") = WWl(j, i)
                        Rd("S") = SS(j, i)
                        Rd("Fr") = FFr(j, i)
                        .Update
                    Next j
                 Next i
                .Close
                
                 .Open "select * from [DResults-" + CStr(StationName) + "] ", ConnectSys, adOpenDynamic, adLockOptimistic
                 For i = 1 To TS
                    FSTime0 = DateAdd("d", i - 1, FSTime(NEi))
                    .AddNew
                    Rd("场次") = NEi
                    Rd("时间") = FSTime0
                    Rd("计算流量") = DQResult(i)
                    Rd("实测流量") = ObsDQ(i)
                    Rd("平均降雨") = AvgP(i)
                    .Update
                 Next i
                .Close
                
                .Open "select * from [DCResults-" + CStr(StationName) + "] ", ConnectSys, adOpenDynamic, adLockOptimistic
                .AddNew
                Rd("场次") = NEi
                Rd("起始时间") = FSTime(NEi)
                Rd("径流深误差(%)") = ErR
                Rd("洪峰误差(%)") = ErQ
                Rd("峰现时差(时段)") = SimI - ObsI
                Rd("确定性系数") = NC
                .Update
                .Close
            End With
        End If
    End If
End Sub