注册 登录
编程论坛 VFP论坛

如何判定某列有无记录

fdqzy 发布于 2020-11-01 20:23, 2423 次点击
如表1:
   


程序代码:
create cursor b1 (jnh N(2),mm c(3),fmm c(3))
insert into b1 values (1,"","M2")
insert into b1 values (2,"","M2")
insert into b1 values (3,"","")
FOR i=2 TO FCOUNT()
    SELECT * FROM b1 WHERE !EMPTY(FIELD(i))
    RETURN
endfor   

无法查询
程序代码:
create cursor b1 (jnh N(2),mm c(3),fmm c(3))
insert into b1 values (1,"","M2")
insert into b1 values (2,"","M2")
insert into b1 values (3,"","")
FOR i=2 TO FCOUNT()
    SELECT * FROM b1 WHERE !EMPTY(mm)
    RETURN
endfor   

可以查询
为什么?
判定某列有无记录用FIELD() 应怎么写?

[此贴子已经被作者于2020-11-1 21:05编辑过]

8 回复
#2
sdta2020-11-01 21:35
https://bbs.bccn.net/thread-503713-1-1.html 2楼回帖
要善于总结别人的回帖
#3
sdta2020-11-01 21:43
程序代码:
CLEAR
create cursor b1 (jnh N(2),mm c(3),fmm c(3))
insert into b1 values (1,"","M2")
insert into b1 values (2,"","M2")
insert into b1 values (3,"","")
FOR lnj = 1 TO FCOUNT()
    n1 = RECCOUNT()
    SCAN
        c1 = EVALUATE(FIELD(lnj))
        IF EMPTY(c1)
            n1 = n1 - 1
        ELSE
            EXIT
        ENDIF
    ENDSCAN
    IF n1 = 0
        ? TRANSFORM(lnj) + "列为空"
    ENDIF
ENDFOR
#4
吹水佬2020-11-01 22:16
只是判断某列有无记录,可用LOCAT命令查找,如:
程序代码:

SELECT b1
FOR i=2 TO FCOUNT()
    ? fun(i)
ENDFOR

FUNCTION fun(i)
    LOCATE FOR !EMPTY(EVALUATE(FIELD(i)))
    RETURN FOUND()
ENDFUNC

#5
whinda2020-11-01 22:35
你这个FOR循环中用的Return有什么意义?
#6
fdqzy2020-11-02 04:51
以下是引用吹水佬在2020-11-1 22:16:50的发言:
    LOCATE FOR !EMPTY(EVALUATE(FIELD(i)))

我总是忘了动态字段的动态表达式
#7
fdqzy2020-11-02 04:59
以下是引用sdta在2020-11-1 21:35:25的发言:

https://bbs.bccn.net/thread-503713-1-1.html 2楼回帖
要善于总结别人的回帖

这方面确实做得差,没想到照帖变动一下,谢谢!
#8
wengjl2020-11-03 14:13
以下是引用fdqzy在2020-11-1 20:23:30的发言:

如表1:
   


create cursor b1 (jnh N(2),mm c(3),fmm c(3))
insert into b1 values (1,"","M2")
insert into b1 values (2,"","M2")
insert into b1 values (3,"","")
FOR i=2 TO FCOUNT()
    SELECT * FROM b1 WHERE !EMPTY(FIELD(i))
    RETURN
endfor   
无法查询
create cursor b1 (jnh N(2),mm c(3),fmm c(3))
insert into b1 values (1,"","M2")
insert into b1 values (2,"","M2")
insert into b1 values (3,"","")
FOR i=2 TO FCOUNT()
    SELECT * FROM b1 WHERE !EMPTY(mm)
    RETURN
endfor   
可以查询
为什么?
判定某列有无记录用FIELD() 应怎么写?


如何算空列? 比如说表ABC.dbf中有5000条记录,第N个字段在每一条记录都为空算空的字段,还是某一记录上有记录的,也算空字段?
#9
wengjl2020-11-03 14:43
  SELECT 0
  USE 你的表
  FOR i=1 TO FCOUNT()
    c_fiel=FIELD(i)
    sn=0
    GO top
    SCAN
      IF !EMPTY(&c_fiel.) then
        sn=sn+1
      ENDIF
      SELECT bmk
    ENDSCAN
    IF sn=0 then
        ? "空值的字段为:"+c_fiel
    ENDIF
  ENDFOR
1