ORDER BY 子句中的语法错误和条件表达式中的数据不匹配

Posted

技术标签:

【中文标题】ORDER BY 子句中的语法错误和条件表达式中的数据不匹配【英文标题】:Syntax Error in ORDER BY clause and data mismatch in criteria expression 【发布时间】:2015-01-23 11:16:48 【问题描述】:

此代码给了我一个数据不匹配错误,我在谷歌搜索数小时后无法解决。非常感谢您的帮助。

代码是查找“帆号”(一个字符串值)与按钮上的标题相同的位置以及最新比赛的位置(因此顺序描述限制为 2)

ADOQuery.Close;
ADOQuery.SQL.Clear;
ADOQuery.SQL.Add('SELECT * FROM MemberRace WHERE SailNumber='+ TButton(sender).Caption + ' ORDER BY Race_ID DESC LIMIT 2;');
ADOQuery.Open;

【问题讨论】:

【参考方案1】:

Ms-Access 不支持Limit。使用Top 而不是Limit

SELECT Top 2 * 
FROM MemberRace 
WHERE SailNumber='+ TButton(sender).Caption + ' 
ORDER BY Race_ID DESC 

【讨论】:

谢谢。这消除了 ORDER BY 错误,但仍然让我在标准表达式中出现数据不匹配。你能解释一下这实际上意味着什么吗? @DanMassey 确保 TButton(sender).Caption 也会返回字符串 有没有一种简单的方法可以做到这一点。我在谷歌上找不到任何东西 TButton(sender).Caption.ToString() @GiorgiNakeuri - 最好将其发布为答案【参考方案2】:

现在你得到:

SELECT * FROM MemberRace WHERE SailNumber=5 ORDER BY Race_ID DESC LIMIT 2

因为 SailNumber 是字符串,而 5 是整数,所以会出错。 你应该得到以下语句:

SELECT * FROM MemberRace WHERE SailNumber='5' ORDER BY Race_ID DESC LIMIT 2

您还需要将LIMIT 更改为TOP(请参阅@NoDisplayName 的答案)。所以你最终得到了

'SELECT top 2 * FROM MemberRace WHERE SailNumber='+ '''' + TButton(sender).Caption + '''' + ' ORDER BY Race_ID DESC;'

【讨论】:

以上是关于ORDER BY 子句中的语法错误和条件表达式中的数据不匹配的主要内容,如果未能解决你的问题,请参考以下文章

存储过程 - 在 ORDER BY 列表位置 2 中遇到常量表达式

SQL 错误“视图中的 ORDER BY 子句无效...”

JPA 和 SQL Server 的 ORDER BY 子句中的列无效

简述SELECT语句中的FROM、WHERE以及ORDER BY子句的作用。SQL Server

sqlserver 创建视图失败,原因:ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效

SQL Server 查询错误 -ORDER BY 子句在视图中无效