首页 > 解决方案 > 创建触发器查询以从 VBA 运行

问题描述

我想从 VBA (MS Access) 在 MariaDB (mySQL) 数据库中创建一个触发器。

DELIMITER $$ 
CREATE TRIGGER `updSortBy` BEFORE INSERT ON `cdevices` 
FOR EACH ROW BEGIN SET @maxOrd = 0; 
SELECT MAX(sortBy) INTO @maxOrd FROM cdevices WHERE levelID= NEW.levelID; SET NEW.sortBy = IF (@maxOrd IS NULL, 0, @maxOrd) + 1; 
END $$
DELIMITER ;

这在我粘贴 phpMyAdmin 时有效,但如果从 VBA 运行则失败。

这是VBA中的相应部分。我使用与其他语句一起使用的 ADODB 连接:

.CommandText = "DELIMITER $$ CREATE TRIGGER `updSortBy` BEFORE INSERT ON `cdevices` FOR EACH ROW BEGIN SET @maxOrd = 0; SELECT MAX(sortBy) INTO @maxOrd FROM cdevices WHERE levelID= NEW.levelID; SET NEW.sortBy = IF (@maxOrd IS NULL, 0, @maxOrd) + 1; END $$ DELIMITER ;"

.Execute

我收到语法错误:

错误号:-2147217900

错误信息:

[ma-3.1.5][10.1.40-MariaDB]你的SQL语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的“DELIMITER $$ CREATE TRIGGER 'updSortBy' BEFORE INSERT ON 'cdevices' FOR EACH ROW' 附近使用正确的语法

标签: mysqlvbams-accessmariadb

解决方案


将您的触发代码转换为单语句形式:

CREATE TRIGGER `updSortBy` 
BEFORE INSERT 
ON `cdevices` 
FOR EACH ROW
SET NEW.sortBy = COALESCE((SELECT MAX(sortBy) 
                           FROM cdevices 
                           WHERE levelID= NEW.levelID), 1);

现在它不需要在分隔符中重新分配。


推荐阅读