代码如下,数据原本可以运行,替换后就报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
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
.MoveLast
.MoveFirst
End If