Delphi 删除dbgrid的多行选择

Delphi 删除dbgrid的多行选择,delphi,ado,Delphi,Ado,您好,我需要您的帮助来删除dbgrid中的许多行 首先,我的数据库是access,删除的错误是“没有足够的密钥列信息用于更新或刷新” 与dbgrid相关的adoquery是: 选择tblMessages.*,tblMessages.Direction,tblContacts.Name 从tblMessages LEFT在tblMessages.MobileNumber=tblContacts.MobileNum上加入tblContacts 式中(((TBL消息方向)=1)) 挖掘的方法是:ado

您好,我需要您的帮助来删除dbgrid中的许多行 首先,我的数据库是access,删除的错误是“没有足够的密钥列信息用于更新或刷新”

与dbgrid相关的adoquery是:

选择tblMessages.*,tblMessages.Direction,tblContacts.Name 从tblMessages LEFT在tblMessages.MobileNumber=tblContacts.MobileNum上加入tblContacts 式中(((TBL消息方向)=1))


挖掘的方法是:adoquery1.delete

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

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

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

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

顺便说一句,在SELECT语句中,您已经有了TBL消息。*,为什么还要包括TBL消息。说明?

“没有足够的键列信息用于更新或刷新” 此错误意味着您在删除记录后正在刷新DBGRID或dataquery,您只需执行此操作即可

 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;


亲爱的,此错误没有发生在通过方法adoqurey1.delete进行删除的过程中;我知道它是在删除记录时发生的。删除记录时,delete语句必须在记录集中找到该记录。显然,它没有足够的关于应该删除的记录的信息。我告诉过你ADO有一个错误,它会导致这个错误,而这个错误是在删除记录时发生的。所以你应该检查一下我在回答中提到的内容。