Delphi 删除dbgrid的多行选择
您好,我需要您的帮助来删除dbgrid中的许多行 首先,我的数据库是access,删除的错误是“没有足够的密钥列信息用于更新或刷新” 与dbgrid相关的adoquery是: 选择tblMessages.*,tblMessages.Direction,tblContacts.Name 从tblMessages LEFT在tblMessages.MobileNumber=tblContacts.MobileNum上加入tblContacts 式中(((TBL消息方向)=1))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
挖掘的方法是: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有一个错误,它会导致这个错误,而这个错误是在删除记录时发生的。所以你应该检查一下我在回答中提到的内容。