Excel DB连接:insert,update&删除?

时间:2015-08-05 12:51:04

标签: database excel

我使用DATA - From Other Sources - From SQL Server控件将数据库表导入Excel工作簿。它看起来很完美,令人耳目一新的数据就像魅力一样。

但是,每当我对表进行任何更改(编辑,插入或删除行)时,我似乎都找不到将这些更改推送到数据库的方法。这让我想知道这是否真的可行。

有人可以告诉我怎么做,或者确认不支持这个吗?

2 个答案:

答案 0 :(得分:4)

当您通过链接到此问题中描述的外部数据源在Excel中创建“实时”表格时,Excel通过在幕后使用QueryTable对象来管理它。

QueryTable对象可以按需刷新,并按用户定义的定期计划刷新。

QuertyTable对象不是双向的。它们可用于将数据导入Excel,但不能将更改写回数据源。

可以从VBA操纵QueryTable对象。

可以编写自定义VBA代码,以自动将用户对表所做的任何更改写入数据源。但这绝对需要编写代码...这不是一个简单的选项,您可以从表的Excel用户界面中进行选择。

  

有人可以告诉我怎么做,或者确认不支持这个吗?

Excel用户界面不支持插入,更新和删除。

答案 1 :(得分:0)

既然你没有确切的目标,那么......你能,怎么样?让我直接转储我知道的代码,因为我一直都在使用它。这是20多台计算机上的自定义功能区的一部分,因此可以将其销售信息更新/合并到数据库中。这应该可以帮助您随意提出一些问题。基本上它是如何工作的是创建SQL命令,它创建临时表然后合并/更新我们的数据库

  Dim adoCN As ADODB.Connection
    Dim sConnString As String
    Dim sSQL, sSQLMerge As String
    Dim Starting As Integer

    ''Find the starting point
    For I = 1 To UBound(data, 2) - 1
        If data(I, 0) <> "" Then
            Starting = I
            Exit For
        End If
    Next

    '''This primes the temp table
    '' into #tempTable " & vbCrLf
      If LCase(CStr(data(Starting, 0))) = "null" Then

      Else
        sSQL = "select '" & replace(CStr(data(Starting, 0)), "'", "''") & "' as '" & _
                            replace(CStr(data(0, 0)), "'", "''") & "'"
      End If

      For I = 1 To UBound(data, 2) - 1
            If LCase(replace(CStr(data(Starting, I)), "'", "''")) = "null" Then
                sSQL = sSQL & ", '' as '" & _
                                replace(CStr(data(0, I)), "'", "''") & "'"
            Else
                sSQL = sSQL & ", '" & replace(CStr(data(Starting, I)), "'", "''") & "' as '" & _
                                      replace(CStr(data(0, I)), "'", "''") & "'"
            End If
      Next
          sSQL = sSQL & ", getdate() as 'UpdateDate', suser_sname() as 'UpdatedBy' into #tempTable " & vbCrLf



        ' this adds all the data to the temp table
      For I = Starting + 1 To UBound(data, 1)
            If replace(CStr(data(I, 0)), "'", "''") = "" Then 'Checks to see ifs it has prop id, if not skip

            Else
                If LCase(replace(CStr(data(I, 0)), "'", "''")) = "null" Then 'checks to see if null if so add blank
                    sSQL = sSQL & "union Select ''"
                Else
                    sSQL = sSQL & "union Select '" & replace(CStr(data(I, 0)), "'", "''") & "'" 'if not null add value
                End If
                For II = 1 To UBound(data, 2) - 1
                    If LCase(replace(CStr(data(I, II)), "'", "''")) = "null" Then
                        sSQL = sSQL & ", ''"
                    Else
                        sSQL = sSQL & ", '" & replace(CStr(data(I, II)), "'", "''") & "'"
                    End If
                Next
                sSQL = sSQL & ", getdate(), suser_sname() " & vbCrLf
            End If
      Next

'GuidanceInputForm.SellerConditioning.Text = sSQL
''UserForm1.Label1.Caption = Len(sSQLMerge)
'GuidanceInputForm.Show


      ''Add Merge code
            sSQLMerge = "Merge CommercialSandbox..MasterDataTape as t" & vbCrLf & _
                    " Using #temptable as S on (replace(t.[Property ID], '-','') = replace(s.[Property ID], '-','') and replace(t.[Event ID], '-','') = replace(s.[Event ID], '-','')) " & vbCrLf & _
                    " When NOT MATCHED BY TARGET THEN INSERT([" & data(0, 0) & "]"
            For I = 1 To UBound(data, 2) - 1
                sSQLMerge = sSQLMerge & ", [" & data(0, I) & "]"
            Next
                sSQLMerge = sSQLMerge & ", UpdateDate, UpdatedBy"
                sSQLMerge = sSQLMerge & ") VALUES (s.[" & data(0, 0) & "]"

            For I = 1 To UBound(data, 2) - 1
                sSQLMerge = sSQLMerge & ", s.[" & data(0, I) & "]"
            Next
                sSQLMerge = sSQLMerge & ", s.UpdateDate, s.UpdatedBy"
               sSQLMerge = sSQLMerge & ") " & vbCrLf & _
                    " When MATCHED THEN UPDATE SET t.[" & data(0, 0) & "] = s.[" & data(0, 0) & "]"

            For I = 1 To UBound(data, 2) - 1
                sSQLMerge = sSQLMerge & ", t.[" & data(0, I) & "] = s.[" & data(0, I) & "]"
            Next
                sSQLMerge = sSQLMerge & ", t.UpdateDate = s.UpdateDate, t.UpdatedBy = s.UpdatedBy"
                sSQLMerge = sSQLMerge & ";"

'GuidanceInputForm.SellerConditioning.Text = sSQLMerge
''UserForm1.Label1.Caption = Len(sSQLMerge)
'GuidanceInputForm.Show


      sConnString = "Provider=sqloledb;Server=ERPT01LAX01US.prod.auction.local\EDWALT;Database=Commercialsandbox;Integrated Security = SSPI"

      Set adoCN = CreateObject("ADODB.Connection")
      adoCN.CommandTimeout = 0

      adoCN.Open sConnString
      adoCN.Execute sSQL
      adoCN.Execute sSQLMerge
      adoCN.Close