我们收到了大量数据。我需要连接[Long Text]字段,以便用户可以更轻松地操作该字段。我知道我错过了一个行计数器计算,但我认为我使它变得比它应该更复杂和/或不够。有人可以查看此代码并为我清理它吗?我已经搜索过这个并将我可以合并到一个代码中。谢谢!
Private Sub Command22_Click()
Dim rs As DAO.Recordset
Dim db As Database
Dim strLongText As String
'Ensuring the order is correct
Set rs = db.OpenRecordset("Select * from dbo_tblRouter Order By Plant, Material, GrC, UOpAc;")
'declare i for row counter
Dim i As Integer
' Set up IF condition to say IF Material(i) = Matertial(i+1) AND
' Plant(i) = Plant(i+1) AND OpAc(i) = OpAC(i+1) AND GrC(i) = GrC(i+1) THEN
' CONCATENATE(&) Long_Text
' DO this WHILE these Conditions continue to be met
' Then exit condition and run to the next row
' Stop at the EOF
If Not (rs.EOF And rs.BOF) Then
rs.MoveFirst
Do Until rs.EOF = True
If dbo_tblRouter.Plant(i) = dbo_tblRouter.Plant(i) + 1 Then
ElseIf dbo_tblRouter.Material(i) = dbo_tblRouter.Material(i) + 1 Then
ElseIf dbo_tblRouter.GrC(i) = dbo_tblRouter.GrC(i) + 1 Then
ElseIf dbo_tblRouter.UOpAC(i) = dbo_tblRouter.UOpAC(i) + 1 Then
While True
With rs
.FindFirst "RowNumber" = 0
strLongText = dbo_tblRouter.[Long Text]
rs.MoveNext
While Not rs.EOF
' Add a soft return and concatenate with the next row
strLongText = strLongText & Chr(10) & dbo_tblRouter.[Long Text]
rs.MoveNext
Wend
' Put the concatenated data into this empty memo field
.Edit
.Fields("LText") = strLongText
.Update
End With
Wend
rs.MoveNext
End If
rs.MoveNext
Loop
End If
End Sub
答案 0 :(得分:0)
好的,不确定你要做什么,但你已经犯了很多错误。
dbo_tblRouter.Plant(i) = dbo_tblRouter.Plant(i) + 1
永远不会是真的。我想你的意思是:
dbo_tblRouter.Plant(i) = dbo_tblRouter.Plant(i + 1)
做一个:
If [condition 1} Then
ElseIf [condition 2} Then
不是嵌套的IF语句。第二行仅在第一行为false时执行。这是一个嵌套IF:
If [condition 1} Then
If [condition 2} Then
这永远不会结束。这是一个永远的循环,因为你没有测试变量。
While True
Wend
另外,尽管While/Wend
有效,但它已被折旧超过20年。 Do/Loop
是替代品。
您在2个不同的地方使用rs.MoveNext
。不知道为什么。但是更改内部循环中的记录指针也会在外部循环中更改它。