注册 登录
编程论坛 VB6论坛

为何"超出当前范围"请教

fdxxhjc 发布于 2015-09-21 19:30, 1596 次点击
我定义了Dim a(1 To 9, 1 To 9) As Double,当一串具有11位的数字存入数组a时,总会提示"超出当前范围"(当一串是10位数字存入时也会提示"超出当前范围",再当一串只有9位的数字存入时才可运行),请教要如何修改才可避免,谢谢

[ 本帖最后由 fdxxhjc 于 2015-9-21 19:45 编辑 ]
9 回复
#2
风吹过b2015-09-21 20:01
Double 数据类型

Double(双精度浮点型)变量存储为 IEEE 64 位(8 个字节)浮点数值的形式,它的范围在负数的时候是从 -1.79769313486232E308 到 -4.94065645841247E-324,而正数的时候是从 4.94065645841247E-324 到 1.79769313486232E308。Double 的类型声明字符是数字符号 (#)。

所以,请贴出出错的代码来。
#3
fdxxhjc2015-09-21 20:19
回复 2楼 风吹过b
实时错误'-2147352566(8002000a)':
超出当前范围.

请先生指点,谢谢

[ 本帖最后由 fdxxhjc 于 2015-9-21 21:12 编辑 ]
#4
风吹过b2015-09-21 22:12
这个数据类型能保存15位的有效数据,而你的语句导致超范围,那是那条语句导致的超范围,我们猜不出。
#5
fdxxhjc2015-09-22 08:01
先生是这样,我在设置了:Dim a(1 To 9, 1 To 9) As Double的情况下,用代码
For i = 1 To n
   For j = 1 To n
     Debug.Print a(i, j);
   Next j
    Debug.Print
  DFF1rs1.Update
  DFF1rs1.AddNew
 Next i
经过运行后若将结果在"立即窗口"中显示是成功的
而用代码
For i = 1 To n
     For j = 1 To n
 DFF1rs1("列" & j) = a(i, j)
Next j
DFF1rs1.Update
    DFF1rs1.AddNew
 Next i
想写入MDB表时则显示错误代码为:
实时错误'-2147352566(8002000a)':
超出当前范围.

谢谢先生指点
#6
fdxxhjc2015-09-22 08:02
回复 4楼 风吹过b
先生是这样,我在设置了:Dim a(1 To 9, 1 To 9) As Double的情况下,用代码
For i = 1 To n
   For j = 1 To n
     Debug.Print a(i, j);
   Next j
    Debug.Print
  DFF1rs1.Update
  DFF1rs1.AddNew
Next i
经过运行后若将结果在"立即窗口"中显示是成功的
而用代码
For i = 1 To n
     For j = 1 To n
DFF1rs1("列" & j) = a(i, j)
Next j
DFF1rs1.Update
    DFF1rs1.AddNew
Next i
想写入MDB表时则显示错误代码为:
实时错误'-2147352566(8002000a)':
超出当前范围.

谢谢先生指点
#7
风吹过b2015-09-22 10:34
那就要去检查  MDB 表这个字段设置是什么类型。而不是仅仅抓着  
Dim a(1 To 9, 1 To 9) As Double 这句不放。这句不会导致后面的错误。
而是这句导致的错误:
DFF1rs1("列" & j) = a(i, j)
关键在于这个字段的类型,如字段类型是 数值 ,但没有去选择数值类型时,默认是 long ,那就会导致超范围了。
#8
fdxxhjc2015-09-22 11:07
回复 7楼 风吹过b
哦谢谢先生。我这个mdb表的字段是“双精度型”格式“空白”小数位数“自动”,请教先生这个表的字段中修改成什么形式能使写入的数的位数更多些,请指教,谢谢
#9
风吹过b2015-09-22 11:10
那等我有空来测试一下吧。最近都基本上没空。
#10
fdxxhjc2015-09-22 12:58
回复 9楼 风吹过b
哦,麻烦先生了
1