在 Excel 中使用 SQL - 记录未更新

问题描述 投票:0回答:1

我正在尝试使用 SQL 和 VBA 来更新 Excel 工作表。 我的宏当前更新同一文件中的 5 个工作表(审阅、二手、道路、Inspec 和其他)。 该宏运行 SQL 以根据某些条件更新每个工作表。

我想要做的是在 TMP 列中放置一个“X”,并在 TMP2 列(在 MatcheLines 工作表上)中放置一个代码作为记录

'关闭前一个 SELECT 查询的连接。 SELECT 查询是第一个查询,并且运行速度很快。 它和它的性能都没有问题。

            dbRS.Close
            dBcn.Close
            
        
'          ADD X TO TMP COLUMN and S to TMP2 column FOR REVIeW RECORDS
           Do Until ActiveSheet.Name = "MatchedLines"
                DoEvents
                Workbooks(ThisBook).Worksheets("MatchedLines").Activate
            Loop
            
            dBcn.Open dbconn
            
            vsql = ""
            vsql = "UPDATE [MatchedLines$] M " _
                & " SET M.[TMP] = 'X', [TMP2] = 'S' " _
                & "WHERE M.[RO_ID] IN " _
                & " (SELECT DISTINCT [RO_ID] FROM [Review$])"
            
            dbRS.Open vsql, dBcn

当宏运行第二个查询时,它会陷入困境并冻结 Excel。 我通常这个时候使用任务管理器关闭Excel。

目的是在 MatchedLines 工作表中“标记”这些记录,以便后续查询确实选择相同的记录。

SQL 是否有问题导致 Excel 速度变慢/冻结?

有更好的方法吗? DELETE 查询会更好并从 MatchedLines 工作表中删除这些记录吗?

预先感谢您的任何建议或建议。 仅供参考......我很少使用 SQL,所以我不确定是什么导致了我的问题。

再次感谢...

sql excel vba
1个回答
0
投票

以简单的方式制作。

  1. 创建连接
   Dim cnx As New ADODB.Connection
   Dim CONSTR As String
   CONSTR = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source=" & ThisWorkbook.FullName & "; Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
   cnx.ConnectionString = CONSTR
   cnx.Open

2)然后在此连接对象上执行更新查询

dim vsqk as string 
vsql = ""
            vsql = "UPDATE [MatchedLines$] M " _
                & " SET M.[TMP] = 'X', [TMP2] = 'S' " _
                & "WHERE M.[RO_ID] IN " _
                & " (SELECT DISTINCT [RO_ID] FROM [Review$])"
cnx.execute vsql

我认为这对你有用。 谢谢你。

© www.soinside.com 2019 - 2024. All rights reserved.