注册 登录
编程论坛 VFP论坛

求助:如何将一个 dbf 按某个字段分成多个 dbf

二马路刘光头 发布于 2022-03-24 11:57, 2536 次点击
字段是文字,而不是数字,比如是学校名称。需要根据学校名称拆分成多个dbf,每个学校一个。想要一次性实现,而不是用copy to 一个一个生成。万分感谢啊!
13 回复
#2
mywisdom882022-03-24 12:12
可以
#3
sdta2022-03-24 12:20
为了能快速的解决问题,最好上传相关数据
#4
mywisdom882022-03-24 12:33
字段是文字,而不是数字,比如是学校名称。需要根据学校名称拆分成多个dbf
假设原表是 学生表(姓名,学号,学校)
select distinct 学校 from 学生表 into cursor 学校tmp
select 学校tmp
nm = ""
fn = ""
scan
 nm=allt(学校)
 fn = "d:\xxx\" + nm
 select * from 学生表 where allt(学校)=nm into table (fn)
endscan
这样就可以了,没测试。


[此贴子已经被作者于2022-3-24 17:28编辑过]

#5
sdta2022-03-24 16:12
SELECT DISTINCT 学校名称 FROM 学生表 INTO CURSOR XX
SCAN
    SELECT * FROM 学生表 WHERE ALLTRIM(学生名称) == ALLTRIM(XX.学生名称) INTO (TABLE ALLTRIM(学生名称))
ENDSCAN
#6
gs25367856782022-03-25 09:18
各位朋友可能是误解了庄主的意思,庄主是想【一句话】
而不是用一个程序代码段解决。
#7
二马路刘光头2022-03-27 23:02
只有本站会员才能查看附件,请 登录
大哥们,我就是想要一个命令能根据xymc(学院名称)自动把这个表分成5个表,每个表里有该学院学生的数据,分出来的表格最好能直接以该学院名字命名,我是真的不懂,麻烦大哥们能一步一步告诉我操作,谢谢了。
#8
二马路刘光头2022-03-27 23:03
4、5楼大哥有空的话,麻烦再给解答一下哈
#9
schtg2022-03-28 05:55
回复 7楼 二马路刘光头
5楼已经给出了代码,稍加修改即可
程序代码:
set safety off
close all
select distinct xymc from 示例表格 into cursor xx
scan
    select * from 示例表格 where alltrim(xymc) == alltrim(xx.xymc) into table alltrim(xx.xymc)
endscan
close all
quit


用数组的方法,试一试,可否?
程序代码:
set safety off
close all
select distinct xymc from 示例表格 where len(alltrim(xymc))>0 into array xmc
nNum = ALen(xmc,0)
For i = 1 TO nNum
    select * from 示例表格 where alltrim(xymc)==alltrim(xmc(i)) into table (xmc(i))
endfor
close all
quit


[此贴子已经被作者于2022-3-28 06:01编辑过]

#10
laowan0012022-03-28 07:25
一个命令恐怕没法实现
#11
mywisdom882022-03-28 08:47
以下是引用二马路刘光头在2022-3-27 23:02:43的发言:

大哥们,我就是想要一个命令能根据xymc(学院名称)自动把这个表分成5个表,每个表里有该学院学生的数据,分出来的表格最好能直接以该学院名字命名,我是真的不懂,麻烦大哥们能一步一步告诉我操作,谢谢了。

一句话,是不能实现的,其中4,5,9楼都可以,4,5楼大概方法相同,逐个扫描学校名称;9楼是用数组;
use d:\xxx\xymc.dbf in 0 && 在当前最小可以使用的工作区中,打开d:\xxx\xymc.dbf,也可以不要这个,但如果不要,那下面得select * from xymc,就要带路径,对于新人,建议先打开
select distinct 学院名称 from xymc into cursor 学校tmp && 生成一个不重复“学院名称”的临时表
select 学校tmp && 这个可以不要的,选择临时表学校tmp,我只是习惯
nm = "" && 2个变量,有时候可以简化下面的select语句,也可以不要,就像5楼的
fn = "" && 生成新表的名称和路径
scan &&逐个扫描学校tmp
 nm=allt(学院名称) && 取学院名称,取掉前后空格
 fn = "d:\xxx\" + nm && 新生成的表在d:\xxx\目录中
 select * from xymc where allt(学院名称) == nm into table (fn) && 查询xymc表,生成一个新表,存放在 d:\xxx\目录中
endscan

[此贴子已经被作者于2022-3-28 08:51编辑过]

#12
二马路刘光头2022-03-28 11:35
感谢楼上大哥们的指导啊,不过我还是没有尝试成功。大哥们能不能告诉我完整的命令,并备注一下在哪里回车啊?scan+回车+命令+回车+endsan+回车吗?我现在尝试的时候都是显示嵌套错误。
#13
mywisdom882022-03-28 12:43
回复 12楼 二马路刘光头
把上面的语句保持为 .prg 的文件,然后运行
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
#14
二马路刘光头2022-03-29 10:10
会了,谢谢大哥们
1