关于字段关联的问题(30分)

  • 主题发起人 主题发起人 fstao
  • 开始时间 开始时间
F

fstao

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi的问题:
假如用paradox7新建table1.db和table2.db,其table2.db的字段为Id、name和price,其数据为:
id name price
1 A1 12.3
2 A2 23.45
3 A3 24.56


table1.db的字段为:Id(用来关联table2的id)。
在form1里添加TTable1控件,Ttable1是用来连接table1.db的,用TDbgrid1显示table1.db的数据。
我想在控件Ttable1添加两个新字段,Name(type为string,Field Type为Calculated)和Price
(type为Float,Field Type为Calculated),两个都是Calculated字段。我想这样,在dbgrid1
里显示id、name和price,当table1.insert时,在id写“1”,则name和price分别显示“A1”和“12.3”,
再table1.insert时,在id写“3”,则name和price分别显示“A3”和“24.56”,因为只要table1.db的
id与table2.db的id关联时,则显示相应的数据。我以前用Lookup来关联,我听说这样做不太好,
用Calculated来做好一点,我想只有写代码,那么如何在TTable1的id的Onchange写代码呢?
 
没太明白你的意思 table2---->table2.db的字段为Id、name和price
begin
with table2 do
begin
setkey;
locate('Id',table1.fidldbyname('Id').value);{可能是这么写}
end;
with table1 do
begin
insert;
fieldbyname('name').value:=table2.fieldbyname('name').value;
....price
end;
end;
 

if locate('Id',table1.fidldbyname('Id').valuelo,CaseInsensitive) then
begin
with table1 do
begin
insert;
fieldbyname('name').value:=table2.fieldbyname('name').value;
....price
end;

end;
 
这个问题我已经解决了,我想进一步如何解决比较复杂的关联问题。
delphi问题:
有四个表master.db(主表,字段masterid和po_id)、detail.db(从表,字段id、detailid、hp_id、price,id是主索引
,detailid是关联主表的masterid,hp_id是关联hp_ku的id,price是单价)、hp_ku(用来存放货品,字段为
id、name)和table1.db(字段为id、hp_id和po_id,id是主索引,hp_id是关联hp_ku.db的id,po_id
是关联master.db的masterid)。假如hp_ku.db、master.db和detail.db的数据如下:
hp_ku.db
id name
1 A1
2 B1
3 C1
4 D1
5 E1

master.db
masterid po_id
1 po_1
2 po_2
3 po_3

detail.db
id detailid hp_id price
1 1 2 23.34
2 1 3 45.23
3 2 5 12.34
4 3 1 46.12
5 3 4 90.23

在form1里添加masterquery(Tquery)连接master.db,detailquery(Tquery)连接detail.db,hpquery(Tquery)连接hp_ku.db。
最后一个query1(Tquery),它是用来连接table1.db,我想在query1新建一个字段Price(Type为float,Fieldtype为Calculated)
是一个Calculated字段。在添加dbgrid1,用来连接query1的。则dbgrid1显示字段为:
id hp_id po_id price


我想query1.insert时,在hp_id写“4”,po_id写“po_3”,则price立刻显示“90.23”。是这样在po_id写
“po_3”,它是跟master.db的po_id关联的,则master.po_id=po_3时,那么对应的从表detail.db字段detailid=3,
由于table1.db的字hp_id=4,所以price=90.23。同理,如果在dbgrid1写入hp_id=3,po_id=po_1,那么
price=45.23。我的问题是如何跟据在table1.db的字段hp_id和po_id的数据,使price显示相应的数据?
我知道用lookup是不可能实现的,只能用sql语句,好象在query1的onCalcFields事件里写代码,不过如何写?
 
请帮帮忙!
 
接受答案了.
 
后退
顶部