注册 登录
编程论坛 VFP论坛

大神们,求助啊!两个表中查找相同的数据——姓名!

yilance 发布于 2021-05-14 21:04, 6369 次点击
两个表格,一个是学生表,一个是毕业生表
学生表有学生己经毕业,就会在毕业生表中体现出来
学生表中有些学生非常容易重名,比如学生表中的王强在毕业生表中有4个叫王强
现在我做了一个表单

只有本站会员才能查看附件,请 登录

这样写的     


local a,b,i,num
sele 1
b=thisform.text1.value
use &b alias bb


sele 2
a=thisform.text2.value
use &a alias aa


i=0
j=0
sele 2
do while .not.eof()
   ly=xm
   sele 1
   locate for xm=ly
   if found()
      repl bb.序号 with aa.序号
      i=i+1
    else
        sele 2
        repl 标记 with '没有'
      
        j=j+1
   endif
   sele 2
  skip
  enddo  
  sele 1
  use
  sele 2
  use
  ?i
但是这样的只能查到不重名的学生
比如毕业生名中王强这样重名的,就不能把所有的王强都找出来
大神们可否帮忙修改一下
非常感谢!
66 回复
#2
yilance2021-05-14 21:10
不知道可否理解我的意思
总表是“至2021年所有的毕业生”
另一个表是学生表
学生表中比如说有 姓名字段:王强,刘如芬,李虹晃等等
这些学生都可以在总表“至2021年所有的毕业生”中出现
现在就是需要把学生表中的姓名字段王强,刘如芬,李虹晃等等在总表中找出来,找出来后把总表中的序号更改成学生表中相应学生的序号就可以了,全部找出来,重名的要体现出来

但是我做的这个循环不能把重名的找出来
总表中有三个王强,这个循环只能找到一个王强

表和表单:
只有本站会员才能查看附件,请 登录


毕业生总表 是总表
学生表     是要在总表中找到名字的表

我是想把学生表中的学生姓名在毕业生总表中全部找到,做个标记就可以
于是就把学生表中排了个序号,只要在毕业生总表中发现有和学生表中一样的姓名就用学生表中的序号替换总表中的序号
如果总表中没有学生表中的姓名就在学生表中做个标记

===============================
各位帅帅的帅哥,漂漂的美女
我亲爱的网友们:
刚刚我实现啦~~~原来加一下continue就可以实现继续循环了
一点点小东西实现的东西完全不一样
感谢各位的回复,真的是非常非常的感谢!感谢你们无私的帮助
你们写的代码太太太太牛了!我己经记下来,供以后工作中使用了!

在这里专门写上感谢的话语,有四位热心仗义的网友一直在认真的帮我想,帮我写代码,帮我思考,帮我回贴,非常非常非常的感动!
感谢这些素未谋面的网友们!!!
具体的 编写在最后一页了!

[此贴子已经被作者于2021-5-15 12:24编辑过]

#3
sdta2021-05-14 21:26
表在那,怎么没看到
#4
yilance2021-05-14 21:31
回复 3楼 sdta
是用表单做的,别人帮我写的,我一直用着
就是上面我发的图
框1就是总表
框2是学生表
运行的时候点右边的按扭就可以运行了
#5
yilance2021-05-14 21:32
回复 3楼 sdta
只有本站会员才能查看附件,请 登录

上面的可以运行
但是感觉循环做地不够
只能找到毕业生总表中的相对应的第一个姓名,如果后面还有一样的姓名,就找不到了
这个循环应该如何更改

[此贴子已经被作者于2021-5-14 23:10编辑过]

#6
yilance2021-05-14 21:34
回复 4楼 yilance
只有本站会员才能查看附件,请 登录
#7
sdta2021-05-14 21:36
要的是表,不是截图
#8
yilance2021-05-14 21:37
以下是引用sdta在2021-5-14 21:26:22的发言:

表在那,怎么没看到

不知道您说的表是不是我上面发的那样的表
这个表单也是别人帮我写的
我只能勉强使用
能看个大概
就觉得这个循环少了点
要是有唯一标记识别的还是很好的
比如用学号做为查找条件,很好用
但是现在是以姓名做为查找条件,姓名很重易重名
#9
yilance2021-05-14 21:38
回复 7楼 sdta
意思是 把表单发出来 是吗
#10
yilance2021-05-14 21:39
只有本站会员才能查看附件,请 登录

调整好了
毕业生总表 是总表
学生表     是要在总表中找到名字的表

[此贴子已经被作者于2021-5-14 22:59编辑过]

#11
yilance2021-05-14 21:42
回复 7楼 sdta
发了,不知道您说的是这个吗?
着急死了,只能做个半茬,唔
#12
sdta2021-05-14 21:46
让你发表,发表单有什么用
#13
yilance2021-05-14 21:59
回复 12楼 sdta
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2021-5-14 22:01编辑过]

#14
yilance2021-05-14 22:00
回复 12楼 sdta
表单和表都发了,看看这样可以 不
#15
sdta2021-05-14 22:22
学生表 是不是 毕业生汇总表
把重名的学生添加到 毕业生汇总表 中,是不是这个意思
#16
yilance2021-05-14 22:39
回复 15楼 sdta
不是
是在毕业生总表中找到所有学生表中的学生姓名
只要毕业生总表中出现学生表中的姓名,就用学生表中的序号替换
#17
sdta2021-05-14 22:44
不要下线,随时询问
#18
sdta2021-05-14 22:47
两个表中,那个是学生表,那个是毕业生总表
#19
yilance2021-05-14 22:48
回复 15楼 sdta
毕业生总表中的序号是空白
这个表单运行的目的是在总表中找到所有学生表中的姓名      
一旦找到,把学生表中的序号填入毕业生总表的序号中
#20
yilance2021-05-14 22:50
回复 18楼 sdta
哎呀,不好意思,着急糊涂了,这 个都忘了告诉你了
至2021年所有毕业生 是总表
毕业生汇总         是学生表
#21
yilance2021-05-14 22:51
回复 18楼 sdta
这两个表被我运行过了
至2021年所有毕业生  这 个表中的序号应该是空的
#22
yilance2021-05-14 22:58
只有本站会员才能查看附件,请 登录

怕看不懂又重 新调整了表名称
毕业生总表  是总表
学生表      是需要在总表中标记的表


我是想把学生表中的学生姓名在毕业生总表中全部找到,做个标记就可以
于是就把学生表中排了个序号,只要在毕业生总表中发现有和学生表中一样的姓名就用学生表中的序号替换总表中的序号
如果总表中没有学生表中的姓名就在学生表中做个标记

[此贴子已经被作者于2021-5-14 23:03编辑过]

#23
sdta2021-05-14 23:23
我查了下,学生表中有3个陈浩,而毕业生总表中,只有2个陈浩,这种情况如何处理
学生表中有2个陈晓天,而毕业生总表中没有叫陈浩的,这种情况如何处理
#24
yilance2021-05-14 23:28
以下是引用sdta在2021-5-14 23:23:50的发言:

我查了下,学生表中有3个陈浩,而毕业生总表中,只有2个陈浩,这种情况如何处理
学生表中有2个陈晓天,而毕业生总表中没有叫陈浩的,这种情况如何处理

=================
这个可以标注的,更改总表序号的时候用下面的命令调整一下就可以
repl bb.序号 with ALLTRIM(bb.序号)+ALLTRIM(aa.序号)

学生表中的 3个陈浩序号不一样,这样更改总表中的2个陈浩就可以体现出学生表中所有陈浩的序号了
#25
yilance2021-05-14 23:33
回复 23楼 sdta
你想的好仔细啊
多亏你观察的仔细
我还真忽略了学生表中也是有重 名的
还得把表单里更改一下,要不得到的数据就不准确了
 
#26
yilance2021-05-14 23:38
回复 23楼 sdta
学生表中有2个陈晓天,而毕业生总表中没有叫陈浩的,这种情况如何处理
+++++++++++++++++++++
是不是写错了,学生表中有2个陈浩,而毕业生总表中没有叫陈浩的,这种情况如何处理
是这个意思吗?
这个己经在表单的命令里体现出来了
学生表中的姓名在总表中没有
会在学生表的“标记”字段写上“没有”
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2021-5-14 23:39编辑过]

#27
sdta2021-05-14 23:38
数据处理,不一定要用到表单,用PRG文档处理就可以了,说下你的具体要求,看能不能有变通的方法。
#28
yilance2021-05-14 23:42
以下是引用sdta在2021-5-14 23:38:23的发言:

数据处理,不一定要用到表单,用PRG文档处理就可以了,说下你的具体要求,看能不能有变通的方法。

您说的这个完全不会啊
多年前朋友帮做的这个表单,工作中发挥很大作用
我是觉得是不是循环再多写一层就可以实现我现 在的目的了

我就是想把学生表中的学生姓名在毕业生总表中全部找到,做个标记就可以
#29
yilance2021-05-14 23:51
回复 27楼 sdta
非常感谢您的回复,版主不易啊!膜拜!
我得 去睡觉了,明天再来请教!
#30
sdta2021-05-14 23:53
学生表中重名人员名单
只有本站会员才能查看附件,请 登录
#31
yilance2021-05-15 08:53
回复 30楼 sdta
我不是这样的目的
可能您还没有明白我的意思
我是想找到两张表中相同字段的相同记录

是要找到学生表中的姓名在毕业生总表中出现的位置,不是找到重复的次数
#32
yilance2021-05-15 09:19
select a.* from 毕业生总表 a INNER join 学生表 b on a.xm=b.xm

找到一条语句可以完成我的要求,只是没有我的表单好用,因为没法显示序号
我是想要查询到的表顺序和学生表里的顺序一至,我好进行其他的操作
#33
laowan0012021-05-15 09:48
学生表中的 3个陈浩序号不一样,这样更改总表中的2个陈浩就可以体现出学生表中所有陈浩的序号了
这句话真不理解

就拿陈浩来说,
1.总表里的两个陈浩的序号应该是不一样的吧?
2.学生表里第三个陈浩的“标记”应该是“没有”
是这样的吗?
#34
laowan0012021-05-15 09:59

CLOSE DATABASES

LOCAL xxh
USE 毕业生总表 IN 0

SELECT 毕业生总表
REPLACE ALL 序号 WITH ''
INDEX ON xm+序号 TO 毕业生总表

USE 学生表 IN 0
SELECT 学生表
SET RELATION TO xm INTO 毕业生总表

SCAN
    xxh = ALLTRIM(序号)
    SELECT 毕业生总表
    IF !EOF() AND EMPTY(序号)
        REPLACE 序号 WITH xxh
    ELSE
        SELECT 学生表
        REPLACE 标记 WITH '没有'
    ENDIF
    SELECT 学生表
ENDSCAN

SELECT * FROM 毕业生总表 ORDER BY xm
SELECT * FROM 学生表 ORDER BY xm

只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
#35
吹水佬2021-05-15 10:55
是不是这样子
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

程序代码:
SELECT 0
USE 学生表 ALIAS a
BLANK FIELDS 标记 ALL
SELECT 0
USE 毕业生总表 ALIAS b
BLANK FIELDS 序号 ALL
INDEX on 序号+xm TAG 序号_xm
n = FSIZE("序号","b")
SELECT a
SET RELATION TO SPACE(n)+xm INTO "b"
SCAN
    IF FOUND("b")
        REPLACE b.序号 WITH PADL(a.序号,n," ") IN "b"
    ELSE
        REPLACE a.标记 WITH "没有" IN "a"
    ENDIF
ENDSCAN
SELECT 序号,xm FROM b WHERE !EMPTY(序号) ORDER BY xm
SELECT 标记,xm,序号 FROM a ORDER BY xm
#36
yilance2021-05-15 11:53
回复 33楼 laowan001
只有本站会员才能查看附件,请 登录

我这样手画了一个图,可以看明白我的意思了吗

就是想要在毕业生总表里标注上所有学生表中相同姓名的序号就可以了
#37
yilance2021-05-15 11:57
回复 35楼 吹水佬
非常感谢!非常感谢!非常感谢!
基本是我想要的样子
这 样的操作我就可以使用了!
多谢,多谢!

只不过我那个表单,一个网友说加一个CONTINUE命令就可以了,可是我完全不会写代码不知道往哪 里加
#38
yilance2021-05-15 11:59
回复 34楼 laowan001
非常感谢!非常感谢!非常感谢!这 样也是可以的,我也可以用
只不过如果可以是
毕业生总表中的姓名更改后的序号是这样的就完美了

   学生表                        毕业生总表
标记    序号   xm              序号           xm
        444    陈浩          444,685,701   陈浩
        685    陈浩          444,685,701   陈浩
        701    陈浩


[此贴子已经被作者于2021-5-15 12:05编辑过]

#39
yilance2021-05-15 12:17
各位帅帅的帅哥,漂漂的美女
我亲爱的网友们:
刚刚我实现啦~~~原来加一下continue就可以实现继续循环了
一点点小东西实现的东西完全不一样
感谢各位的回复,真的是非常非常的感谢!感谢你们无私的帮助
你们写的代码太太太太牛了!我己经记下来,供以后工作中使用了!
我运行后是这样的结果,始终描述不清楚
只有本站会员才能查看附件,请 登录

程序代码:
local a,b,i,num
sele 1
b=thisform.text1.value
use &b alias bb


sele 2
a=thisform.text2.value
use &a alias aa


i=0
j=0
sele 2
do while .not.eof()
   ly=xm
   sele 1
   locate for xm=ly
   if found()
      repl bb.序号 with ALLTRIM(bb.序号)+','+ALLTRIM(aa.序号)
      i=i+1
      CONTINUE
    else
        sele 2
        repl 标记 with '没有'
      
        j=j+1
   endif
   sele 2
  skip
  enddo  
  sele 1
  use
  sele 2
  use
  ?i
#40
yilance2021-05-15 12:25
这里专门写上感谢的话语,有四位热心仗义的网友一直在认真的帮我想,帮我写代码,帮我思考,帮我回贴,非常非常非常的感动!
感谢这些素未谋面的网友们!!!
#41
吹水佬2021-05-15 14:49
以下是引用yilance在2021-5-15 11:59:54的发言:

只不过如果可以是
毕业生总表中的姓名更改后的序号是这样的就完美了

   学生表                        毕业生总表
标记    序号   xm              序号           xm
        444    陈浩          444,685,701   陈浩
        685    陈浩          444,685,701   陈浩
        701    陈浩

这种结果又不一样的,如果学生表只有一个“444 陈浩”,毕业生总表就有两个“444 陈浩”
只有本站会员才能查看附件,请 登录

程序代码:
SELECT 0
USE 学生表 ALIAS a
SELECT 0
USE 毕业生总表 ALIAS b
BLANK FIELDS 序号 ALL
**ALTER TABLE b ALTER COLUMN 序号 C(20)
SELECT DISTINCT 序号, xm FROM b INTO CURSOR tmp READWRITE
SELECT tmp
INDEX on xm TAG xm
SELECT a
SET RELATION TO xm INTO "tmp"
REPLACE ALL tmp.序号 WITH tmp.序号-LTRIM(a.序号)-","
SELECT b
SET RELATION TO xm INTO "tmp"
REPLACE ALL b.序号 WITH tmp.序号
SELECT 序号,xm FROM b WHERE !EMPTY(序号) ORDER BY xm

#42
yilance2021-05-15 20:50
以下是引用吹水佬在2021-5-15 14:49:53的发言:


这种结果又不一样的,如果学生表只有一个“444 陈浩”,毕业生总表就有两个“444 陈浩”

SELECT 0
USE 学生表 ALIAS a
SELECT 0
USE 毕业生总表 ALIAS b
BLANK FIELDS 序号 ALL
**ALTER TABLE b ALTER COLUMN 序号 C(20)
SELECT DISTINCT 序号, xm FROM b INTO CURSOR tmp READWRITE
SELECT tmp
INDEX on xm TAG xm
SELECT a
SET RELATION TO xm INTO "tmp"
REPLACE ALL tmp.序号 WITH tmp.序号-LTRIM(a.序号)-","
SELECT b
SET RELATION TO xm INTO "tmp"
REPLACE ALL b.序号 WITH tmp.序号
SELECT 序号,xm FROM b WHERE !EMPTY(序号) ORDER BY xm

亲爱的版主:
我加了个出生日期再次比对,这样的话就可以更加确定是否是同一个人,您的上面代码可否修改一下实现呢
#43
yilance2021-05-15 21:43
刚刚用了我自己修改过的表单
发现还是有一些问题
不能完全正确的检测同来
比如名字是两个字的,重名的学生,还是出错的
不知道是哪里的原因
#44
吹水佬2021-05-15 23:06
以下是引用yilance在2021-5-15 20:50:59的发言:


亲爱的版主:
我加了个出生日期再次比对,这样的话就可以更加确定是否是同一个人,您的上面代码可否修改一下实现呢

索引相关表达式改改就可以:
INDEX on xm+出生日期 TAG xm

SET RELATION TO xm+出生日期 INTO "tmp"
#45
yilance2021-05-15 23:41
回复 44楼 吹水佬
亲爱的版主:
可否再帮我看一眼,我这样增加的是对的吧?
为何我一运行就出现这样的错误啊?(两张表都己经增加了出生日期字段)
只有本站会员才能查看附件,请 登录

#46
吹水佬2021-05-16 04:35
回复 45楼 yilance
给表数据测试
#47
sdta2021-05-16 09:12
以下是引用yilance在2021-5-15 23:41:19的发言:

亲爱的版主:
可否再帮我看一眼,我这样增加的是对的吧?
为何我一运行就出现这样的错误啊?(两张表都己经增加了出生日期字段)

readwrite VFP6中没有的参数,必须在VFP9中运行才能正常。
#48
sdta2021-05-16 09:13
以下是引用yilance在2021-5-15 08:53:37的发言:

我不是这样的目的
可能您还没有明白我的意思
我是想找到两张表中相同字段的相同记录

是要找到学生表中的姓名在毕业生总表中出现的位置,不是找到重复的次数

只是告诉你表中有相同姓名的事实
#49
yilance2021-05-16 09:39
回复 46楼 吹水佬
刚刚看了sdta版主的回复,可能我用的是VFP6
我来更换一下9试试看
#50
yilance2021-05-16 09:41
回复 48楼 sdta
谢谢!
你想的周到
我的表单运行后发现学生表中有重名的学生会出问题
不能完全比对出来
#51
yilance2021-05-16 11:16
回复 46楼 吹水佬
亲爱的版主:
可否再麻烦您一下?
我己经用VFP9来操作了,但是又出现另一个问题
只有本站会员才能查看附件,请 登录

我把表放上去,您运行看看?
只有本站会员才能查看附件,请 登录
12