【问题标题】:Unspecified error MySQL function & Delphi未指定的错误 MySQL 函数和 Delphi
【发布时间】:2014-02-18 20:15:15
【问题描述】:

我尝试在 Delphi 中调用 MySQL 函数,但我无法获得 Unspecified error.

示例函数 1 是:

CREATE FUNCTION `TEST`(`test` INT)
    RETURNS INT
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
    RETURN 123+TEST ;
END

另一个 SQL 函数示例:

CREATE FUNCTION `GET_OPTION_AS_INT`(`id` INT)
    RETURNS bigint(20)
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT 'GET option value'
BEGIN
    RETURN CAST((SELECT `option_value` FROM `OPTION` WHERE `option_id` = `id`) AS UNSIGNED); 
END

我的 Delphi 代码是:

  qry1.Close;
  qry1.SQL.Clear;
  qry1.SQL.Add('SELECT `TEST`(:test)');
  qry1.Parameters.ParamByName('test').Value := 1 ;
  qry1.Open;

第二个 Delphi 代码:

  qry1.Close;
  qry1.SQL.Clear;
  qry1.SQL.Add('SELECT GET_OPTION_AS_INT(:id)');
  qry1.Parameters.ParamByName('id').Value := 1 ;
  qry1.Open;

这是一个简单的示例,否则我将使用与 GET_OPTION_VALUE 和 ... 相同的其他功能进行测试

我该如何解决?

【问题讨论】:

  • 很难说。但是回到你的问题;为什么在查询中将函数名称括在引号中?我不喜欢 MySQL,但那些引号不是(主要是?)用于常量字符串值吗?那不应该只是SELECT TEST(:test)吗?您是否尝试过在数据库管理应用程序中运行该语句?
  • 因为 mysql 知道内部值与 table_name colum_name 或 function_name 相同的引号,并且我在没有引号的情况下进行测试。与 SELECT GET_OPTION_AS_INT(:id) 相同,是的,我使用 Heidi SQL 进行测试,效果很好,我复制了 sql从那。

标签: mysql sql function delphi delphi-xe3


【解决方案1】:

目前,这是一个函数还是一个选择语句是无关紧要的。 参数 :test 不是通过简单地将一些文本分配给 qry1.SQL 来创建的。

使用检查你的函数

  qry1.Close;
  qry1.SQL.Clear;
  qry1.SQL.Add('SELECT TEST(1)');
  qry1.Open;

如果您在设计时创建查询,那么在可视 SQL 查询对象 ParamByName 中设置参数类型将起作用。

使用参数动态创建 SQL 毫无意义,因为此时您知道参数值将是什么......

【讨论】:

  • Unspecified error 再次,我在提问之前测试它。
猜你喜欢
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 2017-11-27
相关资源
最近更新 更多