FlexPro
HistoryBase
Engineering
Training
Downloads
FlexPro-Support
Wissen
Community
Über Uns
Referenzen
Jobs
Allgemeiner Kontakt
Händlerverzeichnis
FlexPro-Support
DE
EN
FR
Placeholder
Produkte und Lösungen
Support und Downloads
Unternehmen
Magazin
Kontakt
Sprache
MyWeisang

Account Einstellungen

Topic

Copy array data in a dataset using Range

Startseite ' Community ' Automation and VBA ' Copy array data in a dataset using Range

Anzeigen von 5-Stellen - 1 bis 5 (von insgesamt 5)
  • Autor
    Beiträge
  • #34794
    Norbert Bakkers
    Teilnehmer

    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
    Teilnehmer

    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
    Teilnehmer

    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
    Teilnehmer

    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
    Teilnehmer

    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

Anzeigen von 5-Stellen - 1 bis 5 (von insgesamt 5)
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.