PC Review


Reply
Thread Tools Rate Thread

Arrays/Redim/Help!

 
 
LarryP
Guest
Posts: n/a
 
      2nd Jun 2008
Working with arrays gives me vertigo!

I want to loop through a recordset and store two pieces of information in an
array, re-sizing the array with Redim Preserve as I process each new record
in the recordset. The populated array should look like this:

Thing1, .25
Thing2, 1.43
Thing3, .07
etc.

But I'm not seeing the forest for the trees -- my code throws a "subscript
out of range" on the second Redim. I've tweaked it various ways, most recent
version is

x = 0
Rs.MoveFirst
Do While Not Rs.EOF
ReDim Preserve varPriceTable(x + 1, x + 1)
varPriceTable(x, 0) = Rs!LookupString
varPriceTable(x, 1) = Rs!ZPMILEPrice
x = x + 1
Rs.MoveNext
Loop

Somebody please help me take the blinders off! ;>)


 
Reply With Quote
 
 
 
 
Jim Thomlinson
Guest
Posts: n/a
 
      2nd Jun 2008
The rule with multi dim arrays is that you can only redim the last element in
the array. Once created the first element is permanent. So code like this
will work...

Sub test()
Dim ary() As String

ReDim ary(10, 10)
ary(1, 1) = "Tada"
ReDim Preserve ary(10, 11)
End Sub

But code like this will not work
Sub test()
Dim ary() As String

ReDim ary(10, 10)
ary(1, 1) = "Tada"
ReDim Preserve ary(11, 11)
End Sub

It has to do with the way memory is stored. A multi dim array, like any
array, is stored as a big long memory string. Adding to the final element
adds another entire block to the end of the memory. Adding to the first
element(s) would require adding more memory to each of the already existing
block which it just will not do.

Have you considered use a type something like this...
'**At top of module
Type MyTpye
str as string
dbl as double
end type
'**

x = 0
Rs.MoveFirst
Do While Not Rs.EOF
ReDim Preserve varPriceTable(x+1)
varPriceTable(x).str = Rs!LookupString
varPriceTable(x).dbl = Rs!ZPMILEPrice
x = x + 1
Rs.MoveNext
Loop


--
HTH...

Jim Thomlinson


"LarryP" wrote:

> Working with arrays gives me vertigo!
>
> I want to loop through a recordset and store two pieces of information in an
> array, re-sizing the array with Redim Preserve as I process each new record
> in the recordset. The populated array should look like this:
>
> Thing1, .25
> Thing2, 1.43
> Thing3, .07
> etc.
>
> But I'm not seeing the forest for the trees -- my code throws a "subscript
> out of range" on the second Redim. I've tweaked it various ways, most recent
> version is
>
> x = 0
> Rs.MoveFirst
> Do While Not Rs.EOF
> ReDim Preserve varPriceTable(x + 1, x + 1)
> varPriceTable(x, 0) = Rs!LookupString
> varPriceTable(x, 1) = Rs!ZPMILEPrice
> x = x + 1
> Rs.MoveNext
> Loop
>
> Somebody please help me take the blinders off! ;>)
>
>

 
Reply With Quote
Reply

Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
ReDim arrays in Variant Petr Danes Microsoft Excel Programming 8 11th Jun 2009 12:40 PM
Redim Multidimenional Arrays Anil Gupte Microsoft VB .NET 9 8th Oct 2006 07:28 AM
ReDim, Preserve and Multidimensional arrays =?Utf-8?B?QW5keSBXZXN0bGFrZQ==?= Microsoft Excel Programming 3 19th Oct 2004 07:04 PM
Confused about dynamic VB Arrays and ReDim Zenobia Microsoft VB .NET 5 30th Sep 2004 02:38 PM
Can u redim global Arrays ? =?Utf-8?B?TGVlIEhvbHNlbmJlY2s=?= Microsoft Dot NET 0 13th Aug 2004 09:13 PM


Features
 

Advertising
 

Newsgroups
 


All times are GMT +1. The time now is 10:57 AM.