You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多列场景下Excel通过SQL插入与更新数据失败问题求助

问题:SQL操作Excel失败,需一次性写入全部17列数据

问题描述

通过SQL向Excel插入数据时遇到两个问题:

  1. 首次INSERT操作不被Excel接受
  2. 后续执行UPDATE语句时,BD.Execute SQL行无法正常执行

当前代码逻辑为先插入ID、COD_LINHA等12列数据,再通过UPDATE更新VELOCIDADE等第13至17列数据,现需改为一次性写入全部17列数据来解决问题。

原代码

For Linhas = 2 To UltLinhaBD 

Set Planilha = ThisWorkbook.Worksheets("Apontamento") 
Set LinhaDados = Planilha.Rows(Linhas) 

SQL = "INSERT INTO [APONTAMENTO$] (ID, COD_LINHA, DATA, LOTE, COD_PRODUTO, COD_EVENTO, COD_SUBEVENTO, INICIO, TERMINO, QTDE_PROD, PERDAS, OBSERVACAO) VALUES (" & LinhaDados.Cells(1).Value & ", '" & LinhaDados.Cells(2).Value & "', '" & LinhaDados.Cells(3).Value & "', '" & LinhaDados.Cells(4).Value & "', '" & LinhaDados.Cells(5).Value & "', '" & LinhaDados.Cells(6).Value & "', '" & LinhaDados.Cells(7).Value & "', '" & Format(LinhaDados.Cells(8).Value, "h:mm") & "', '" & Format(LinhaDados.Cells(9).Value, "h:mm") & "', " & LinhaDados.Cells(10).Value & ", " & LinhaDados.Cells(11).Value & ", '" & LinhaDados.Cells(12).Value & "')" 

BD.Open cs 

Consulta.Open SQL, BD 

'从第13列开始执行更新
SQL = "UPDATE [APONTAMENTO$] SET VELOCIDADE = '" & LinhaDados.Cells(13).Value & "', ID_OP = " & _ 
LinhaDados.Cells(14).Value & ", ID_USER = " & LinhaDados.Cells(15).Value & ", HORARIO_REG = '" & _ 
LinhaDados.Cells(16).Value & "', COD_TURNO = '" & LinhaDados.Cells(17).Value & "' WHERE ID = " & LinhaDados.Cells(1).Value 

BD.Execute SQL 

BD.Close 

Next

解决方案:一次性插入全部17列

修改INSERT语句直接包含所有17列,移除UPDATE步骤,同时优化连接的打开/关闭逻辑(放在循环外提升效率):

'将连接打开放在循环外,避免重复操作
BD.Open cs

Set Planilha = ThisWorkbook.Worksheets("Apontamento") 

For Linhas = 2 To UltLinhaBD 
    Set LinhaDados = Planilha.Rows(Linhas) 

    '一次性插入全部17列数据
    SQL = "INSERT INTO [APONTAMENTO$] (ID, COD_LINHA, DATA, LOTE, COD_PRODUTO, COD_EVENTO, COD_SUBEVENTO, INICIO, TERMINO, QTDE_PROD, PERDAS, OBSERVACAO, VELOCIDADE, ID_OP, ID_USER, HORARIO_REG, COD_TURNO) " & _
          "VALUES (" & LinhaDados.Cells(1).Value & ", '" & LinhaDados.Cells(2).Value & "', '" & LinhaDados.Cells(3).Value & "', '" & LinhaDados.Cells(4).Value & "', '" & LinhaDados.Cells(5).Value & "', '" & LinhaDados.Cells(6).Value & "', '" & LinhaDados.Cells(7).Value & "', '" & Format(LinhaDados.Cells(8).Value, "h:mm") & "', '" & Format(LinhaDados.Cells(9).Value, "h:mm") & "', " & LinhaDados.Cells(10).Value & ", " & LinhaDados.Cells(11).Value & ", '" & LinhaDados.Cells(12).Value & "', '" & LinhaDados.Cells(13).Value & "', " & LinhaDados.Cells(14).Value & ", " & LinhaDados.Cells(15).Value & ", '" & LinhaDados.Cells(16).Value & "', '" & LinhaDados.Cells(17).Value & "')" 

    BD.Execute SQL
Next

'循环结束后再关闭连接
BD.Close

额外注意事项

  • 原代码中Consulta.Open SQL, BD是多余的,INSERT操作不需要用Recordset打开,直接用BD.Execute执行即可
  • 字符串拼接SQL存在语法风险,若数据中包含单引号会导致SQL报错,建议使用参数化查询优化
  • 确保Excel工作表Apontamento的列名与SQL中的字段名完全匹配,部分ODBC驱动对大小写敏感

内容的提问来源于stack exchange,提问作者Rodrigo Gonçalves Costa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 19:04:50