注册 登录
编程论坛 VFP论坛

请教:recall的问题

zhousr 发布于 2023-05-12 16:54, 115 次点击
有表A,对某些记录加了删除标记。现在要恢复某些记录,但不成功。想要的结果是:BZ字段中含“化学”或“物理学”或“信息工程”的,恢复。以化学为例,BZ字段中既会有“化学”,也会有“化学工程与工艺”、“材料化学”等。如果一条记录的BZ中既有“化学”也有“材料化学”等,就恢复;有“材料化学”等而没有“化学”的,保持删除。因而必须准确界定专业名称。可以用“含化学、”、“、化学、”等形式的字符串来界定一个专业。
下面的代码运行后,recall不成功:

sele * from qbzy into array asrmc
FOR i=1 TO ALEN(asrmc)  
  zz="asrmc"+"("+ALLTRIM(STR(i))+")"  
  tj=CHRTRANC(&zz,chr(41377)+chr(32),"")  
        se1="含"+tj+"、"
        se2="、"+tj+"、"
        se3="、"+tj+"类、"
        se4="、"+tj+"专业"
        se5="含"+tj+"专业"
        se6="、"+tj+"("
        se7="含"+tj+"("
   RECALL ALL FOR se1$bz OR se2$bz OR se3$bz OR se4$bz OR;
         se5$bz OR se6$bz OR se7$bz
ENDFOR
请各位指教!
只有本站会员才能查看附件,请 登录
6 回复
#2
吹水佬2023-05-12 18:13
这些 se1 之类头尾加了字符,增加的字符在BZ存在吗?不存在的话 se1$bz 就不确定。
#3
csyx2023-05-12 18:20
这些是不是要恢复的 ?
程序代码:
Close Databases
Set Deleted Off

Use a In 0 Alias recall
Select Recno() as recno, Left(bz,200) as bz from recall where Deleted() and Is包含专业('化学', bz)

Function Is包含专业(c专业名, c数据)
    Local array aWords[1]
    ALines(aWords, m.c数据, '','','',',','(','','','专业')
    Return Ascan(aWords, c专业名, 1, -1, 1, 1+2+4) > 0
EndFunc


刚忘加上被删除限制了

[此贴子已经被作者于2023-5-12 18:29编辑过]

#4
sdta2023-05-12 18:22
不要对基础表进行任何操作,这些操作可以放在临时表中进行。
#5
zhousr2023-05-12 21:18
谢谢三大版主!
吹版:专业前后的字符是存在的,这些字符如果不是“、”或“(”之类 的就是另外的专业,需要删除的。
sdta版主:我用的A表是中间表,没有临时表,因为程序结束后我要对A表进行检查,看看该删的有没删掉,该保留的有没保留。等确定程序没有问题时,可以改用临时表。
csyx版主:我得好好消化一下您的代码,代入程序中看看结果
非常感谢!
#6
csyx2023-05-12 22:32
这段代码并不是用来给你 recall 用的,仅用于检测取出的记录是否真的是要 recall 的记录,也就是 Is包含专业() 这个函数是否符合要求
如果是,用 recall all for Is包含专业('专业名称', bz) 即可,外面再套一个 for 循环,处理不同的专业
#7
zhousr2023-05-16 09:12
谢谢csyx!ALINES函数给了我很大启发,现已调试成功,非常感谢!!
1