当前位置:主页>销售管理软件> 列表

关于主从表的一些问题,请各位高手指教! 找服装进销存软件

进销存软件版1楼: 在给公司做系统时,遇到一些主从表的问题,虽然在论坛上找了很久,但一直没有很好的解决,请高位搞手指点!
主从表有两个表(用adotable,dbgrideh组件),一个是出货主表,一个是出货的明细表,两个表的id是送货单号(outnto),送货单号是自动编号,唯一的;
现在情况是:一点击新增按钮,主表会产生一个送货单号,要先必须保存送货单号(这是两个表的id),然后才能在从表里面输入出货的明细(输入是在表格里面直接输),因为主表不保存送货单号的话,从表无法取得主表的id,光标往下一移一行的话,前面已输入的一行数据无法显示.我现在不想一按新增就要保存送货单号,因为可能输错的情况下,要放弃这张送货单时,要写代码删掉这一个号码,而不能cancel号码,并且还在一些其他字段要处理,所有希望在点保存按钮时,再产生和保存送货单号,这样更科学一些。但主表不首先保存送货单号码,明细表的记录又没办法输,这就是问题的所在,该怎么解决好!!,请各位高手请教!!!,我在这个论去找了很久,也有人提出这个问题。但好像没有解决好,请各位高手指教。
我看见一些其它软件,不会有这个问题,按新增按钮,到了新增界面,并没有产生保存什么号码,然后在从表里面输完记录后,再点保存按钮,就会产生号码,连同明细记录一并保存了,不知道怎么实现的?我试过用adotable做主从表,用adoquery组件做主从表,都一样,你非得要在主表里面先保存那个id,才能在从表里面输,不然你前面输的不显示,从表里面永远只显示一行!我想了半天,难道新增时候要取消他们之间的主从关系?等到保存完了再恢复他们之间的主从关系?这样处理行不行的?望高手指教!

2楼: 他们是用 TEdit 和 TStringGrid 控件先输入数据,在按保存按钮后在加入数据库。 如企业财务软件

3楼: 难道只能用stringrid能解决,dbgrideh不能解决?作stringgrid比较麻烦

4楼: 先产生一个主单号, 再录入,如果录入出错, 则删除从表里面的含有有前主单的和主表的这条记录不行么?

5楼: 在一些软件中是这样处理的:新增和修改两个按钮点击时,只是置了一下当前的操作状态(添加状态、修改状态),在保存的时候根据当前操作状态的不同进行不同的数据处理操作。另外还有一个取消按钮,用来恢复状态。
关于编码的问题:送货单号是在主表保存的时候产生的。如果你用的是大型数据库的话可以在保存数据的存储过程里产生(也可在触发器里产生),这样可以保证单号的唯一性、连贯性和当前最大性,即使是多用户操作也不会冲突。如果你用的是单表数据库,那就在程序里产生,反正是单机的,不会发生什么错误。主表保存完了返回当前送货单号,然后用此送货单号保存明细表。
数据的操作顺序基本是这样的,至于在你的程序是分步表现的还是整体表现的,那就看你的程序怎么写了。

6楼: 使用ADO的缓存功能试一下,

进销存软件版7楼: weichao9999兄,多谢回复!但我的问题是如果不先保存主表的号码,明细表就没法输入记录.怎样才能在主表没有保存号码时,明细表也能一次性的输完所有记录?

8楼: ado缓存能解决单表批量输入,能解决主从表的比量输入,都是一样,你不先保存主表的id号码,从表里面永远只显示一行,光标根本不能下移!

9楼: weichao9999分析得很好。
lovewjm你的从表应该可以继续的 设置你的从表控件TADOQUERY处于编辑状态就可以了

10楼: deadlykiss,
将组件设置成编辑状态就可以?adoquery1.edit是不是这样?

11楼: 试了一下,好像不行啊,我发现对于主从表输入明细记录时,除非将主表的id字段(这里是送货单号)先保存,从表会自动取得这个id后,才可以在从表里面一行一行的输入数据,前面的行不会消失.否则你不先保存主表这个id,从表是不能一行一行输的.前面一行输的马上就不会显示,不标也不会下移
我如果不想先保存这个号码,有哪位高手知道处理这程情况?

12楼: 你的adoquery1要有数据源
请在编辑数据前设置sql属性为select * From TableName Where 1=0
接下来open 如服装进销存软件

13楼: 当然首先这个adoquery1要设置为客户端缓存

进销存软件版14楼: 我想问题是因为主键为自动编号,我试过,将两个DataSet设成主从表的方式,如果主表主键能立即确定(即赋值),则可以正确自动处理从表;如果是自动编号,则不行(李大嘴的书里说过可以的,但我一直没找到方法)。

15楼: deadlykiss,
select * From TableName Where 1=0?这是啥意思?
老兄,能不能整个表的设置完整详细的说明一下?先谢了

16楼: 先做这样的测试
1设置你的ADOQuery1: TADOQuery;的Connection属性为ADOConnection1
设置cursorlocation为clUseClient 、LockType为ltBatchOptimistic
SQL属性“select * From C_Brand where 1=0” 随便一张表 ,Active为True
2用一个datagrid来显示你的表,其他自己设置
运行看看 你会发现你的数据表可以自由编辑 这些都在客户端缓存 并不提交到数据库
你仔细点的话可以发现主键ID还可以重复 输完一条记录 按“↓”键就可以增加一条记录


3提交的时候你需要用事务处理来提交

17楼: 主从表更新、修改
从表编辑,则主表必须处于编辑模式;主表要保存,从表必须先保存。

18楼: 我试下先.多谢!!!

19楼: 试了一下,还是一样,主表还是得先保存主键(送货单号码),从表才能对那个表自由编辑,如果主表只是append了,但没有用post保存任保内容,则从表还是会一样只显示一行,不能往下输!,有谁能解决这个问题?