关于VB的数组动态赋值的问题
Setfj1=cnn.Execute("selectdistinctP_N,PROJECTfrom[CP_TUBE]whereC_N='"&ComboBox1.Text&...
Set fj1 = cnn.Execute("select distinct P_N , PROJECT from [CP_TUBE] where C_N = '" & ComboBox1.Text & "'")
i = 0
Dim lst(50, 1) As String
Do While fj1.EOF = False
lst(i, 0) = fj1.Fields("P_N")
lst(i, 1) = fj1.Fields("PROJECT")
i = i + 1
fj1.MoveNext
Loop
ComboBox2.ColumnCount = 2
ComboBox2.List = lst
以上数组的范围在赋值后如何重新定义其范围为已赋值的区域
我试了,不行 展开
i = 0
Dim lst(50, 1) As String
Do While fj1.EOF = False
lst(i, 0) = fj1.Fields("P_N")
lst(i, 1) = fj1.Fields("PROJECT")
i = i + 1
fj1.MoveNext
Loop
ComboBox2.ColumnCount = 2
ComboBox2.List = lst
以上数组的范围在赋值后如何重新定义其范围为已赋值的区域
我试了,不行 展开
展开全部
redim preserve语句使用是有条件的,前提就是你定义的数组必须是动态数组。
比如Dim a() As Byte,而不能使用在定义的固定数组的,比如Dim a(50) As Byte、Dim a(50,1) As Byte就不可以。
多维数组是不能使用redim preserve语句减少成员的。
Dim a() As Byte '先定义动态数组
ReDim a(50) As Byte '再定义成员数
ReDim Preserve a(55) As Byte '增加数组成员
这样是可以的,能保证前面51个数据不变的。
Dim a() As Byte '先定义动态数组
ReDim a(50,1) As Byte '再定义成员数
ReDim Preserve a(55,2) As Byte '增加数组成员
这样是可以的,能保证前面51个数据不变的。
=================代码改成下面应该行的=========================
Set fj1 = cnn.Execute("select distinct P_N , PROJECT from [CP_TUBE] where C_N = '" & ComboBox1.Text & "'")
i = 0
Dim lst() As String '原来的这行改为动态定义
ReDim lst(8, 1) As String '增加一行重定义
Do While fj1.EOF = False
lst(i, 0) = fj1.Fields("P_N")
lst(i, 1) = fj1.Fields("PROJECT")
i = i + 1
fj1.MoveNext
Loop
ReDim Preserve lst(20, 1) As String '增加动态数组的上限(多维数组不能减下限,会报错)
ComboBox2.ColumnCount = 2
ComboBox2.List = lst
比如Dim a() As Byte,而不能使用在定义的固定数组的,比如Dim a(50) As Byte、Dim a(50,1) As Byte就不可以。
多维数组是不能使用redim preserve语句减少成员的。
Dim a() As Byte '先定义动态数组
ReDim a(50) As Byte '再定义成员数
ReDim Preserve a(55) As Byte '增加数组成员
这样是可以的,能保证前面51个数据不变的。
Dim a() As Byte '先定义动态数组
ReDim a(50,1) As Byte '再定义成员数
ReDim Preserve a(55,2) As Byte '增加数组成员
这样是可以的,能保证前面51个数据不变的。
=================代码改成下面应该行的=========================
Set fj1 = cnn.Execute("select distinct P_N , PROJECT from [CP_TUBE] where C_N = '" & ComboBox1.Text & "'")
i = 0
Dim lst() As String '原来的这行改为动态定义
ReDim lst(8, 1) As String '增加一行重定义
Do While fj1.EOF = False
lst(i, 0) = fj1.Fields("P_N")
lst(i, 1) = fj1.Fields("PROJECT")
i = i + 1
fj1.MoveNext
Loop
ReDim Preserve lst(20, 1) As String '增加动态数组的上限(多维数组不能减下限,会报错)
ComboBox2.ColumnCount = 2
ComboBox2.List = lst
展开全部
楼上两位说的很清楚了
数组需要定义为动态数组
Dim lst(50, 1) As String
这句得改成
Dim lst() As String
ReDim lst(50, 1) As String
数组需要定义为动态数组
Dim lst(50, 1) As String
这句得改成
Dim lst() As String
ReDim lst(50, 1) As String
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
redim
dim a(20) as long
a(4)=100
用redim语句即可更改数组大小
redim a(21)
如果不想丢失数据,就用preserve子句
redim preserve a(21)
dim a(20) as long
a(4)=100
用redim语句即可更改数组大小
redim a(21)
如果不想丢失数据,就用preserve子句
redim preserve a(21)
追问
不行呀,出现错误
追答
哦,忘了,redim只能改变二维数组的后一维,第一维是不能动的。下面的代码应该可以,试一下。
Dim lst() As Variant
Dim record() As String
Dim count As Long
ReDime record(1)
ReDim lst(1)
Do While fj1.EOF = False
ReDim Preserve lst(count + 1)
lst(count) = record
lst(count)(0) = fj1.Fields("P_N")
lst(count)(1) = fj1.Fields("PROJECT")
count = count + 1
fj1.MoveNext
Loop
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询