ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: larer

[求助] SQL问题求助大神

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-18 12:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
fenghuaxue 发表于 2024-12-18 11:20
直接通过其他客户端软件连接数据库,运行这个sql看下。

刚试了在DBEAVER中试了这个是没有问题的,可以正常更新,但是在VBA中就不行,提示语法错误.
2024-12-18_12h09_31.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-18 12:15 | 显示全部楼层
zpy2 发表于 2024-12-18 11:49
可能vba客户端不支持吧

begin;...commit;这种 的应该是服务器端解释执行的,VBA通过ado提交SQL语句给服务器,返回的错误要么是ADO要么是服务器,估计还是哪个地方没有配置好

TA的精华主题

TA的得分主题

发表于 2024-12-18 13:16 | 显示全部楼层
larer 发表于 2024-12-18 12:11
刚试了在DBEAVER中试了这个是没有问题的,可以正常更新,但是在VBA中就不行,提示语法错误.

把begin; commit;去掉呢,单个命令就是原子性的,不用加。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-18 15:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
fenghuaxue 发表于 2024-12-18 13:16
把begin; commit;去掉呢,单个命令就是原子性的,不用加。

单个命令是没问题可以执行的,但是在录入界面中的数据,包含了insert,update,delete等多项操作,希望一次性执行完毕,要么全部成功,要么一个也不执行,所以才在开始和最后加了begin 与commit

TA的精华主题

TA的得分主题

发表于 2024-12-18 15:27 | 显示全部楼层
larer 发表于 2024-12-18 15:21
单个命令是没问题可以执行的,但是在录入界面中的数据,包含了insert,update,delete等多项操作,希望一次性 ...

那就一条一条执行,先用";"号拼起来;执行的时候用";"拆开,一条一条跑,我就这么干过。

TA的精华主题

TA的得分主题

发表于 2024-12-18 15:28 | 显示全部楼层
fenghuaxue 发表于 2024-12-18 15:27
那就一条一条执行,先用";"号拼起来;执行的时候用";"拆开,一条一条跑,我就这么干过。

vba这么弱,既然你这些写跑不了,那就是不支持事务。

TA的精华主题

TA的得分主题

发表于 2024-12-18 15:56 | 显示全部楼层
不对,这里有一个使用事务的案例,AI给的,你可以参考下:
  1. Sub ExecuteMySQLTransaction()
  2.     Dim conn As Object
  3.     Dim cmd As Object
  4.     Dim connString As String

  5.     ' 创建连接和命令对象
  6.     Set conn = CreateObject("ADODB.Connection")
  7.     Set cmd = CreateObject("ADODB.Command")

  8.     ' 连接字符串
  9.     connString = "Driver={MySQL ODBC 8.0 Driver};Server=your_server;Database=your_database;User=your_username;Password=your_password;Option=3;"
  10.    
  11.     ' 打开连接
  12.     conn.Open connString

  13.     ' 开始事务
  14.     conn.BeginTrans

  15.     On Error GoTo ErrorHandler

  16.     ' 设置命令对象
  17.     With cmd
  18.         .ActiveConnection = conn
  19.         
  20.         ' 第一个 SQL 操作
  21.         .CommandText = "UPDATE `parament` SET `值` = '350' WHERE `参数名` = '欠费预警金额';"
  22.         .Execute
  23.         
  24.         ' 第二个 SQL 操作
  25.         .CommandText = "INSERT INTO `parament` (`参数名`, `值`) VALUES ('新参数', '100');"
  26.         .Execute
  27.         
  28.         ' 提交事务
  29.         conn.CommitTrans
  30.     End With

  31.     ' 关闭连接
  32.     conn.Close
  33.     Set cmd = Nothing
  34.     Set conn = Nothing

  35.     MsgBox "事务成功完成!"
  36.     Exit Sub

  37. ErrorHandler:
  38.     ' 回滚事务
  39.     conn.RollbackTrans
  40.     MsgBox "发生错误: " & Err.Description
  41.     If Not conn Is Nothing Then conn.Close
  42.     Set cmd = Nothing
  43.     Set conn = Nothing
  44. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2024-12-18 16:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
应该是说法错误,vba里的SQL语句本质上是字符串,大概率是字符串里的单引号没有处理好!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-19 07:58 | 显示全部楼层
WANT-T 发表于 2024-12-18 16:24
应该是说法错误,vba里的SQL语句本质上是字符串,大概率是字符串里的单引号没有处理好!

真让人头疼

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-19 07:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
fenghuaxue 发表于 2024-12-18 15:56
不对,这里有一个使用事务的案例,AI给的,你可以参考下:

你代码里的方法看起来还不错,晚点尝试一下
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-25 15:27 , Processed in 0.030993 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表