sql - 无法对已关闭的数据集和表中输入的数据不正确执行此操作

标签 sql delphi delphi-2010

我一直收到此错误,并且正在努力查找我做错了什么。没有意义的是,结果仍然发布到数据库,除了名称字段之外,所有字段都是正确的。由于某种原因,它在名称字段中输入“dmInfo”。

with dmQuery_u.dmInfo do
      begin
        dsInfo.Edit;
        qryData.SQL.Clear;
        qryData.SQL.Add('SELECT * FROM eventinfo ORDER BY eventnumber');
        qryData.Open;
        qryData.Last;
        autonum := qryData['eventnumber'] + 1;
        qryData.SQL.Clear;
        qryData.SQL.Add(
          'INSERT INTO eventinfo (eventnumber, bandname, venue, dateofevent, ticketcost, openingact, amountbooked)');
        qryData.SQL.Add(
          'VALUES (:eventnumber, :bandname, :venue, :dateofevent, :ticketcost, :openingact, :amountbooked)');
        qryData.Parameters.ParamByName('eventnumber').Value := autonum;
        qryData.Parameters.ParamByName('bandname').Value := name;
        qryData.Parameters.ParamByName('venue').Value := venue;
        qryData.Parameters.ParamByName('dateofevent').Value := date;
        qryData.Parameters.ParamByName('ticketcost').Value := ticketcost;
        qryData.Parameters.ParamByName('openingact').Value := openingact;
        qryData.Parameters.ParamByName('amountbooked').Value := amountbooked;
        qryData.ExecSQL;
        qryData.SQL.Clear;
        qryData.SQL.Add('SELECT * FROM eventinfo');
        qryData.Last;
        qryData.Open;

最佳答案

您的错误是在这里引起的:

 qryData.ExecSQL;
 qryData.SQL.Clear;
 qryData.SQL.Add('SELECT * FROM eventinfo');
 qryData.Last;  { !! should be after ---v }
 qryData.Open;  { should be first ---^ }

调用.ExecSQL执行非查询(即:不返回记录集)命令。由于此处没有有效的数据集,因此调用 .Last 将引发错误。您必须先调用.Open

对于使用 dmInfo 填充 name 字段的第二期,您因在此处使用危险的 with 语句而陷入困境:

 with dmQuery_u.dmInfo do
   {...}
    qryData.Parameters.ParamByName('bandname').Value := name;

此处的 with 语句隐藏了您要使用的 name 变量,并将其解释为 dmQuery_u.dmInfo.Name。要么删除 with 语句,并对所有内容使用显式限定符,要么更改 name 变量的名称。

关于sql - 无法对已关闭的数据集和表中输入的数据不正确执行此操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45615270/

相关文章:

mysql - 由于这些错误,无法继续进行 drupal 安装

sql - 加快SQL查询速度

node.js - 从 Node js调用带有pAnisChar的Delphi stdcall函数

delphi - 免费的 Delphi 编译器

delphi - 按钮控件和 TBitmap 的底层替代品,无需编写预混合代码即可正确处理 PNG 透明度

c# - 用c#检查一个表是否存在于oracle sql数据库中

sql - 范围身份与当前身份

delphi - 一次仅选中一个复选框

windows - 如何显示带有选定文件的资源管理器?

delphi - 如何声明交叉引用的类类型?