每次执行查询时(插入、删除、更新)。之后,我需要做选择*从表,这样我的信息可以看到网格控件?
例如:
UniQuery1是我的数据集。我使用的是TDBADvListView控件。
UniQuery1.Close;
UniQuery1.SQL.Clear;
SQL_QUERY:= 'insert into ListaCamiones(Tablilla,Marca,Modelo,Color) Values ('
+QuotedStr(a1)+','+
QuotedStr(a2)+','+
QuotedStr(a3)+','+
QuotedStr(a4)+')';
UniQuery1.SQL.Text := SQL_QUERY;
UniQuery1.Execute;我需要这样做吗,从ListaCamiones中选择*,这样我就可以在TDBADvListView上看到信息了吗?
发布于 2011-12-04 22:29:09
答案是肯定的和不是的!
是的,您必须再次执行SELECT查询才能聚合修改后的记录集,因为您不必将查询作为单独的执行来执行。
如果在INSERT/ update /DELETE查询字符串末尾追加分号,并立即按照所需的SELECT查询执行,则执行调用将同时更新记录并聚合更新的记录集以供显示。
此外,我也会改变您构建SQL字符串的方式!
const
INSERT_QUERY_STRING = 'INSERT INTO ListaCaminoes(Tablilla, Marca, Modelo, Color) VALUES ("%s", "%s", "%s", "%s"); SELECT * FROM ListaCaminoes';
// Now inside your method
UniQuery1.SQL.Text := Format(INSERT_QUERY_STRING, [a1, a2, a3, a4]);
UniQuery1.Execute;希望能帮上忙!
发布于 2011-12-05 00:16:39
一般来说,是的,因为根据我的经验,当您通过SQL语句进行数据库更改时:
我建议您使用单独的查询组件(UniQuery2)来执行您的SQL语句。您可以使用查询的ReQuery方法重新执行原始查询(UniQuery1)。根据所使用的数据库组件,您的本地游标可能会被重置。
或者,您可以追加/插入以添加记录,而编辑则可以更改UniQuery1的记录。这避免了重新执行原始查询的需要,因为这些更改被添加到查询组件本地缓冲的数据集记录中。但是,重新执行查询对于获取自上次执行查询以来其他用户添加/编辑的记录是必要的。
发布于 2011-12-04 22:41:43
如果您刚刚将信息插入到数据库中,您已经得到了它!
在某些SQL变体中(在mySQL中我是shure),您可以从API中获得命令"insert_id()“,该命令返回最后插入的数据集的AUTO_INCREMENT值。
如果您只想获得这个ID,这是一种方法(就像我说的那样,在mySQL上),但是如果您想获得其他数据,就必须再次查询它。在组合查询中(如前面发布的)或在两个单独的查询中。
很高兴帮忙!
https://stackoverflow.com/questions/8379040
复制相似问题