將整個表導出到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
我仍然將時間發送到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
測試.Cells(iRowNo,6).text –
添加Test.Cells(iRowNo,6).Text'時會出錯。但是,如果我不添加'Test'只有'.Text'它是成功的,但我仍然發送'00:00:00' – DRUIDRUID