繁体   English   中英

Delphi Unidac MySQL 从备忘录代码语法错误创建触发器

[英]Delphi Unidac MySQL Create Trigger From Memo Code Syntax Error

这是我的 MySQL 触发代码;

DELIMITER //
CREATE TRIGGER pdfdenemeu BEFORE INSERT
ON denemetbl
FOR EACH ROW
BEGIN
  SET NEW.iki =  CONCAT(NEW.bir,'.pdf');
END//
DELIMITER ;

当我在 HeidiSQL 上运行此代码时,它会创建触发器并完美运行。

在 Delphi XE7 上,我添加了一个按钮和一个备忘录,将这段代码放在备忘录中,按钮的 onclick 事件是;

sorgu.Close;
sorgu.SQL.Clear;
sorgu.SQL.Add(trim(memo1.text));
sorgu.ExecSQL;

当我点击按钮时,它返回语法错误; 错误截图

也试过如下;

sorgu.Close;
sorgu.SQL.Clear;
sorgu.SQL.Add('DELIMITER //');
sorgu.SQL.Add('CREATE TRIGGER pdfdenemeu BEFORE INSERT');
sorgu.SQL.Add('ON denemetbl');
sorgu.SQL.Add('FOR EACH ROW');
sorgu.SQL.Add('BEGIN');
sorgu.SQL.Add('SET NEW.iki =  CONCAT(NEW.bir,''.pdf'');');
sorgu.SQL.Add('END//');
sorgu.SQL.Add('DELIMITER ;');
sorgu.Execute;

正如我提到的触发代码在 HeidiSQL 和 MySQL 命令行上没有任何错误,为什么我收到此错误消息,我做错了什么?

正如@olivier 提到的 DELIMETER 是 HeidiSQL 特有的,我尝试删除 delimeter 并再次尝试但没有解决问题,但我所做的是用我的新代码中的 delimeter 调用旧代码,当我认为我删除了 delimeter 但是我不是。

因此,正如@olivier 在第一篇文章的评论中提到的那样,我将查询更改为此;

CREATE TRIGGER pdfdenemeu BEFORE INSERT ON denemetbl FOR EACH ROW BEGIN SET NEW.iki= CONCAT(NEW.bir,'.pdf'); END;

工作完美。 @olivier 谢谢,我欠你一个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM