【问题标题】:EOleException with message 'Syntax error in FROM clause' delphiEOleException 与消息'FROM 子句中的语法错误'delphi
【发布时间】:2017-07-06 14:19:00
【问题描述】:

您好,我正在尝试让 SQL 从用户从列表框中选择的表中进行选择

这是我的代码

activity := cmbActivity.Text; //this is where the user selects a table to choose from
qryStudents.SQL.Text := 'SELECT * FROM :activity WHERE CompNo = :iCompNo'; //error here
qryStudents.Parameters.ParamByName('activity').Value:= activity; 
qryStudents.Parameters.ParamByName('iCompNo').Value := iCompNo;
qryStudents.Open;

我在 SQL 代码 (:activity) 中的 FROM 之后不断收到语法错误 任何帮助将不胜感激

【问题讨论】:

    标签: sql delphi


    【解决方案1】:

    您不能将 select 的 table 部分定义为参数,您需要动态构建 select 语句的该部分。

    activity := cmbActivity.Text;
    qryStudents.Close;
    qryStudents.SQL.Text := 'SELECT * FROM '  + activity + ' WHERE CompNo = :iCompNo';
    qryStudents.Parameters.ParamByName('iCompNo').Value := iCompNo;
    qryStudents.Open;
    

    :iCompNo OTOH可以定义为参数,防止SQL注入。

    【讨论】:

    • 该更改仍然存在相同的问题
    • 您确定活动变量具有有效的表名吗?顺便说一句,您的代码开头有一个 qryStudents.Edit,我已将其更改为 qryStudents.Close,因为当您更改其 SQL 属性时应该关闭您的查询。
    • 是的,它是一个有效的表名。在我处理这个 sn-p 之前,我确实关闭了 qryStudents.Edit。我得到一个语法错误,它在标题中到底是如何破坏我的程序的
    • @JaynillGopal:Marc 是对的,您无法使用参数指定要查询的表,因此为此 +1。您使用的是哪个 Sql 后端和 Delphi 查询组件。
    • 我在 delphi 中使用 ADOQuery 组件,并带有 Provider=Microsoft.Jet.OLEDB.4.0 连接
    猜你喜欢
    • 2022-11-08
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多