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 中遇到常量表达式
JPA 和 SQL Server 的 ORDER BY 子句中的列无效
简述SELECT语句中的FROM、WHERE以及ORDER BY子句的作用。SQL Server