主从表的速度和查找字段的显示问题(200分)

  • 主题发起人 主题发起人 lccc
  • 开始时间 开始时间
L

lccc

Unregistered / Unconfirmed
GUEST, unregistred user!
对不起!问题比较长!
本人用FoxPro6.0编写了一个仓库管理程序,现用Delphi 5.0和
MSSQL Server 7.0改为C/S版本。
一、表结构:程序中有4个表分别如下:
1、 客户表Customer:CustID,CustName,Address,
Condition,Remark等;CustID为主索引。
2、 商品表Ware:CustID,WareID,WareName,WareUnit(单位),
WarePack(包装),Stock(库存)等,CustID+WareID为主索引,
CustID+Wa保存reName为唯一索引。(注:不能用WareID作主索引,因为
如果不同的客户可以有相同的商品,则在库存中无法区分各自有
多少库存)。
3、 入库主表EnterDepot:EnterID,CustID,CustName(查找),
EnterDate,EnterTime,EnterFare(入库费用),等
EnterID为主索引。
4、入库子表EnterDepotDetail:EnterID,WareID,Warename(查找),
WareUnit(查找),WarePack(查找),EnterNum等。
EnterID+WareID为唯一索引。
二、程序要做到:
A、增加一条入库记录后,Ware表中相应客户的相应商品的库存增加、
修改、减少。
B、如果修改、删除后,库存将出现负数,则不允许。如:入100,出了
50,库存余50,如果将入100改为入49则不行,删除也不行。
三、我的思路:
A、增加记录:选定客户-----》过滤商品为指定客户---》输入----》
保存(1、先保存EnterDepot,2、再保存EnterDepotDetail,3、增加
Ware表的相应商品的库存,4、保存Ware表)---》失败后回滚。
B、修改记录:将对应记录的商品库存减少----》修改----》
保存(1、先保存EnterDepot,2、再保存EnterDepotDetail,3、增加
Ware表的相应商品的库存,4、保存Ware表)---》失败后回滚。
C、删除记录:将Ente10:27 2000.09.26rDepotDetail相应商品的库存减少--》删除
EnterDepotDetail----》删除EnterDepot--------》保存
(1、先保存EnterDepot,2、再保存EnterDepotDetail)----》
Ware表的相应商品的库存,3、保存Ware表)---》失败后回滚。
四、现在的问题:
A、如果用EnterDepot.Next或EnterDepot.Prior时,如果EnterDepot的
Cust字段值改变,EnterDepotDetail中WareName等查找字段不显示。
B、速度非常慢:特别是在表格中增加一行时,更是如此。是程序的原因
还是SQL Server的原因,而在FoxPro中却非常快。
C、在出库时的方法和问题相同。


本人今年7月份才开始学习Delphi 和SQL Server,加入大富翁不到三天,
200分全送。望各位高手指教。
lccc, lccc@ppp.wzptt.zj.cn
 
》增加一条入库记录后,Ware表中相应客户的相应商品的库存增加、 修改、减少。
在Tdataset的afterinsert里处理
》如果修改、删除后,库存将出现负数,则不允许。如:入100,出了
>> 50,库存余50,如果将入100改为入49则不行,删除也不行。
写成触发器
c/s按照文件型处理的话速度是很受影响
 
建议修改库结构,单独建立商品表和客户库存表。
 
还是千中元是高手:
你可写为触发器:不过我总觉得你的表建的有问题?
至于速度,不会有多大影响!!!
你说你的速度慢,原因可能很多,象你上面哪末多查找子段,当然会影响速度,
就看你怎末处理,我知道,delphi有好多技巧科提高速度,建议你用LOOKUP字段,并且源
用TABLE,不要用QUERY,可提高不少速度,在就是多用SQL语句,也可提高速度!!!
记住,你刚才的问题,是典型的出入库及库存问题,如果系统较大,建议你一定要用触发器
可简单处理好多问题!!!
 
to 212 and zxqlover
谢谢!
关于表结构的问题,我想应该没有问题:
1、我所说的查找字段,即LookUp字段;
2、Customer和Ware表都在另外两个菜单中单独进行增、改、删;
3、关于使用触发器和Query问题,终究是SQL的技术,是否有Delphi
自己的解决办法。
 
To 千中元
谢谢
1、如果在子表EnterDepotDetail的AfterInster事件中处理,那么,
最初插入的是空记录,然后再输入数据,Ware表如何增加库存。
2、这样一来,在子表EnterDepotDetail进行修改、删除时如何增、
减库存。
3、关于触发器,是否可以有Delphi自己的解决办法。
4、由于程序很大(执行文件1.85M,程序ZIP源文件850K,数据库
文件压缩后仍然有2.75M),如果高手能指教,可以留下地址,我
将寄上磁盘供分析指教。
 
接受答案了.
 
后退
顶部