关于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

以上数组的范围在赋值后如何重新定义其范围为已赋值的区域
我试了,不行
展开
 我来答
Zaxife
2011-03-13 · TA获得超过1254个赞
知道小有建树答主
回答量:1138
采纳率:0%
帮助的人:425万
展开全部
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
帐号已注销
2011-03-16 · TA获得超过801个赞
知道小有建树答主
回答量:566
采纳率:0%
帮助的人:299万
展开全部
楼上两位说的很清楚了
数组需要定义为动态数组
Dim lst(50, 1) As String
这句得改成
Dim lst() As String
ReDim lst(50, 1) As String
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
朝奈纯02
2011-03-13 · TA获得超过458个赞
知道小有建树答主
回答量:159
采纳率:0%
帮助的人:220万
展开全部
redim

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
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式