删除dbgrid的多选行

时间:2010-11-22 11:31:50

标签: delphi ado

您好我需要帮助删除dbgrid中的多行 首先我的数据库是访问,删除错误是“更新或刷新的密钥配置信息不足”

与dbgrid相关的adoquery是:

SELECT tblMessages。*,tblMessages.Direction,tblContacts.Name FROM tblMessages LEFT JOIN tblContacts ON tblMessages.MobileNumber = tblContacts.MobileNum WHERE(((tblMessages.Direction)= 1))

和删除方法是:adoquery1.delete;

2 个答案:

答案 0 :(得分:1)

这与dbGrid无关,它是执行操作的数据集(adoQuery1)。 dbGrid只是可视化您的数据集记录。

确保所有表都有主键字段。我想你也应该在SELECT语句中包含两个连接表的主键。

Microsoft ADO中存在一个已知错误,我不确定它是否已在最新版本中修复;那就是:

BUG: Problem Updating ADO Hierarchical Recordset When Join Tables Share Same Column Name

它说,如果一个表中的主键与另一个表中的一个字段具有相同的名称,并且这些表连接在一起,那么您可能会得到“不足的键列信息以进行更新或刷新。“错误。

BTW,在你的SELECT语句中,你已经有了tblMessages。*,为什么你也包括tblMessages.Directions?

答案 1 :(得分:0)

“键列信息不足,无法更新或刷新” 此错误意味着删除记录后您正在刷新DBGRID或数据查询,您只需执行此操作

 var
  sql_String;
begin
 sql_:'DELETE * FROM [yourTableName] WHERE [id] = '+DBGRID.Fields[0].AsInteger; // OR whichever Fielnumber that stores id (PrimaryKey) of the table
 AdoQuery1.Active:= False;
 AdoQuery1.SQL.Clear;
 AdoQuery1.SQL.Add(sql_);
 AdoQuery1.ExecSQL;
 // to refresh your data you have to deactive and active the data that is showing your data in the query
 MainData.Active:= False;
 MainData.Active:= True;
end;