Topic
Copy array data in a dataset using Range
Home page › Community › Automation and VBA › Copy array data in a dataset using Range
- This topic has 4 replies and 2 voices and was last updated 15 years, 6 months ago ago by Norbert Bakkers.
-
AuthorPosts
-
11.11.2009 at 02:27 #34794Norbert BakkersParticipant
I’ve been trying to get data from a simple test array in a dataset using the Range command. Using the [i]’Transferring Large Data Sets Section by Section'[/i] example as a guide I made the following procedure:
[code]
Private Sub CommandButton2_Click()
Dim TmpArr(1 To 3) As SingleTmpArr(1) = 2
TmpArr(2) = 3
TmpArr(3) = 4With ActiveDatabase.RootFolder.Add(“Signal”, fpObjectTypeDataSet)
.DataStructure = fpDataStructureDataSeries
.DataType(fpDataComponentAll) = fpDataTypeFloat32
.NumberOfRows = 3
.FillColumns “(NumberOfRows(i), FloatingPoint32 0, FloatingPoint32 0)”, fpDataComponentAll
.Update
End WithActiveDatabase.RootFolder.Object(“Signal”).Range(fpDataComponentAll).Value = TmpArr
End Sub
[/code]
This routing crashes at the Range statement with an ‘Invalid procedure or argument’ error. What am I doing wrong?Also, if this is all working, I would like to transfer data from a multidimensional array (50 columns) in 50 individual datasets. Is it possible to do this using the Range statement. In other words, how do I select 1 column in the array?
11.11.2009 at 02:27 #34798Norbert BakkersParticipantI’ve been trying to get data from a simple test array in a dataset using the Range command. Using the [i]’Transferring Large Data Sets Section by Section'[/i] example as a guide I made the following procedure:
[code]
Private Sub CommandButton2_Click()
Dim TmpArr(1 To 3) As SingleTmpArr(1) = 2
TmpArr(2) = 3
TmpArr(3) = 4With ActiveDatabase.RootFolder.Add(“Signal”, fpObjectTypeDataSet)
.DataStructure = fpDataStructureDataSeries
.DataType(fpDataComponentAll) = fpDataTypeFloat32
.NumberOfRows = 3
.FillColumns “(NumberOfRows(i), FloatingPoint32 0, FloatingPoint32 0)”, fpDataComponentAll
.Update
End WithActiveDatabase.RootFolder.Object(“Signal”).Range(fpDataComponentAll).Value = TmpArr
End Sub
[/code]
This routing crashes at the Range statement with an ‘Invalid procedure or argument’ error. What am I doing wrong?Also, if this is all working, I would like to transfer data from a multidimensional array (50 columns) in 50 individual datasets. Is it possible to do this using the Range statement. In other words, how do I select 1 column in the array?
11.11.2009 at 03:18 #34795Bernhard KantzParticipant1) At the moment the [b]range[/b] method only works if all arguments are defined.
Example:
[code]
Dim TmpArr(1 To 3) As SingleTmpArr(1) = 2
TmpArr(2) = 3
TmpArr(3) = 4With ActiveDatabase.RootFolder.Add(“Signal”, fpObjectTypeDataSet)
.DataStructure = fpDataStructureDataSeries
.DataType(fpDataComponentAll) = fpDataTypeFloat32
.NumberOfRows = 3
.Range(fpDataComponentY, 1, 1, .NumberOfColumns, .NumberOfRows).Value = TmpArr
.Update
End With
[/code]2) Create a FPScript formula for each dataset and use the index operator.
[code]
Sub MatrixToDataSeries()Dim oMatrix As DataSet
Set oMatrix = ThisDatabase.RootFolder.Object(“Matrix”, fpObjectTypeDataSet)
Dim oFml As Formula
For i = 1 To oMatrix.NumberOfColumns
Set oFml = ThisDatabase.RootFolder.Add(“Dataset” & CStr(i), fpObjectTypeFormula)
With oFml
.Formula = “Matrix[” & i – 1 & “]”
.Update
.Evaluate
End With
Next i
End Sub
[/code]11.11.2009 at 19:45 #34796Norbert BakkersParticipantThank you for the quick reply.
I wasn’t aware that all components of the [b]Range[/b] method had to be specified. Flexpro help (Version 7) has these specified as optional, so I left them out. However, the routine is working fine now, thanks for that.Regarding the second question:
I didn’t specify this very clear, but the multidimensional matrix is a VBA matrix, not a Flexpro matrix. I am struggling to select individual columns in the VBA matrix.
I can now copy the whole matrix from VBA to a Flexpro DataMatrix (using [b]Range[/b]) and then split them into individual datasets. However, I would prefer to copy the data columns straight from the VBA matrix to the Flexpro datasets.11.11.2009 at 20:38 #34797Bernhard KantzParticipantAlternatively you have to copy the column values into a new variable.
Example:
[code]
Dim TmpArr(1 To 3, 1 To 2) As SingleTmpArr(1, 1) = 1
TmpArr(2, 1) = 2
TmpArr(3, 1) = 3
TmpArr(1, 2) = 4
TmpArr(2, 2) = 5
TmpArr(3, 2) = 6ReDim TmpArr2(LBound(TmpArr, 2) To UBound(TmpArr, 2)) As Single
For i = LBound(TmpArr) To UBound(TmpArr)
For j = LBound(TmpArr2) To UBound(TmpArr2)
TmpArr2(j) = TmpArr(i, j)
Next j‘ Create DataSet
Next i
[/code] -
AuthorPosts
- You must be logged in to reply to this topic.