delphi7表中如何加序号

qq_36611255 2016-11-04 03:11:07
用sql2000 query dbgrid
我有一个销售表,表里有序号(dj_sn)字段,在销售开票时序号自动增加并存入数据库中,现在增加可以,但是假如删除一行时,这个序号就不对了,(假如:我有10行数据,我删除第一行,那行后面的序号就要依次减一才对)就要从新算序号赋值到dj_sn这列,现在就是速度太慢了,还有什么办法呢?
...全文
2170 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
NC217 2017-07-20
  • 打赏
  • 举报
回复
在数据表里设置成Auto number 序列号就会自动排序了
doloopcn 2017-07-20
  • 打赏
  • 举报
回复
在dj_dn字段的OnGetText事件中加入代码: Text:=Sender.DataSource.DataSet.RecNo
gjmwhw 2017-04-25
  • 打赏
  • 举报
回复
引用 6 楼 lyhoo163 的回复:
不需要使用表的序号。因为每个单子,能有它自身的序号。 打印表格时,序号使用RecNo,即可。非常方便。
------------------------------ 这里所说的 RecNo 是adoquery 中属性。果然很方便!
qq_36637055 2017-02-16
  • 打赏
  • 举报
回复
表中有序号字段,在销售开单时,序号会时实的更新到表里,这样在发生意外(停电或断网)后可以调出来继续开单,所以不能用临时的办法
xxfly 2017-02-16
  • 打赏
  • 举报
回复
如果需更新数据库编号可以这样 UPDATE TableName Set No=No-1 where No>DelNo
ynquan 2017-02-16
  • 打赏
  • 举报
回复
表中不要放序号,放一个状态字段就可以了。 如果非要放一个序号,在状态临时改变时把序号加进去可以了。
lizjf 2016-11-22
  • 打赏
  • 举报
回复
procedure Tfrm_zj.DBGridPane3Main1DBTableView1RowNoGetDisplayText( Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord; var AText: String); begin inherited; AText := IntToStr(ARecord.Index + 1); end;
reverzeng 2016-11-19
  • 打赏
  • 举报
回复
一般是允许单据号不连续,如果是同一个单据的明细需要连续,可在审核时处理,重新计算序号
yellowlongriver 2016-11-19
  • 打赏
  • 举报
回复
引用 12 楼 liups 的回复:
[quote=引用 11 楼 yellowlongriver 的回复:] [quote=引用 7 楼 liups 的回复:] 逻辑设计上有问题
使用临时表或者内存表来临时保存销售数据,当保存销售单的时候,才写入到销售表中,写一条加一个序号[/quote] 多用户时如何办?这种思路要不得! 不如这样:票号+票中行号 构成这个号![/quote] 多用户没有问题,每个用户创建临时表对用户来讲,表名是一样的,但sql server管理时是有唯一的表名的,临时表是用完就消失的,由sql server自己管理的
liups 2016-11-19
  • 打赏
  • 举报
回复
引用 11 楼 yellowlongriver 的回复:
[quote=引用 7 楼 liups 的回复:] 逻辑设计上有问题
使用临时表或者内存表来临时保存销售数据,当保存销售单的时候,才写入到销售表中,写一条加一个序号[/quote] 多用户时如何办?这种思路要不得! 不如这样:票号+票中行号 构成这个号!
yellowlongriver 2016-11-19
  • 打赏
  • 举报
回复
引用 7 楼 liups 的回复:
逻辑设计上有问题
使用临时表或者内存表来临时保存销售数据,当保存销售单的时候,才写入到销售表中,写一条加一个序号
tanqth 2016-11-09
  • 打赏
  • 举报
回复
楼上是一种方式,还有一种方式,如果确定使用的是SQL2000,可以使用触发器,在发生删除事件时,执行一下更新SQL,把序号等记录号。
lizjf 2016-11-09
  • 打赏
  • 举报
回复
procedure Tfrm_zj.DBGridPane3Main1DBTableView1RowNoGetDisplayText( Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord; var AText: String); begin inherited; AText := IntToStr(ARecord.Index + 1); end;
liups 2016-11-08
  • 打赏
  • 举报
回复
逻辑设计上有问题
lyhoo163 2016-11-08
  • 打赏
  • 举报
回复
不需要使用表的序号。因为每个单子,能有它自身的序号。 打印表格时,序号使用RecNo,即可。非常方便。
  • 打赏
  • 举报
回复
如果"每张单据里有都序号",那就不应该"我有10行数据,我删除第一行,那行后面的序号就要依次减一" 如果你这序号是按记录顺序向下排的,那它就是没用的。
qq_36637055 2016-11-07
  • 打赏
  • 举报
回复
当然有用,一个表里,有很多单子,每张单子用单据号来区别,每张单据里有都序号,所以序号在表里是有一个字段的,所以DBGrid只是显示用
  • 打赏
  • 举报
回复
你存它干嘛?有用吗
qq_36637055 2016-11-07
  • 打赏
  • 举报
回复
关键是我要把序号存到数据库里的表里呀,DBGridEh行么?
lyhoo163 2016-11-04
  • 打赏
  • 举报
回复
我的体会,原不我对表都 有一个编号或序号的字段,使用DBGrid,遇到你不一样的问题。经过实践: 1、取消表中的编号或序号的字段。 2、使用DBGridEh显示,只要将属性古dghShowRecNo为True,就可首列自动显示表的行数。 3、打印表格时,序号使用RecNo,即可。非常方便。

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧