delphi7 DBGrid 中怎么样使用多选删除二张不同的表?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi7 DBGrid 中怎么样使用多选删除二张不同的表?相关的知识,希望对你有一定的参考价值。

在DBGrid中显示表1,同时点选帐号为12,34这行记录,并删除,怎么让表2中帐号同为12,34的记录也一起删除?本人新手,还请各位高手指点一下。
上面那个图发错了,这个才对,表1中的帐号有可能会对应表2帐号中的多个记录
就是点选 表1中帐号为12,34并删除,表2中的帐号为12,34的3条记录一起被删 除

删除表1前,先删34的就可以了!按表12的关联字段搜索删了就OK追问

你好,能不能给代码??以便更好理解

追答

数据表1:字段:ID,Name,Link2ID

数据表2:   字段ID,Name;

LINK2ID一对多关联到数据表2 

假定:DBGrd1-->DS1->AdoQry1-》数据表1  ,  AdoQry2-》数据表2

随便托放一个adoquery或adocommand,执行删除的SQL命令

procedure delsublist;
begin
try 
 adoquery.close;
 adoquery.sql.clear;
 adoquery.sql:='delete from  表2 where ID='''+adoqry1.fieldbyname('Link2ID').asString+''''); //根据表1的LINK2ID的值删表2的相关记录
 adoquery.open;
  except
    showmessage('Delete False!');
    exit;
  end;
  adoqry1.delete;
  showmessage('Delete Success!');
end;

//代码手写可能不完善,基于SQL 数据库!

追问

'delete from 表2 where ID='''+adoqry1.fieldbyname('Link2ID').asString+'''');我改成这样'DELETE FROM 表2 where 帐号 in(select 帐号 from 表1 where 号帐'''+adoquery1.FieldByName('帐号').AsString+''')' 运行时提示帐号未找到。不懂那里错了

追答sql 中delete 语句不建议用 嵌套或多层查询,有的是不支持的,! 
你的这句
select 帐号 from 表1 where 号帐'''+adoquery1.FieldByName('帐号') 看起来有错误!!
号帐???另外后面的等号呢?

参考技术A 在表1对应的数据集的onbeforedelete事件中写代码,找到表2中的对应行并删除,即可。追问

你好,能不能给代码??以便更好理解

如何在DBGrid里实现Shift+“选择行”区间多选的功能!

DELPHI 的TDBGrid 控 件 主 要 用 来 处 理 数 据 表, 它 的 属 性 中 有 
一 个dgMultiSelect, 若 此 属 性 设 定 为TRUE, 则 可 以 选 中 多 个 记 录
( 可 用CTRL + 鼠 标 左 键 选 择 多 个 记 录)。 对 选 中 的 多 个 记 录
可 以 有 以 下 几 种 处 理 方 式, 比 较 简 单 的 两 种 是: 清 除 所 有
的 选 择 记 录 可 用DBGrid1.SelectedRows.Clear 语 句; 删 除 所 有 的 选 
择 记 录 可 用DBGrid1.SelectedRows.Delete 语 句。 但 如 果 想 获 得 选 中 
的 所 有 记 录 的 其 他 信 息, 比 如, 在 单 独 的 一 个 窗 体 中 显 示
用 户 选 择 的 记 录 的 第 一 个 字 段 的 内 容( 如 所 有 选 择 的 姓 名)
如 何 处 理 呢 ? 这 就 要 使 用 书 签 功 能 了, 下 面 是 笔 者 编 写 的
一 个 程 序 中 的 过 程, 用 来 将 用 户 选 择 的 多 个 记 录 集 中 显 示 
在 另 外 一 个 窗 体 中( 笔 者 使 用 的 是DELPHI4), 供 参 考 使 用。


procedure GetSelectedRecord
(DataSet : TDataSet; FieldName : String;
BookmarkList : TBookmarkList; Strings : TStrings);
file://这个过程中的参数分别为:数据表、字段名称、
书签、用来保存所选字段内容的
file://字符串(用于将内容传递到另
一个单独窗体中的TLIST控件中)
var
I: Integer;
bm : TBookMark;
begin
Strings.Clear;
with Dataset do begin
DisableControls;
bm := GetBookMark;
try
file://每个选择的记录都有一个书签标志,
这就为处理它们提供了条件
for I := 0 to BookmarkList.Count - 1 do begin
Bookmark := BookmarkList[I];
Strings.Add(DataSet.FindField(fieldname).AsString);
end;
finally
GotoBookMark(bm);
FreeBookMark(bm);
EnableControls;
end;
end;
end;

调用举例:
GetSelectedRecord(Table1, ‘NAME‘, DBGrid1.SelectedRows, 
Form2.ListBox1.Items

 

以上是关于delphi7 DBGrid 中怎么样使用多选删除二张不同的表?的主要内容,如果未能解决你的问题,请参考以下文章

delphi7中 OnDrawColumnCell 事件怎么用

delphi中的dbgrid数据操作

delphi6,能否在DBGrid组件中,对某一列的单元格,添加下拉菜单,实现多选功能

delphi dbgrid用shift多选?

DBGrid中Shift多选

dbgrid多选日记