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