需要保存一对多关系VB6

时间:2013-01-07 14:26:01

标签: arrays sorting vb6

所以我必须从有两种ID的网格中保存。 LineId& CUSTID。每个LineId可以有多个CustId。数据的一个例子是这样的:

LineId     CustId
1          33
2          98
7          101
1          51
3          28
7          02
1          35        

我需要使用保存过程保存代码,该过程接受每个行ID的以空分隔的CustIds字符串。我为保存的每个LineId调用一次保存过程。我无法改变保存程序的工作方式。

到目前为止,我一直在将网格添加到具有行ID和cust id的类型数组中。

Dim typeRows(gridRows - 1) As Ids 'gridRows is rowcount of grid
For i = 0 To grid.Rows - 1
    typeRows(i).LineId = grid.TextMatrix(i, GridColumns.colLineId)
    typeRows(i).CustId = grid.TextMatrix(i, GridColumns.colCustId)
Next

但我对下一步应该做的事情有点困惑。我应该对网格进行排序吗?那么我将如何通过排序的网格并为每个lineid组合custid?

非常感谢任何帮助或指导。

1 个答案:

答案 0 :(得分:2)

如果不对网格进行排序,你必须循环遍历数组以检查之前是否已找到id,也可以这样做,但可能需要一些时间,具体取决于数据的大小

'1 form with :
'    1 flexgrid control : name=grid
Option Explicit

Private Type Ids
  LineId As String
  CustId As String
End Type

Private Sub Form_Click()
  'export to delimited string
  Dim intRow As Integer
  Dim intId As Integer
  Dim intBound As Integer
  Dim udtIds() As Ids
  Dim blnThere As Boolean
  Dim intCount As Integer
  With grid
    intBound = .Rows - 1
    ReDim udtIds(intBound) As Ids
    intCount = 0
    For intRow = 1 To intBound
      'loop through all rows
      blnThere = False
      For intId = 0 To intBound
        'check if lineid was already found before
        If udtIds(intId).LineId = .TextMatrix(intRow, 0) Then
          blnThere = True
          Exit For
        End If
      Next intId
      If blnThere Then
        'if lineid was already found before, just add the custid
        udtIds(intId).CustId = udtIds(intId).CustId & "," & .TextMatrix(intRow, 1)
      Else
        'if lineid is new, then create new lineid with custid in udt
        udtIds(intCount).LineId = .TextMatrix(intRow, 0)
        udtIds(intCount).CustId = .TextMatrix(intRow, 1)
        intCount = intCount + 1
      End If
    Next intRow
  End With 'grid
  'now you can save the udt
End Sub

Private Sub Form_Load()
  With grid
    'fill grid with example values
    .Cols = 2
    .Rows = 8
    .FixedRows = 1
    .FixedCols = 0
    .TextMatrix(0, 0) = "LineId"
    .TextMatrix(0, 1) = "CustId"
    .TextMatrix(1, 0) = "1"
    .TextMatrix(2, 0) = "2"
    .TextMatrix(3, 0) = "7"
    .TextMatrix(4, 0) = "1"
    .TextMatrix(5, 0) = "3"
    .TextMatrix(6, 0) = "7"
    .TextMatrix(7, 0) = "1"
    .TextMatrix(1, 1) = "33"
    .TextMatrix(2, 1) = "98"
    .TextMatrix(3, 1) = "101"
    .TextMatrix(4, 1) = "51"
    .TextMatrix(5, 1) = "28"
    .TextMatrix(6, 1) = "02"
    .TextMatrix(7, 1) = "35"
  End With 'grid
End Sub