FlexPro
HistoryBase
Engineering
Training
Downloads
FlexPro Support
Knowledge
Community
About us
References
Jobs
General Contact
List Of Retailers
FlexPro Support
EN
DE
FR
Placeholder
Products and Solutions
Support and Downloads
Company
Magazine
Contact Us
Language
MyWeisang

Account settings

Topic

Copy array data in a dataset using Range

Home page Community Automation and VBA Copy array data in a dataset using Range

Viewing 5 posts - 1 through 5 (of 5 total)
  • Author
    Posts
  • #34794
    Norbert Bakkers
    Participant

    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 Single

    TmpArr(1) = 2
    TmpArr(2) = 3
    TmpArr(3) = 4

    With ActiveDatabase.RootFolder.Add(“Signal”, fpObjectTypeDataSet)
    .DataStructure = fpDataStructureDataSeries
    .DataType(fpDataComponentAll) = fpDataTypeFloat32
    .NumberOfRows = 3
    .FillColumns “(NumberOfRows(i), FloatingPoint32 0, FloatingPoint32 0)”, fpDataComponentAll
    .Update
    End With

    ActiveDatabase.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?

    #34798
    Norbert Bakkers
    Participant

    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 Single

    TmpArr(1) = 2
    TmpArr(2) = 3
    TmpArr(3) = 4

    With ActiveDatabase.RootFolder.Add(“Signal”, fpObjectTypeDataSet)
    .DataStructure = fpDataStructureDataSeries
    .DataType(fpDataComponentAll) = fpDataTypeFloat32
    .NumberOfRows = 3
    .FillColumns “(NumberOfRows(i), FloatingPoint32 0, FloatingPoint32 0)”, fpDataComponentAll
    .Update
    End With

    ActiveDatabase.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?

    #34795
    Bernhard Kantz
    Participant

    1) At the moment the [b]range[/b] method only works if all arguments are defined.
    Example:
    [code]
    Dim TmpArr(1 To 3) As Single

    TmpArr(1) = 2
    TmpArr(2) = 3
    TmpArr(3) = 4

    With 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]

    support@weisang.com

    #34796
    Norbert Bakkers
    Participant

    Thank 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.

    #34797
    Bernhard Kantz
    Participant

    Alternatively you have to copy the column values into a new variable.
    Example:
    [code]
    Dim TmpArr(1 To 3, 1 To 2) As Single

    TmpArr(1, 1) = 1
    TmpArr(2, 1) = 2
    TmpArr(3, 1) = 3
    TmpArr(1, 2) = 4
    TmpArr(2, 2) = 5
    TmpArr(3, 2) = 6

    ReDim 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]

    support@weisang.com

Viewing 5 posts - 1 through 5 (of 5 total)
  • You must be logged in to reply to this topic.