Ms access 如何修复“堆栈外空间”错误?

Ms access 如何修复“堆栈外空间”错误?,ms-access,recursion,vba,Ms Access,Recursion,Vba,我有一个代码,它获取一个表,并重新排列该表以形成一个新表。它只处理了少量数据,但现在我尝试用1000多条记录运行同一代码,它得到了错误28,堆栈空间不足。我不会在这里复制我所有的代码,因为这太多了,我认为没有必要,除非你不这么认为。我认为sub的递归有问题。我需要这样做,因为捐赠者联系人ID只能有4个收件人,如果它有更多收件人,那么它必须使用相同的捐赠者联系人ID创建一个新记录并填充收件人 下面是获取错误的子程序: Sub NextDonor() With rstOutput .FindNex

我有一个代码,它获取一个表,并重新排列该表以形成一个新表。它只处理了少量数据,但现在我尝试用1000多条记录运行同一代码,它得到了错误28,堆栈空间不足。我不会在这里复制我所有的代码,因为这太多了,我认为没有必要,除非你不这么认为。我认为sub的递归有问题。我需要这样做,因为捐赠者联系人ID只能有4个收件人,如果它有更多收件人,那么它必须使用相同的捐赠者联系人ID创建一个新记录并填充收件人

下面是获取错误的子程序:

Sub NextDonor()

With rstOutput
.FindNext "[DONOR_CONTACT_ID] = " & strDonor2
'Find the next record in T_OUTPUT with that DONOR_CONTACT_ID

            If .NoMatch Then
                'If there are no more records with that DONOR_CONTACT_ID, add a new one
                .AddNew
                !DONOR_CONTACT_ID = strDonor1
                !RECIPIENT_1 = strRecip1
                !ORDER_NUMBER = strOrderNum1
                .Update
            Else
            'A second DONOR_CONTACT_ID in T_OUTPUT exists. Check to see if all fields are filled.
                If !DONOR_CONTACT_ID = strDonor2 Then
                    If IsNull(!RECIPIENT_2) And Not (IsNull(!RECIPIENT_1)) Then
                    'RECIPIENT_2 is empty, so populate it
                        .Edit
                        !RECIPIENT_2 = strRecip1
                        .Update

                    ElseIf IsNull(!RECIPIENT_3) And Not (IsNull(!RECIPIENT_2)) Then
                    'RECIPIENT_3 is empty, so populate it
                        .Edit
                        !RECIPIENT_3 = strRecip1
                        .Update
                    ElseIf IsNull(!RECIPIENT_4) And Not (IsNull(!RECIPIENT_3)) Then
                    'RECIPIENT_4 is empty, so populate it
                        .Edit
                        !RECIPIENT_4 = strRecip1
                        .Update

                    ElseIf Not IsNull(!RECIPIENT_4) Then
                    'RECIPIENT_4 is filled, so run this function again
                        Call NextDonor
                    End If

                End If
            End If
End With
End Sub

错误出现在显示Call NextDonor的行中,可能是因为递归。如果您需要我澄清我的代码试图做什么,或者如果您希望我复制代码的其他部分,请告诉我。

尝试此操作以避免递归

Sub NextDonor(byref Again as Boolean)
With rstOutput
DoItAgain :
.FindNext "[DONOR_CONTACT_ID] = " & strDonor2

  If ....
    ....
  ElseIf Not IsNull(!RECIPIENT_4) Then
    'RECIPIENT_4 is filled, so run this function again
    Goto DoItAgain
  End If
End Sub

尝试此操作以避免递归

Sub NextDonor(byref Again as Boolean)
With rstOutput
DoItAgain :
.FindNext "[DONOR_CONTACT_ID] = " & strDonor2

  If ....
    ....
  ElseIf Not IsNull(!RECIPIENT_4) Then
    'RECIPIENT_4 is filled, so run this function again
    Goto DoItAgain
  End If
End Sub

实际上,您的递归代码和第一个答案都跳过了收件人。如果第四个插槽已满,您重复另一个查找,您将丢失当前收件人!这也消除了递归。 相反:


实际上,您的递归代码和第一个答案都跳过了收件人。如果第四个插槽已满,您重复另一个查找,您将丢失当前收件人!这也消除了递归。 相反: