2017-07-06 35 views
0

將整個表導出到sql表中。我已經嘗試了2種不同的方式,如下所示。兩者都以不同的方式工作。最終我掙扎着出口多行數據到SQL數據庫將整個Excel表導出到sql表中用VBA

這第一種方法我可以導入多行到sql表成功與一次點擊的按鈕,唯一的問題是,StartTime和FinishTime來到sql表爲00:00:00即使我在Excel中輸入一個正常的時間

Sub Button1_Click() 
    Dim conn As New ADODB.Connection 
    Dim iRowNo As Integer 
    Dim sEventDate, sID, sDeptCode, sOpCode, sStartTime, sFinishTime, sUnits As String 

    With Sheets("Sheet1") 
    'Open a connection to SQL Server 
    conn.Open "Provider=SQLOLEDB;Data Source=db\db1;Initial Catalog=PTW;Integrated Security=SSPI;" 
    'Skip the header row 
    iRowNo = 2 
    'Loop until empty cell in FirstName 
    Do Until .Cells(iRowNo, 1) = "" 
    sEventDate = .Cells(iRowNo, 1) 
    sID = .Cells(iRowNo, 2) 
    sDeptCode = .Cells(iRowNo, 3) 
    sOpCode = .Cells(iRowNo, 4) 
    sStartTime = .Cells(iRowNo, 5).Text 
    sFinishTime = .Cells(iRowNo, 6).Text 
    sUnits = .Cells(iRowNo, 7) 
    'Generate and execute sql statement to import the excel rows to SQL Server table 
    conn.Execute "insert into dbo.TimeLog (EventDate, ID, DeptCode, Opcode, StartTime, FinishTime, Units) values ('" & sEventDate & "', '" & sID & "', '" & sDeptCode & "', '" & sOpCode & "', cast('" & dStartTime & "' as datetime), cast('" & dFinishTime & "' as datetime), '" & sUnits & "')" 

    iRowNo = iRowNo + 1 

    Loop 

    MsgBox "Data Successfully Exported." 
    conn.Close 
    Set conn = Nothing 
    End With 
End Sub 

這第二工作方式和發送開始時間和FinishTime,正是因爲它是在Excel表格中,但只允許我在一個時間

發送一行到SQL表
Sub Button1_Click() 
    Dim conn As ADODB.Connection 
    Dim cmd As ADODB.Command 
    Dim strSQL As String 

    strSQL = "INSERT INTO dbo.TimeLog" & _ 
    "(EventDate, ID, DeptCode, Opcode, StartTime, FinishTime, Units) " & _ 
    "VALUES (?,?,?,?,?,?,?)" 

Set conn = New ADODB.Connection 
    conn.Open "Provider=SQLOLEDB;Data Source=db\db1;Initial Catalog=PTW;Integrated Security=SSPI;" 

iRowNo = 1 

Set cmd = New ADODB.Command 

    cmd.ActiveConnection = conn 
    cmd.CommandType = adCmdText 
    cmd.CommandText = strSQL 



With Sheets("Sheet1") 
    'Loop until empty cell in FirstName 
    Do Until .Cells(iRowNo, 1) = "" 

    cmd.Parameters.Append _ 
    cmd.CreateParameter("pEventDate", adVarChar, adParamInput, 8, .Cells(iRowNo, 1)) 
    cmd.Parameters.Append _ 
    cmd.CreateParameter("pID", adInteger, adParamInput, , .Cells(iRowNo, 2)) 
    cmd.Parameters.Append _ 
    cmd.CreateParameter("pDeptCode", adVarChar, adParamInput, 2, .Cells(iRowNo, 3)) 
    cmd.Parameters.Append _ 
    cmd.CreateParameter("pOpCode", adVarChar, adParamInput, 2, .Cells(iRowNo, 4)) 
    cmd.Parameters.Append _ 
    cmd.CreateParameter("pStartTime", adDBTime, adParamInput, 0, .Cells(iRowNo, 5)) 
    cmd.Parameters.Append _ 
    cmd.CreateParameter("pFinishTime", adDBTime, adParamInput, 0, .Cells(iRowNo, 6)) 
    cmd.Parameters.Append _ 
    cmd.CreateParameter("pUnits", adInteger, adParamInput, , .Cells(iRowNo, 7)) 

    cmd.Execute 


    iRowNo = iRowNo + 1 
    Loop 

    MsgBox "Data Successfully Exported" 

End With 

    conn.Close 
    Set conn = Nothing 
End Sub 

回答

0

你必須投下價值。在mssql中,yourt時間值被識別爲字符串。

CAST( '8:00:00' 作爲DATETIME)

conn.Execute "insert into dbo.TimeLog (EventDate, ID, DeptCode, Opcode, StartTime, FinishTime, Units) values ('" & sEventDate & "', '" & sID & "', '" & sDeptCode & "', '" & sOpCode & "', cast('" & dStartTime & "' as datetime), cast('" & dFinishTime & "' as datetime), '" & sUnits & "')" 
+0

我仍然將時間發送到SQL表爲'00:00:00'我甚至嘗試過這一點,它仍然發送零「conn.Execute」插入到dbo.TimeLog(EventDate,ID,DeptCode,Opcode,StartTime,FinishTime,Units)值(''&sEventDate&'','「&sID&」','「&sDeptCode&」','&sOpCode&「',cast('&dStartTime&''as time(0)),cast (''&dFinishTime&''as time(0)),'' 「&sUnits&」')「' – DRUIDRUID

+0

測試.Cells(iRowNo,6).text –

+0

添加Test.Cells(iRowNo,6).Text'時會出錯。但是,如果我不添加'Test'只有'.Text'它是成功的,但我仍然發送'00:00:00' – DRUIDRUID

0

第一個腳本的循環中添加這是結果我一直在尋找...

Set cmd = New ADODB.Command 
    cmd.ActiveConnection = conn 
    cmd.CommandType = adCmdText 
    cmd.CommandText = strSQL 
相關問題