【问题标题】:Why am I getting an Error with TADOQuery select statement?为什么我收到 TADOQuery 选择语句错误?
【发布时间】:2019-05-22 15:48:46
【问题描述】:

每次我尝试设置这个变量的标题时,它都会给我“未指定的错误”,我已经得出结论......

我尝试直接从 TADOQuery 设置标题,并将值分配给一个变量,然后将其加载到标题中,但无论哪种方式,我都会收到未指定的错误。

    qry1.SQL.Text := 'SELECT Number of Games Owned FROM Users WHERE UserID = "' + sLoggedInUser + '";';
    qry1.Open;
    iCountGames := qry1['Number of Games Owned'];
    lblUserGamesOwned.Caption := 'Games Owned: ' + IntToStr(iCountGames); 

数据库设计:

Field Name               Data Type         Description
UserID                   Short Text        Maximum characters is 6
FirstName                Short Text        Maximum characters is 25
LastName                 Short Text        Maximum characters is 25
Cell Number              Short Text        Maximum characters is 10
Number of Games Owned    Number            Integer 

我希望代码将值加载到变量中,然后变量用于设置 TLabel 的标题,但发生的只是弹出未指定的错误,而 TLabel 保持不变。

【问题讨论】:

  • 为了Little Bobby Tables的爱,请养成使用参数的习惯。
  • 您真的在挑战这里的极限,我认为您的专栏名称只是为了询问目的,但在寻找接受的答案时,您实际上是真实的。如果你一直这样编码,你会掉进很多坑里。毕竟计算机是愚蠢的,你应该这样对待它们。您应该使用为此设计的变量/工具( AS 运算符),并停止与您一起杀死我们
  • 很遗憾,如果您让它自动执行操作或使用它的向导构建表,ms access 实际上鼓励您使用此类字段名称。更不用说你的母语中的对象名称......

标签: sql delphi ms-access ado delphi-2010


【解决方案1】:

我想你只需要在列名周围加上大括号:

SELECT [Number of Games Owned] FROM Users WHERE UserID = "' + sLoggedInUser + '";';

我还建议您使用参数传入UserId,而不是修改查询字符串。

【讨论】:

  • 谢谢!字段名称周围的[] 解决了它。不知道为什么我没有尝试...
  • @Andog 如果您要设计数据库,最佳实践是避免在字段名称中使用空格。它只会增加不必要的复杂性。
  • @Andog 也不应该有那么大的字段名称。从它的外观来看,你做错了。我假设您还有每个用户拥有的其他“游戏”表。为什么不简单地包含该表中的计数而不是该字段?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多