2015-10-01 61 views
0

這是我的文本文件看起來像爲sql - 變量是在左,數據在右邊需要從文本文件導入信息使用VBA

; ------- Test #01 ------- 


Method  , Ping 
;--- Common properties --- 
;DestFolder , Root\Black\ 
RMAgent  , Black 
Title  , Black - Agent not connected 
Comment  , Ping mra itself 
RelatedURL , 
NamePattern , %agent% - Agent not connected 
CmntPattern , Ping %host% 
ScheduleMode, Regular 
Schedule , 
Interval , 600 
Alerts  , Send AM Email 
ReverseAlert, No 
UnknownIsBad, Yes 
WarningIsBad, Yes 
UseCommonLog, Yes 
PrivLogMode , Default 
CommLogMode , Default 

這是到目前爲止我的代碼

Public Sub Load_Module1(ByVal FileName As String, ByVal LogFile As String) 

End Sub 

Sub main() 

    Dim fs As FileStream 
    Dim sw As StreamReader 
    Dim strNewFileName As String 
    Dim strFileExt As String 
    Dim intPos As Integer 
    Dim strColumnData As String() = Nothing 
    Dim intRow As Integer = 1 
    Dim strLine As String 
    'Dim strSubString As String 

    '----------------------------------------------------------------------- 
    ' Do the Common Table 
    '----------------------------------------------------------------------- 
    Dim strDBConnection As String = "Data Source=*******;Initial Catalog=*******;User Id=*******;Password=*******" 
    Dim cn As New SqlConnection(strDBConnection) 
    Dim cmd As New SqlCommand("appsp_host_import", cn) 
    Const filename As String = "C:\Temp\HostMonitorTests2015-09-11change.txt.txt" 
    Dim dataArray() As String 
    Dim filenumber As Integer = FreeFile() 
    Dim strmethod As String 
    Dim strDestFolder As String 
    Dim strRMAgent As String 
    Dim strTitle As String 
    Dim strComment As String 
    Dim strRelatedURL As String 
    Dim strNamePattern As String 
    Dim strCmntPattern As String 
    Dim strScheduleMode As String 
    Dim strSchedule As String 
    Dim strInterval As Integer 
    Dim strAlerts As String 
    Dim strReverseAlert As Boolean 
    Dim strUnknownIsBad As Boolean 
    Dim strWarningIsBad As Boolean 
    Dim strUseCommonLog As Boolean 
    Dim strPrivLogMode As String 
    Dim strCommLogMode As String 
    Dim strtype As String 
    Dim strImportRow As String 
    Dim strLastOrderNum As String = "" 
    Dim intImportID As Integer 
    Dim intLineNum As Integer 
    Dim intQtyOrdered As Integer 




    Try 
     fs = New FileStream(filename, FileMode.Open, FileAccess.Read) 
     sw = New StreamReader(filename) 
    Catch e As Exception 
     Exit Sub 
    End Try 
    strLine = sw.ReadLine() 
    'Dim TextLine As String 
    '' Open file. 

    '' Loop until end of file. 
    'Do While Not EOF(1) 
    ' ' Read line into variable. 
    ' TextLine = LineInput(1) 
    ' ' Display result in a message box. 
    ' MsgBox("End of file reached at " & TextLine) 
    'Loop 
    'FileClose(1) 
    Dim pos As Integer = InStr("; ------- Test #01 -------") 

    While Not sw.EndOfStream 
     If filename.Contains("; ------- Test #01 -------") Then 
      cn.Open() 
      cmd.CommandType = CommandType.StoredProcedure 
      cmd.Parameters.Add("@DestFolder", SqlDbType.VarChar, 512) 
      cmd.Parameters.Add("@RMAgent", SqlDbType.VarChar, 512) 
      cmd.Parameters.Add("@Title", SqlDbType.VarChar, 512) 
      cmd.Parameters.Add("@Comment", SqlDbType.VarChar, 512) 
      cmd.Parameters.Add("@RelatedURL", SqlDbType.VarChar, 512) 
      cmd.Parameters.Add("@NamePattern", SqlDbType.VarChar, 512) 
      cmd.Parameters.Add("@CmntPattern", SqlDbType.VarChar, 512) 
      cmd.Parameters.Add("@ScheduleMode", SqlDbType.VarChar, 512) 
      cmd.Parameters.Add("@Schedule", SqlDbType.VarChar, 512) 
      cmd.Parameters.Add("@Interval", SqlDbType.Int) 
      cmd.Parameters.Add("@Alerts", SqlDbType.VarChar, 512) 
      cmd.Parameters.Add("@ReverseAlert", SqlDbType.Bit) 
      cmd.Parameters.Add("@UnknownIsBad", SqlDbType.Bit) 
      cmd.Parameters.Add("@WarningIsBad", SqlDbType.Bit) 
      cmd.Parameters.Add("@UseCommonLog", SqlDbType.Bit) 
      cmd.Parameters.Add("@PrivLogMode", SqlDbType.VarChar, 512) 
      cmd.Parameters.Add("@CommLogMode", SqlDbType.VarChar, 512) 
      cmd.Parameters.Add("@SyncCounters", SqlDbType.Bit) 
      cmd.Parameters.Add("@SyncAlerts", SqlDbType.Bit) 
      cmd.Parameters.Add("@DependsOn", SqlDbType.VarChar, 512) 
      cmd.Parameters.Add("@Testspecific", SqlDbType.VarChar, 512) 
     End If 
     strtype = Mid(strLine, 13, 1) 
     Select Case strtype 
      Case "Method" 
       strmethod = Trim(Mid(strLine, 14, 99)) 
      Case ";DestFolder" 
       strDestFolder = Trim(Mid(strLine, 14, 99)) 
      Case "RMAgent" 
       strRMAgent = Trim(Mid(strLine, 14, 99)) 
      Case "Title" 
       strTitle = Trim(Mid(strLine, 14, 99)) 
      Case "Comment" 
       strComment = Trim(Mid(strLine, 14, 99)) 
      Case "RelatedURL" 
       strRelatedURL = Trim(Mid(strLine, 14, 99)) 
      Case "NamePattern" 
       strNamePattern = Trim(Mid(strLine, 14, 99)) 
      Case "CmntPattern" 
       strCmntPattern = Trim(Mid(strLine, 14, 99)) 
      Case "ScheduleMode" 
       strScheduleMode = Trim(Mid(strLine, 14, 99)) 
      Case "Schedule" 
       strSchedule = Trim(Mid(strLine, 14, 99)) 
      Case "Interval" 
       strInterval = Trim(Mid(strLine, 14, 99)) 
      Case "Alerts" 
       strAlerts = Trim(Mid(strLine, 14, 99)) 
      Case "ReverseAlert" 
       strReverseAlert = Trim(Mid(strLine, 14, 99)) 
      Case "UnknownIsBad" 
       strUnknownIsBad = Trim(Mid(strLine, 14, 99)) 
      Case "WarningIsBad" 
       strWarningIsBad = Trim(Mid(strLine, 14, 99)) 
      Case "UseCommonLog" 
       strUseCommonLog = Trim(Mid(strLine, 14, 99)) 
      Case "PrivLogMode" 
       strPrivLogMode = Trim(Mid(strLine, 14, 99)) 
      Case "CommLogMod" 
       strCommLogMode = Trim(Mid(strLine, 14, 99)) 
       cmd.ExecuteNonQuery() 
       cmd.Parameters("@Reset").Value = 0 
     End Select 
     filenumber = 0 
     'sw.Close() 
     'fs.Close() 
     cn.Close() 
    End While 
    FileClose(1) 

    'Try 
    ' cn.Open() 
    ' cmd.CommandType = CommandType.StoredProcedure 
    ' cmd.Parameters.Add("@DestFolder", SqlDbType.VarChar, 512) 
    ' cmd.Parameters.Add("@RMAgent", SqlDbType.VarChar, 512) 
    ' cmd.Parameters.Add("@Title", SqlDbType.VarChar, 512) 
    ' cmd.Parameters.Add("@Comment", SqlDbType.VarChar, 512) 
    ' cmd.Parameters.Add("@RelatedURL", SqlDbType.VarChar, 512) 
    ' cmd.Parameters.Add("@NamePattern", SqlDbType.VarChar, 512) 
    ' cmd.Parameters.Add("@CmntPattern", SqlDbType.VarChar, 512) 
    ' cmd.Parameters.Add("@ScheduleMode", SqlDbType.VarChar, 512) 
    ' cmd.Parameters.Add("@Schedule", SqlDbType.VarChar, 512) 
    ' cmd.Parameters.Add("@Interval", SqlDbType.Int) 
    ' cmd.Parameters.Add("@Alerts", SqlDbType.VarChar, 512) 
    ' cmd.Parameters.Add("@ReverseAlert", SqlDbType.Bit) 
    ' cmd.Parameters.Add("@UnknownIsBad", SqlDbType.Bit) 
    ' cmd.Parameters.Add("@WarningIsBad", SqlDbType.Bit) 
    ' cmd.Parameters.Add("@UseCommonLog", SqlDbType.Bit) 
    ' cmd.Parameters.Add("@PrivLogMode", SqlDbType.VarChar, 512) 
    ' cmd.Parameters.Add("@CommLogMode", SqlDbType.VarChar, 512) 
    ' cmd.Parameters.Add("@SyncCounters", SqlDbType.Bit) 
    ' cmd.Parameters.Add("@SyncAlerts", SqlDbType.Bit) 
    ' cmd.Parameters.Add("@DependsOn", SqlDbType.VarChar, 512) 
    ' cmd.Parameters.Add("@Testspecific", SqlDbType.VarChar, 512) 
    ' 'cmd.Parameters("@Reset").Value = 1 


    'Catch e As Exception 
    ' Exit Sub 
    'End Try 

    If Not sw.EndOfStream Then 
     strLine = sw.ReadLine()  'Get the header line 
    End If 

    While Not sw.EndOfStream 
     Try 
      strLine = sw.ReadLine() 
      intRow = intRow + 1 
      If UCase(Mid(strLine, 1, 3)) = "YES" Or UCase(Mid(strLine, 1, 3)) = "NO " Then 
       cmd.Parameters("@DestFolder").Value = UCase(Trim(Mid(strLine, 1, 3))) 
       cmd.Parameters("@RMAgent").Value = Trim(Mid(strLine, 7, 6)) 
       cmd.Parameters("@Title").Value = Trim(Mid(strLine, 14, 15)) 
       cmd.Parameters("@Comment").Value = Trim(Mid(strLine, 14, 15)) 
       cmd.Parameters("@RelatedURL").Value = Trim(Mid(strLine, 47, 5)) 
       cmd.Parameters("@NamePattern").Value = Trim(Mid(strLine, 52, 5)) 
       cmd.Parameters("@CmntPattern").Value = Trim(Mid(strLine, 60, 8)) 
       cmd.Parameters("@ScheduleMode").Value = Trim(Mid(strLine, 69, 8)) 
       cmd.Parameters("@Schedule").Value = Trim(Mid(strLine, 83, 6)) 
       cmd.Parameters("@Interval").Value = CInt(Trim(Mid(strLine, 78, 4))) 
       cmd.Parameters("@Alerts").Value = Trim(Mid(strLine, 83, 6)) 
       cmd.Parameters("@ReverseAlert").Value = 0 
       cmd.Parameters("@UnknownIsBad").Value = 0 
       cmd.Parameters("@WarningIsBad").Value = 0 
       cmd.Parameters("@UseCommonLog").Value = 0 
       cmd.Parameters("@PrivLogMode").Value = Trim(Mid(strLine, 175, 7)) 
       cmd.Parameters("@CommLogMode").Value = Trim(Mid(strLine, 175, 7)) 
       cmd.Parameters("@SyncCounters").Value = 0 
       cmd.Parameters("@SyncAlerts").Value = 0 
       cmd.Parameters("@DependsOn").Value = Trim(Mid(strLine, 175, 7)) 
       cmd.Parameters("@Testspecific").Value = Trim(Mid(strLine, 175, 7)) 
       cmd.ExecuteNonQuery() 
       cmd.Parameters("@Reset").Value = 0 
      End If 
     Catch e As Exception 
      Exit Sub 
     End Try 
    End While 
    sw.Close() 
    fs.Close() 
    cn.Close() 

    'Move the file 
    intPos = filename.Length 
    While intPos > 0 
     If Mid(filename, intPos, 1) = " " Then 
      Exit While 
     End If 
     intPos = intPos - 1 
    End While 
    strNewFileName = Left(filename, intPos) 
    strNewFileName = strNewFileName & "Archive\" & Mid(filename, intPos + 1, 999) 
    strFileExt = "_" & Now.ToString("yyyyMMdd_hhmmss") & ".txt" 
    strNewFileName = strNewFileName.Replace(".txt", strFileExt) 
    Try 
     System.IO.File.Move(filename, strNewFileName) 
    Catch e As Exception 
    End Try 

End Sub 
+0

那麼是什麼問題? – MikeTheLiar

+0

它不能正常工作,我不知道如何獲得數據來區分變量和數據。我也無法弄清楚如何讓代碼找到它的起始位置。我幾乎使用了本網站的所有教程以及其他許多無解的教程。 – ayono

+0

那麼,我不太瞭解VB,但是在我看來,你的邏輯很多都被註釋掉了。我建議你看看如何1)從文件中讀取一行數據,2)在分隔符上分割該行,在這種情況下是逗號。這應該讓你在正確的開始。 – MikeTheLiar

回答

0

這是第一個問題:

strtype = Mid(strLine, 13, 1) 

應該

strtype = Mid(strLine, 1, 13) 

或多個可讀

strtype = Left(strLine, 13) 

由於當不VBA具有Try ... Catch?這段代碼是否編譯?

+0

是的嘗試和趕工作,並感謝指出這個問題給我。多數民衆贊成在一個固定噸更多去大聲笑再次感謝 – ayono

+0

其實這是一個有點暗示你的標籤是錯誤的:)'嘗試... Catch'不是VBA,但VB.Net(我想這就是你使用的是?)@ayono – Andre

+0

對不起,但標籤搞砸了。更專注於使這項工作。我花了很多時間理解這一點 – ayono

0
Try 
     cn.Open() 
     cmd = new SqlCommand(srtQuery, cn) 
     cmd.CommandType = CommandType.StoredProcedure 
     cmd.Parameters.Add("@Method", SqlDbType.VarChar) 

     . 
     . 
     cmd.Parameters.Add("@Testspecific", SqlDbType.VarChar, 512) 
     cmd.ExecuteNonQuery() 

    Catch sqlEx as SqlException 
    'Do something about the exception 

    Catch ex as Exception 
    Throw 'Re-throw any other exception 


    Finally 
    cn.Close(); 
    End Try