【问题标题】:Excel 2007 forms to SQL ServerExcel 2007 表单到 SQL Server
【发布时间】:2013-02-13 21:00:38
【问题描述】:

我一直在到处寻找答案,但没有成功解决我将要描述的问题。

我有一张经常手动更新的 Excel 表格。我被要求以实时的方式将每一行更改推送到 Sql Server 中。我需要用户能够通过按下保存按钮将一行保存到服务器。

在 SSMS 中,我已经能够使用 OPENROWSET 从服务器读取数据,例如:

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;HDR=YES;Database=C:\tmp\test2.xlsm',
'SELECT * FROM [myrng]');

我还能够将数据从 Excel 插入到 SQL Server:

Insert into NEWDB.dbo.master 
Select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 
12.0;HDR=YES;Database=C:\tmp\test2.xlsm','SELECT * FROM [myrng]')

当我在 Excel 文件仍然打开的情况下尝试 QUERY、INSERT 或 UPDATE 数据回服务器时出现问题。

我最终计划做的是构建一个向导应用程序来填充一个 Excel 表,在该过程结束时可以将其提交到相应的 SQL Server 表。

到目前为止,我一直在使用 VBA 和 ADO,但没有成功,有人建议我使用 DTS 或 SSIS,但我需要 Excel 文件始终保持打开状态。

提前致谢, 罗德里戈。

【问题讨论】:

    标签: sql-server forms excel ado sync


    【解决方案1】:

    您可以针对与 Excel 的连接运行:

    strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ActiveWorkbook.FullName _
        & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
    
    ''Late binding, so no reference is needed
    
    Set cn = CreateObject("ADODB.Connection")
    
    cn.Open strCon
    
    ''A single value, but a query with parameters would be  better
    ssql = "INSERT INTO [ODBC;DRIVER=SQL Server;SERVER=server;Trusted_Connection=Yes;DATABASE=Test].table_1 (Atext ) " _
    & "Values ('" & Sheet1.[b3] & "')"
    
    cn.Execute ssql
    

    或者

    ssql = "INSERT INTO [ODBC;DRIVER=SQL Server;SERVER=server;" _
        & "Trusted_Connection=Yes;DATABASE=Test].table_1 ( Atext ) " _
        & "SELECT ACol FROM [Sheet1$b7:c9]"
    

    或者

    ssql = "INSERT INTO [ODBC;DRIVER=SQL Server;SERVER=server;" _
        & "Trusted_Connection=Yes;DATABASE=Test].table_1 ( Atext ) " _
        & "SELECT Acol FROM Anamedrange"
    

    如果 HDR=No,则使用 F1、F2 等作为各个列的名称,从范围中的第一列开始编号。

    这在 Excel 中也适用于我,在此示例中,我使用了对 Microsoft ActiveX 数据对象 x.x 库的引用,但后期绑定也可以正常工作。

    Dim cn As New ADODB.Connection
    Dim cmd As New ADODB.Command
    cn.Open servercon
    
    cmd.ActiveConnection = cn
    
    cmd.CommandText = "insert_user" ''Stored procedure
    cmd.CommandType = adCmdStoredProc
    cmd.Parameters("@username").Value = Worksheets("Sheet1").Cells(3, 2)
    cmd.Execute
    

    【讨论】:

    • 我最终也使用了一个命名范围。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多