关于数据唯一性的问题(然后就开始3毛流浪记)(56分)

  • 主题发起人 主题发起人 千中元
  • 开始时间 开始时间

千中元

Unregistered / Unconfirmed
GUEST, unregistred user!
master.db: Detail.db

gcmc * //工程名称 xh + *
gcxm * //工程项目 gcmc *//gcmc-gcxm定义成副索引
xmxh gcxm *//再与master.db 的gcmc,
tmjth nf *//gcxh,定义数据完整性
gcxmbz yf *
smzl //饰面总量 bysm
qzl //铨总量 byq
tzl

在‘增加‘时候,如果遇到与master表中gcmc-gcxm组合一样的值,则master表中不能再增加记录。
请问该怎么实现?
 
每张表增加一个ID字段做为主索引,如是Paradox,设为‘+‘(自动增量)即可
 
本来不管也行,不过那样程序就太太残了。。。不好意思拿出去
 
那样又有了新问题:如果增加了ID,引用完整性怎么定义呢?
 
两个ID间没必要定义引用完整性啊
 
我所认为的引用完整性是这样的(可能概念就错了。。):
在detail表的gcmc-gcxm没有删除完
master表的gcmc-gcxm不能删除。
比如,master
gcmc 汽车1
gcxm 轮胎1
smzl 100(万)
在 detail 表的最后一条记录,如
gcmc 汽车1
gcxm 轮胎1
nf 20000 (年)
yf 12 (月)
没有被删除钱,master表中不能删除gcmc=汽车1,gcxm=轮胎1的记录

 
设置一个计算字段,gcmc+gcxm,做主键。。。头脑乱想开了。。明天再请教吧。。
 
你还有x分没拿出来呢
 
您的表设计没有唯一的字段吗?
这样的表设计不好.
是否应该加入唯一的编号字段.
 
to kang,
我还是剩下三分吧(因为给了那三分你也不帮偶咯)
to delphi,
detail 表中的xh 是唯一性字段。
master表中,现在还不知道该怎么才可以达到'gcmc-gcxm'唯一
 
把gcmc,gcxm都设置成key不就做到唯一了吗.
 
在master.db中设置主索引字段为
gcmc * //工程名称
gcxm * //工程项目
当增加的时候
try
增加主表
finally
增加细表
end;
本来是想,相同的gcmc-gcxm则不在master表中增加相应的smzl(饰面总量)。。等
可现在居然出现有多条相同的gcmc-gcxm记录。smzl 值也可以不同???!!!

 
你在 database desktop 中添加记录试试,如果能加入重复记录,说明你的主键没建好.
 
在database desktop下是不能增加的,可是程序中却可以。不过gcmc,gcxm字段都为空,而其他数据写入到表中。
这样不影响使用(如查询,计算。。),但增加了很多垃圾
 
设置gcmc, gcxm 为 Required field
 
改为required field,现在出现了新问题:
在master表和detail表全为空的时候开始增加记录
在query的Edit状态下,已经在Dbedit中填写数据,按下addbitbtn 后,
错误提示:'gcmc'field不能为空。

procedure TForm1.addBitBtnClick(Sender: TObject);
var i:integer;
begin
if (not datasource2.AutoEdit) or (not datasource1.AutoEdit) then
begin
showmessage('must be in edit mode');
exit;
end
else
try
with query2 do//增加master中记录
begin
open;
AppendRecord([combobox3.text,combobox4.text,strtoint。。。。
close;
end;
finally
。。。。。。
with query1 do//增加Detail中记录
begin
appendrecord([nil,combobox3.text,combobox4.text,strtointcombobox1.text),strtoint(combobox2.text)......);
end;
 
提前:)
 
to kang,
这些分也不少啊。。差不多全部家当
 
还有什么问题呢?
>>错误提示:'gcmc'field不能为空。
你不是希望不为空吗?
 
当master,detail是两个空表,开始输入数据(通过程序)
try
query2.appendrecord(...) 输入master表(包括gcmc,gcxm....)
finally
query1.....输入detail表
end;
按照原来的想法,应该已经在query2.appendrecord时候把gcmc,gcxm的值输入,不再是空。怎么会出现这样的提示:不能为空。?
 
后退
顶部