我從來沒有編程過視覺基礎,我的老闆剛剛告訴我編輯這個視覺基礎程序。這個程序讀取從文件列表中讀取並將數據(有些數字)放到我的老闆sql數據庫中。他希望我編輯這個程序,所以如果這些文件中的數字超出範圍,程序將忽略這些文件。我想了解該計劃如何做這個:是我對這個visual basic程序的理解是否正確?
Dim totalVolume1 As Integer, totalVolume2 As Integer, nLane1 As Integer, nLane2 As Integer
Dim totalVolSpeed1 As Double, totalVolSpeed2 As Double
Dim totalSpeed1 As Double, totalSpeed2 As Double, totalOccu1 As Double, totalOccu2 As Double
Dim nRunNum As Integer, NumberOfRunPerMinute As Integer, nWaitTime As Long, RetVal As Long
Dim nFileDir As Integer
Dim Sqlcommand1 As String, Sqlcommand2 As String
Dim FileSize() As Long
Dim FTP_DateTime As Date
NumberOfRunPerMinute = 3
'For nRunNum = 1 To NumberOfRunPerMinute
Do While True
'OutputTxt "Running the " & nRunNum & " time(s) of this minute."
nFileNum1 = FreeFile
Open "c:\" & FileSQLRegular For Output As #nFileNum1
nFileDir = FreeFile
Open "c:\" & FileSQLDirection & "" For Output As #nFileDir
OutputTxt "Start to look for files to import."
cFileList = LookForFiles(cFileBaseFolder, "*.txt")
OutputTxt "Finished looking for new files."
Erase FileSize
ReDim FileSize(LBound(cFileList) To UBound(cFileList))
OutputTxt "Start to check file lengths."
For i = 1 To UBound(cFileList)
FileSize(i) = FileLen(MyDir(cDataFolder) & cFileList(i))
Next
OutputTxt "Done checking file lengths."
For i = 1 To UBound(cFileList)
Debug.Print i
nFileNum2 = FreeFile
OutputTxt "Start to process file '" & cFileList(i) & "'"
Open cFileBaseFolder & cFileList(i) For Input As #nFileNum2
FTP_DateTime = FileDateTime(cFileBaseFolder & cFileList(i))
OutputTxt "DateTime of file '" & cFileList(i) & "' is '" & Format(FTP_DateTime, "yyyy-mm-dd hh:mm:ss") & "'"
If Not EOF(nFileNum2) Then
Line Input #nFileNum2, TmpString
nDetID = Val(Right(TmpString, Len(TmpString) - 4))
Do While Not EOF(nFileNum2)
detData = RetrieveData(nFileNum2, nDetID)
If Not detData.DayID = 0 Then
With detData
If .ValidattionID = 1 Then
OutputTxt "Retrieved 1 record!"
totalVolume1 = 0
totalVolume2 = 0
totalVolSpeed1 = 0
totalVolSpeed2 = 0
totalOccu1 = 0
totalOccu2 = 0
nLane1 = 0
nLane2 = 0
For j = 1 To nDetectorCount(.DetID)
TmpDataID = CStrN(.YearID, 4) & CStrN(.DayID, 3) & CStrN(.SecondTimeID, 5) & CStrN(.DetID, 4) & CStrN(j, 2)
SqlCommand = _
"@""" & Format(.Date, "yyyy-mm-dd hh:mm:ss") & """,""" & .YearID & """,""" & .DayID & """,""" & .SecondTimeID & _
""",""" & .DetID & """,""" & j & """,""" & .Speed(j) & """,""" & .Volume(j) & _
""",""" & .Occupancy(j) & """,""" & TmpDataID & """,""" & Format(FTP_DateTime, "yyyy-mm-dd hh:mm:ss") & """;"
Print #nFileNum1, SqlCommand
If .Speed(j) >= 0 And .Speed(j) <= 90 Then
If DetLaneDir(.DetID, j) = 1 Then
totalVolume1 = totalVolume1 + .Volume(j)
totalVolSpeed1 = totalVolSpeed1 + .Volume(j) * 1# * .Speed(j)
totalOccu1 = totalOccu1 + .Occupancy(j)
nLane1 = nLane1 + 1
ElseIf DetLaneDir(.DetID, j) = 2 Then
totalVolume2 = totalVolume2 + .Volume(j)
totalVolSpeed2 = totalVolSpeed2 + .Volume(j) * 1# * .Speed(j)
totalOccu2 = totalOccu2 + .Occupancy(j)
nLane2 = nLane2 + 1
End If
End If
Next
If totalVolume1 = 0 Then
totalOccu1 = 0
totalSpeed1 = 240
Else
totalOccu1 = totalOccu1/nLane1
totalSpeed1 = totalVolSpeed1/totalVolume1
End If
If totalVolume2 = 0 Then
totalOccu2 = 0
totalSpeed2 = 240
Else
totalOccu2 = totalOccu2/nLane2
totalSpeed2 = totalVolSpeed2/totalVolume2
End If
TmpDataID1 = CStrN(.YearID, 4) & CStrN(.DayID, 3) & CStrN(.SecondTimeID, 5) & CStrN(.DetID, 4) & CStrN(1, 2)
TmpDataID2 = CStrN(.YearID, 4) & CStrN(.DayID, 3) & CStrN(.SecondTimeID, 5) & CStrN(.DetID, 4) & CStrN(2, 2)
Sqlcommand1 = "@""" & Format(.Date, "yyyy-mm-dd hh:mm:ss") & """,""" & .YearID & """,""" & .DayID & """,""" & .SecondTimeID & _
""",""" & .DetID & """,""" & 1 & """,""" & totalSpeed1 & """,""" & totalVolume1 & _
""",""" & totalOccu1 & """,""" & TmpDataID1 & """,""d01"";"
Sqlcommand2 = "@""" & Format(.Date, "yyyy-mm-dd hh:mm:ss") & """,""" & .YearID & """,""" & .DayID & """,""" & .SecondTimeID & _
""",""" & .DetID & """,""" & 2 & """,""" & totalSpeed2 & """,""" & totalVolume2 & _
""",""" & totalOccu2 & """,""" & TmpDataID2 & """,""d01"";"
Print #nFileDir, Sqlcommand1
Print #nFileDir, Sqlcommand2
Else
'MsgBox "Not validated!"
Debug.Print "Not validated!"
End If
End With
End If
Loop
End If
Close (nFileNum2)
Next
Close (nFileNum1)
Close (nFileDir)
If FileLen("c:\" & FileSQLRegular & "") > 0 Then
OutputTxt "Importing data to database real_time_data..."
cnnMain_New.Execute ("LOAD DATA LOCAL INFILE 'c:\\" & FileSQLRegular & "' INTO TABLE real_time_data FIELDS TERMINATED BY ',' ENCLOSED BY '""' LINES STARTING BY '@' TERMINATED BY ';' (DATE_TIME, YEAR_ID, DAY_ID, SECOND_ID, DET_ID, LANE_ID, SPEED, VOLUME, OCCUPANCY, DATA_ID, PROCESSED_DATE_TIME, DATA_TYPE)")
OutputTxt "Done importing data to database..."
OutputTxt "Importing data to database real_time_data_two_day..."
cnnMain_New.Execute ("LOAD DATA LOCAL INFILE 'c:\\" & FileSQLRegular & "' INTO TABLE real_time_data_two_day FIELDS TERMINATED BY ',' ENCLOSED BY '""' LINES STARTING BY '@' TERMINATED BY ';' (DATE_TIME, YEAR_ID, DAY_ID, SECOND_ID, DET_ID, LANE_ID, SPEED, VOLUME, OCCUPANCY, DATA_ID, PROCESSED_DATE_TIME, DATA_TYPE)")
OutputTxt "Done importing data to database..."
Else
OutputTxt "No file found to process!"
End If
If FileLen("c:\" & FileSQLDirection & "") > 0 Then
OutputTxt "Importing data to database real_time_data_direction..."
cnnMain_New.Execute ("LOAD DATA LOCAL INFILE 'c:\\" & FileSQLDirection & "' INTO TABLE real_time_data_direction FIELDS TERMINATED BY ',' ENCLOSED BY '""' LINES STARTING BY '@' TERMINATED BY ';' (DATE_TIME, YEAR_ID, DAY_ID, SECOND_ID, DET_ID, Dir_ID, SPEED, VOLUME, OCCUPANCY, DATA_ID)")
OutputTxt "Done importing data to database..."
OutputTxt "Importing data to database real_time_data_direction_two_day..."
cnnMain_New.Execute ("LOAD DATA LOCAL INFILE 'c:\\" & FileSQLDirection & "' INTO TABLE real_time_data_direction_two_day FIELDS TERMINATED BY ',' ENCLOSED BY '""' LINES STARTING BY '@' TERMINATED BY ';' (DATE_TIME, YEAR_ID, DAY_ID, SECOND_ID, DET_ID, Dir_ID, SPEED, VOLUME, OCCUPANCY, DATA_ID)")
OutputTxt "Done importing data to database..."
Else
OutputTxt "No file found for directional data to process!"
End If
'cnnMain.Close
Kill "c:\" & FileSQLRegular & ""
Kill "c:\" & FileSQLDirection & ""
MoveFiles cFileList, FileSize
'
If nRunNum < NumberOfRunPerMinute Then
' nWaitTime = CLng((CSng(60)/NumberOfRunPerMinute - 2) * 1000)
' OutputTxt "Start to wait for " & nWaitTime & " miliseconds."
' RetVal = MsgWaitObj(nWaitTime)
' OutputTxt "Finished waiting!"
' End If
' 'Next
nWaitTime = 2000
OutputTxt "Start to wait for " & nWaitTime & " miliseconds."
RetVal = MsgWaitObj(nWaitTime)
OutputTxt "Finished waiting!"
這是迄今爲止我是這麼理解:在
For i = 1 To UBound(cFileList)
它通過的所有文件。在
For j = 1 To nDetectorCount(.DetID)
它進入的每個文件,並存儲在變量如totalvolume1,totalspeed1數據......在
If totalVolume1 = 0 Then
totalOccu1 = 0
totalSpeed1 = 240
它做一些過濾器。最後,在
Sqlcommand1 = "@""" & Format(.Date, "yyyy-mm-dd hh:mm:ss") & """,""" & .YearID & """,""" & .DayID & """,""" & .SecondTimeID & _
""",""" & .DetID & """,""" & 1 & """,""" & totalSpeed1 & """,""" & totalVolume1 & _
它放在兩個字符串,Sqlcommand1和Sqlcommand2所有的變量,這樣他們就可以被放入SQL數據庫。
我對這個程序的理解到目前爲止是否正確?這個程序然後使用
Print #nFileDir, Sqlcommand1
Print #nFileDir, Sqlcommand2
將這兩個字符串放入數據庫?
感謝您的幫助。
將這個解決我的問題:
'if data out of range, then they are not written to text file and database
If totalVolume1 < 50 And totalVolume1 > -1 And totalVolume1 < 50 And totalVolume1 > -1 Then
Print #nFileDir, Sqlcommand1
Print #nFileDir, Sqlcommand2
End If
我想你會通過發佈你迄今爲止所做的更多的幫助。這是Visual Studio中的Visual Basic還是嵌入式Access或Excel中的VBA?你運行這個程序了嗎?如果Visual Basic,是否編譯? – octopusgrabbus 2012-03-23 22:58:19
是Visual Basic程序,它有1個.vbp和2個.bas文件,所以我必須使用Microsoft Visual Basic 6打開它。只要我按下運行,它就會停止。 – help 2012-03-23 23:07:00