请各位老师帮助解决

liuanzhao 2008-05-22 07:31:05
有一个数据库表,有序号、邮编、地址、单位、收件人、份数,怎么样能让份数字段中超过50的记录自动分成两个记录,比如说份数为75,自动分为一个50的,一个25的,其它字段内容均一样,请各位老师帮助解决。
...全文
104 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
十豆三 2008-05-26
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 liuanzhao 的回复:]
还有就是能不能把分数大于50的拆分完了后生成一个新表存放,原表的数据不动!
[/Quote]

建个新表,把Insert 语句即可,这个你自已试试搞定吧。
十豆三 2008-05-26
  • 打赏
  • 举报
回复
那行报错,应该是
Insert Into "&biao" (序号,邮编,地址,单位,收件人,份数) Select 序号,邮编,地址,单位,收件人,50 "&biao" Where 份数>50


改为:

Insert Into "&biao" (序号,邮编,地址,单位,收件人,份数) Select 序号,邮编,地址,单位,收件人,50 from "&biao" Where 份数>50
十豆三 2008-05-24
  • 打赏
  • 举报
回复
如果是VFP9.0才能用上面的语句。
liuanzhao 2008-05-24
  • 打赏
  • 举报
回复
还有就是能不能把分数大于50的拆分完了后生成一个新表存放,原表的数据不动!
liuanzhao 2008-05-24
  • 打赏
  • 举报
回复
biao = DBF()
Do While .T.
Select Max(份数) As fs Into Cursor t1 From "&biao"
If t1.fs>50
Insert Into "&biao" (序号,邮编,地址,单位,收件人,份数) Select 序号,邮编,地址,单位,收件人,50 "&biao" Where 份数>50
Update "&biao" Set 份数=份数-50 Where 份数>50
Else
Return .F.
Endif
ENDDO


我想用一个变量,代替路径和表名,可是update语句不支持,老是报错,能有别的解决办法吗?
大刘0417 2008-05-23
  • 打赏
  • 举报
回复
把字段类型改成字串型,输入掩码"9..."

if VAL(字段名)/50>1
A=50
B=VAL(字段名)-A
C=ALLTRIM(STR(A))+" "+ALLTRIM(STR(B))
用C REPLACE 一下
ENDIF

我也没试过,不知行不行,俺不是老师,是新手.呵呵,别见笑.
十豆三 2008-05-23
  • 打赏
  • 举报
回复
可能是份数 <=50 中间被回复多加了空格的原因,我修改了3楼的回复。
liuanzhao 2008-05-23
  • 打赏
  • 举报
回复
select 序号,邮编,地址,单位,收件人,份数 into table yzbq.dbf from c:\zmn.dbf where 份数 <=50
select 序号,邮编,地址,单位,收件人,50 as 份数 into cursor t2 from c:\zmn.dbf where 份数>50
select 序号,邮编,地址,单位,收件人,(份数-50) as 份数 into cursor t1 from c:\zmn.dbf where 份数>50
select yzbq.dbf
append from dbf("t1")
append from dbf("t2")

我用了以上的代码,怎么提示语法错误?
十豆三 2008-05-23
  • 打赏
  • 举报
回复
select 序号,邮编,地址,单位,收件人,份数 into table 目标表 from 原表 where 份数<=50
select 序号,邮编,地址,单位,收件人,50 as 份数 into cursor t2 from 原表 where 份数>50
select 序号,邮编,地址,单位,收件人,(份数-50) as 份数 into cursor t1 from 原表 where 份数>50
select 目标表
append from dbf("t1")
append from dbf("t2")
都市夜猫 2008-05-23
  • 打赏
  • 举报
回复

1. 检查“份数”字段是否为数值型
2. 检查 vfp 版本是否为 9.0 以上
liuanzhao 2008-05-23
  • 打赏
  • 举报
回复
Insert Into c:\zmn.Dbf (序号,邮编,地址,单位,收件人,份数) Select 序号,邮编,地址,单位,收件人,50 From c:\zmn.Dbf Where 份数>50

Update c:\zmn.Dbf Set 份数=份数-50 Where 份数>50

以上两行报错,操作符/操作数类型不匹配
十豆三 2008-05-23
  • 打赏
  • 举报
回复
*--如果是VFP9.0:

Do While .T.
Select Max(份数) As fs Into Cursor t1 From c:\zmn.Dbf
If t1.fs>50
Insert Into c:\zmn.Dbf (序号,邮编,地址,单位,收件人,份数) Select 序号,邮编,地址,单位,收件人,50 From c:\zmn.Dbf Where 份数>50
Update c:\zmn.Dbf Set 份数=份数-50 Where 份数>50
Else
Return .F.
Endif
Enddo
十豆三 2008-05-23
  • 打赏
  • 举报
回复
Select 序号,邮编,地址,单位,收件人,份数 Into Table yzbq.Dbf From c:\zmn.Dbf Where 份数<=50
Select zmn
Set Filter To 份数>50
Scan
For i=1 To Int(zmn.份数/51)
Replace zmn.份数 With zmn.份数-50
Insert Into yzbq (序号,邮编,地址,单位,收件人,份数) Values (zmn.序号,zmn.邮编,zmn.地址,zmn.单位,zmn.收件人,50)
Endfor
Endscan
Select yzbq
Append From Dbf("zmn")

试试这个
liuanzhao 2008-05-23
  • 打赏
  • 举报
回复
不行啊,有一个订户成了-25了
十豆三 2008-05-23
  • 打赏
  • 举报
回复
Select 序号,邮编,地址,单位,收件人,份数 Into Table yzbq.Dbf From c:\zmn.Dbf Where 份数<=50
Select zmn
Set Filter To 份数>50
Scan
For i=1 To Int(zmn.份数/51)
Replace 份数 With zmn.份数-50
Insert Into yzbq (序号,邮编,地址,单位,收件人,份数) Values (zmn.序号,zmn.邮编,zmn.地址,zmn.单位,zmn.收件人,Iif(zmn.份数-50>50,50,zmn.份数-50))
Endfor
Endscan
Select yzbq
Append From Dbf("zmn")
都市夜猫 2008-05-23
  • 打赏
  • 举报
回复

select 序号,邮编,地址,单位,收件人,份数 from 原表 into table 新表 where 份数 <= 50

m.ii = 1
do while .t.
insert into 新表 ;
select 序号,邮编,地址,单位,收件人,份数-m.ii*50 ;
from 原表 where 份数-m.ii*50 > 0
if ( _tally > 0 )
m.ii = m.ii + 1
else
exit
endif
enddo

liuanzhao 2008-05-23
  • 打赏
  • 举报
回复
十豆三老师,问题解决了,我看了一下新生成的表,发现有一个156的记录分成了一个50的,一个106的,能不能一次都分成不超过50的啊?
十豆三 2008-05-23
  • 打赏
  • 举报
回复
Select 序号,邮编,地址,单位,收件人,份数 Into Table yzbq.Dbf From c:\zmn.Dbf Where 份数<=50
Select 序号,邮编,地址,单位,收件人,50 As 份数 Into Cursor t2 From c:\zmn.Dbf Where 份数>50
Select 序号,邮编,地址,单位,收件人,(份数-50) As 份数 Into Cursor t1 From c:\zmn.Dbf Where 份数>50
Select yzbq
Append From Dbf("t1")
Append From Dbf("t2")

--试试,再不行帖全你的代码,并指出报错行和错误信息
liuanzhao 2008-05-23
  • 打赏
  • 举报
回复
还提示“t1”表不能更新,因为是只读的
liuanzhao 2008-05-23
  • 打赏
  • 举报
回复
我去掉了空格还是不行啊

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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