一个简单的数据库问题!(50分)

  • 主题发起人 主题发起人 DancingAgain
  • 开始时间 开始时间
D

DancingAgain

Unregistered / Unconfirmed
GUEST, unregistred user!
在主—明细表的界面上,主表是用诸如TDBEdit之类的,明细表是用TDBGrid.
Delphi提供ctrl+DEl键的方法来DBGrid中的记录。
我想提供更友好的界面来让用户删除明细表中的记录。
请问有甚末好方法吗?
(另:我采用了cachedupdates进行对两表的修改。)
 
>在主—明细表的界面上,主表是用诸如TDBEdit之类的,明细表是用TDBGrid.
>Delphi提供ctrl+DEl键的方法来DBGrid中的记录。
>我想提供更友好的界面来让用户删除明细表中的记录。
>请问有甚末好方法吗?
>(另:我采用了cachedupdates进行对两表的修改。)


直接自己写sql来操作master-detail表

根据master字段来select出detail,然后在query里操作不就行了!

要具体的程序,你得说具体一点。
 
主要/明细数据库的记录删除恐怕没有直接的语句(资料上介绍的),只能自己编程
解决(人工干预)
 
问题是这样的:对主表的删除我用了一个按钮来实现。
而对明细表我就不知该怎样向用户提供删除一条记录(并不删除主表的记录)的功能的界面了。
Delphi中可用Ctrl+DEl键来删除DBGrid中选定的记录。
但对用户来说不清晰。
我初次写数据库的小程序,没有任何经验,希望大家能帮帮我!
 
根据master字段生成的detail表也是一个数据集
,对他也是一样操作,query1.first,query1.delete.....
没有区别 .
 
to ZX:
其实这个问题主要是关于怎样安排用户界面的。
就是说怎样让用户方便的使用界面来删除明细表的DBGrid中的一条记录。
谢谢!
 
根据输入焦点,一个按钮也可以删除两个dbgrid的纪录,要删除一条纪录,用户必需
选定吧,就可以知道删除主表还是明细表.
 
to wgzhang:
用户可能并不会注意到输入焦点,能不能更直观一些?
采用怎样的界面让用户选定呢?
 
wgzhang:歇息了一晚上就被你把分抢走了!xixi....

DancingAgain:

你以设两个Button,不就可以了吗?Button的caption
可以写的明白一些,或者你根本可以不用DBGrid,自己写
数据显示部分,那么你可以把当前记录,当前焦点突出显
示出来!
 
to zx:
我在界面上已用了不少button了。
而且我本想用双击之类的方法,但不知如何实现。
(DBgrid的selectedrows之类的属性实在不好用。)
至于自己写数据显示部分,对于我者个刚开始编程的人来说是不是太难了?
 
其实自己写也不难!

这样,万一不幸,您可以响应DbGrid的CellClick事件.
弹出窗口或者PopMenu.提示删除或者修改当前记录就ok!
 
不要试图用什么SELECTEDROWS来删除DBGRID的一行,尽量不去控制DBGRID,
当你双击时直接用'TABLE.DELETE'不就删除当前的记录了。
 
刚做了一个试验,完全可以.
声明一个Dataset,当用户进入一个DBGrid,就把这个Dataset赋给此变量.
var
Form1: TForm1;
MyDataSet:TdataSet;

implementation

{$R *.DFM}

procedure TForm1.DBGrid1Enter(Sender: TObject);
begin
MyDataSet:=DbGrid1.DataSource.DataSet;
end;

procedure TForm1.DBGrid2Enter(Sender: TObject);
begin
MyDataSet:=DbGrid2.DataSource.DataSet;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
MyDataSet.Delete;
end;

end.
 
to wgzhang:
谢谢!
用户可能并不会注意到输入焦点,能不能更直观一些?
(而且主表并不是用DBGrid.)

to zx:
谢谢!
自己写我连应从哪个控件继承都不知道。

to nickname:
谢谢!
不行我就用在双击时做。
 
不用自己写控件!

您可以响应DbGrid的CellClick事件.
弹出窗口或者PopMenu.提示删除或者修改当前记录就ok!

程序的写法按上面的就可以!
 
DBEdit也有datasource,而且都有Enter事件,只要用户选择,进入DBGrid或DBEdit
就会产生Enter事件,此时要处理那个数据集也已经选好,不用用户操心.
procedure TForm1.DBEdit1Enter(Sender: TObject);
begin
MyDataSet:=DBEDit1.DataSource.DataSet;
end;
 
其实我主要的目的是提供一个清晰的界面,让用户一看就知道怎样是删除主表记录。
怎样是删除明细表中的一条记录。
而并不是怎样在程序中删除记录。
 
>其实我主要的目的是提供一个清晰的界面,让用户一看就知道怎样是删除主表记录。
放个DBNavigator不就行了?什么都不用写.
 
to wgzhang:
那明细表怎末办?
 
就是的,删主表用个Button,明细表对应一个DBNavigator,难到这样不清楚吗?
我们的程序就是这么做的,用户也从来没有搞混过。
 
后退
顶部