无法对已关闭的数据集执行此操作,并且不正确的数据输入到表中

时间:2017-08-10 13:34:14

标签: 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;

1 个答案:

答案 0 :(得分:2)

您的错误是由此引起的:

 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

对于填充name的{​​{1}}字段的第二期,您在此处使用危险的dmInfo语句被抓获:

with

此处 with dmQuery_u.dmInfo do {...} qryData.Parameters.ParamByName('bandname').Value := name; 语句隐藏了您要使用的with变量,而是将其解释为name。要么删除dmQuery_u.dmInfo.Name语句并对所有内容使用显式限定符,要么更改with变量的名称。