我创建了一个Excel工作表,它执行一些查找以格式化需要插入另一个表的数据。需要将此Excel工作簿提供给可以自由添加一些新行的某些用户,然后需要能够点击“插入数据库”按钮并将记录转换并作为新记录插入到SQL表中。我正在使用Excel 2010和SQL Server 2008.我有一个与数据库的连接,因为我使用它来提取一些数据以验证正在添加的新行,但我不知道如何再将数据插入
答案 0 :(得分:15)
你可以用ADO做很多事情:
Dim cn As New ADODB.Connection
''You should probably change Activeworkbook.Fullname to the
''name of your workbook
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
& ActiveWorkbook.FullName _
& ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
cn.Open strCon
s = "INSERT INTO [ODBC;Description=TEST;DRIVER=SQL Server;" _
& "SERVER=Server;Trusted_Connection=Yes;" _
& "DATABASE=test].SomeTable ( Col1, Col2, Col3, Col4 ) " _
& "SELECT a.Col1, a.Col2, a.Col3, a.Col4 " _
& "FROM [Sheet2$] a " _
& "LEFT JOIN [ODBC;Description=TEST;DRIVER=SQL Server;" _
& "SERVER=Server;Trusted_Connection=Yes;" _
& "DATABASE=test].SomeTable b ON a.Col1 = b.Col1 " _
& "WHERE b.Col1 Is Null"
cn.Execute s
您还可以使用ACE连接:http://www.connectionstrings.com/或OPENROWSET和SQL Server连接。在所有情况下,您可能会遇到列中混合数据类型的问题,具体取决于您的注册表设置(http://forum.lessthandot.com/viewtopic.php?f=17&t=12043&p=59669&hilit=excel#p59669)
答案 1 :(得分:3)
我发现在宏中,您可以通过添加对“Microsoft ActiveX Data Objects 6.0 Library”的引用来创建ADO连接。在宏中打开连接后,可以创建insert语句并使用connection.Execute(statement)方法执行它:
Dim item as String = "Insert Into MyTable(ColA,ColB) VALUES('Foo', 'Bar')"
Dim thisCon As New ADODB.Connection
thiscon.Open("ConnectionString")
thisCon.Execute (item)
答案 2 :(得分:0)
在excel中修改数据后,需要生成Update语句,按“按更新”按钮执行。因此,将执行Update和Insert语句。然后必须发送查询以刷新Excel中的数据。(imho)