标题:数组ARRAY的值为0
只看楼主
杂七杂八
Rank: 1
等 级:新手上路
帖 子:217
专家分:7
注 册:2018-2-20
结帖率:96%
已结贴  问题点数:20 回复次数:11 
数组ARRAY的值为0
有一个情况:sele count(*) from *.dbf where 条件 into array dd (其实是无记录,这个dd得到的是一个零
USE GE
repl 字段 with dd
出现:提示找不到变量
问一下:数组的值为零 在替换时就会出错吗?该如何避免呢。
搜索更多相关主题的帖子: 数组 ARRAY with 提示 出现 
2020-02-08 11:11
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
dd是数组
试试
repl 字段 with dd[1,1]
2020-02-08 11:26
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
试了一下   repl 字段 with dd   没提示出错
2020-02-08 11:30
杂七杂八
Rank: 1
等 级:新手上路
帖 子:217
专家分:7
注 册:2018-2-20
得分:0 
回复 3楼 吹水佬
谢谢
提示替换的字段不能为null值
加了[1,1]后提示也是一样.
2020-02-08 12:49
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:5 
试试
IF _TALLY >0
    repl 字段 with dd
ENDIF

坚守VFP最后的阵地
2020-02-08 14:06
杂七杂八
Rank: 1
等 级:新手上路
帖 子:217
专家分:7
注 册:2018-2-20
得分:0 
回复 5楼 sdta
Null 值是:等于没有任何值。不同于零、空串("")或空白。
解决方案:1.该字段允许null值;2.用isnull()命令

问题1
sele count(*) from ?.dbf into array dd   我对这个数值型字段进行个数统计,怎么会出现 null 呢?

命令1
      if isnull(dd)=.t.
          repl  字段 with 0
       else
           repl 字段 with dd
       endif
命令2
    iif(isnull(dd)=.t.,repl  字段 with 0,repl 字段 with dd)
问题2
   命令2未通过,提示缺少(,)没搞懂?

谢谢
2020-02-09 10:18
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:5 
问题1
VFP9试dd是0

问题2
无效的表达式
试试:
iif(isnull(dd)=.t.,exec("repl 字段 with 0"),exec("repl 字段 with dd"))
2020-02-09 11:06
gs2536785678
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:45
帖 子:565
专家分:1668
注 册:2017-7-16
得分:5 
这位朋友,你先要定义数组
dime dd(1,1)
再使用SELECT语句
sele count(*) from *.dbf where 条件 into array dd
在应用数组前,要判别数组是否有实际元素
?type("dd")
如果type("dd")是逻辑型的,则为空,你不能用它了。
2020-02-10 09:25
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:5 
** 测试1
** 先定义数组
DIMENSION dd[10,10]
dd[1,1]=1
?dd[1,1] && 输出 1,正常
?dd[1,2] && 输出 .f.,正常
CREATE CURSOR tmp1( c1 C(10),c2 C(10))
SELECT COUNT(*) FROM tmp1 WHERE 1=2 INTO ARRAY dd
** 测试结果
 ?dd      && 输出 0,正常
 ?dd[1,1] && 输出 0,正常
 ?dd[1]   && 输出 0,正常
 ?dd[1,2] && 报错误,下标超界
** 根据上面测试,可以知道
1.不需要先定义数组,就算定义了,也会重新生成数组,同时,数组维数也变化。
2.运行 SELECT COUNT(*) FROM tmp WHERE 1=2 INTO ARRAY dd 语句后,数组值是0,dd=dd[1]=dd[1,1]

** 测试2
CREATE CURSOR tmp2( d1 C(10),d2 C(10))
INSERT blank
REPLACE d1 WITH dd && 提示数据类型不匹配

** 测试3
CREATE CURSOR tmp3( d3 N(10),d4 N(10))
INSERT blank
REPLACE d3 WITH dd && 正常
?d3 &&输出0,正常
dd = null
REPLACE d4 WITH dd && 会提示,d4不能为null值

楼主的问题,和上面测试不符合,VFP9.0 SP1
repl 字段 with dd
出现:提示找不到变量

 
2020-02-10 10:01
杂七杂八
Rank: 1
等 级:新手上路
帖 子:217
专家分:7
注 册:2018-2-20
得分:0 
回复 7楼 吹水佬
在vfp6.0 下
iif(isnull(dd)=.t.,exec("repl 字段 with 0"),exec("repl 字段 with dd"))
这命令不行,还要用命令1
谢谢。
2020-02-10 19:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-499150-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.078141 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved