【问题标题】:Having an issue with a SQL string not actually doing anythingSQL 字符串有问题实际上没有做任何事情
【发布时间】:2017-02-21 22:40:56
【问题描述】:

我正在为大学(英国大学,而不是大学)开发一个项目,它非常小,但包含一些 SQL,因为我有一个数据库来跟踪用户所做的一切。在我的帐户创建页面上,我有一个针对我的数据库运行此 SQL 的查询:

INSERT INTO Users (UName, FName, SName, PWord, ULevel)
VALUES (:pmUName, :pmFName, :pmSName, :pmPWord, :pmULevel);

任何以:pm 开头的参数都是我可以在 Delphi 中控制的参数,我只是想知道是否有一些非常重要的东西我遗漏了,因为它在执行时不会插入到表 Users 中。

【问题讨论】:

  • 日志说什么? (他们还在教德尔福,哇)
  • 可能是一切,没有表模式和错误日志就不可能回答。但是,非常奇怪的是,您 INSERT 是一个只有 ULevel 而没有其他数据的新记录。我的一个疯狂猜测是,您在插入时省略了不可为空的列,而没有默认值...
  • 我没有任何日志,我也不确定如何生成日志,但似乎它甚至没有触及数据库,我正在运行 Access 2003 数据库因为这似乎是 Delphi 在这种类型的连接上唯一会与之通信的东西(我认为它是一个较旧的协议,我在 XE4 中使用它,但这是我现在在 XE10 中习惯的)。添加 StevenMcGovern 建议的内容,表格的布局看起来像 this,我已经将 ULevel 移动到看起来像编辑过的原始帖子
  • 您使用的是哪个 DBMS?您是否正确提交了插入?您是否正确处理代码中的错误?
  • 你能贴出你用来执行那个 SQL 的 Delphi 代码吗?,它一定是那里缺少的东西。

标签: sql database delphi


【解决方案1】:

根据您使用的数据库,您可能在需要提交的事务中运行 SQL? (即BEGIN; 通常会启动一个事务,COMMIT 将提交所有内容,如果任何 SQL 出现错误,ROLLBACK 会提交)。

但作为第一步,您的日志将显示 NimChimpsky 建议的实际错误。

【讨论】:

    【解决方案2】:

    这可能会让我的问题被否决,但是在跟踪代码一百万次之后,我注意到我的用户名的验证被颠倒了,所以如果用户名已经存在,它会通过,但如果它不存在,它会返回 false 并且不执行 SQL。我很久以前写了那个特定的代码,直到我让一个朋友查看了这个项目并且他们决定跟踪它之前我认为这不是问题。 SQL 实际上并没有什么问题,因此向那些花时间诊断非问题的人致以深深的歉意。

    TLDR: 在假设代码错误之前确保代码正在执行

    【讨论】:

    • 很高兴你把它整理出来,它只是证明两双眼睛比一只眼睛好。另一件事是尝试向某人解释您的代码在做什么。但是,这不应该是真正的答案,所以请将其替换为对您的 q 的编辑(尽管您可能会发现它被选为题外话)。
    • 我听说过一种叫做橡皮鸭解决方案的东西,程序员向橡皮鸭解释他们的解决方案并帮助他们调试问题。我可能得去买只鸭子......
    猜你喜欢
    • 2016-09-20
    • 2019-12-29
    • 2016-08-24
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    相关资源
    最近更新 更多