Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 使用VBA将ID转换为名称_Ms Access_Vba_Ms Access 2010 - Fatal编程技术网

Ms access 使用VBA将ID转换为名称

Ms access 使用VBA将ID转换为名称,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,所以在我的数据库中,我有一个连接表,列出了一个人贷款的所有“目的”。代码在仅仅显示值(以数字形式)时起作用,但在我的第二个循环中,我在第二个表中搜索目的的实际名称,我遇到了问题。它显示了正确的目的数量,但不幸的是,文本重复了第一个找到的目的的次数,而不是显示所有适用的目的 以下是我正在使用的代码: Private Sub cmdMsgBox_Click() Dim DB As Database Dim tblOpp2LP As Recordset Dim tblLoanPurpose As R

所以在我的数据库中,我有一个连接表,列出了一个人贷款的所有“目的”。代码在仅仅显示值(以数字形式)时起作用,但在我的第二个循环中,我在第二个表中搜索目的的实际名称,我遇到了问题。它显示了正确的目的数量,但不幸的是,文本重复了第一个找到的目的的次数,而不是显示所有适用的目的

以下是我正在使用的代码:

Private Sub cmdMsgBox_Click()

Dim DB As Database
Dim tblOpp2LP As Recordset
Dim tblLoanPurpose As Recordset
Dim ctlFindRecord As Control
Dim lngHoldOpportunityID As Variant
Dim intRecordCount As Integer
Dim valTestBox As String
Dim valLP As String
Dim valName As String

Set DB = CurrentDb
Set tblInputOpp2LP = DB.OpenRecordset("Opp2LP")

Set tblLoanPurpose = DB.OpenRecordset("LoanPurpose")
Set ctlFindRecord = Me.ctlFindRecord


lngHoldOpportunityID = CLng(ctlFindRecord)
valTestBox = ""

On Error GoTo ErrorHandling_Err:

tblInputOpp2LP.FindFirst "[OpportunityID] = " & lngHoldOpportunityID

If tblInputOpp2LP.NoMatch Then
    MsgBox "No Matching Record Found"
    Exit Sub
Else
Do Until tblInputOpp2LP.EOF
    If lngHoldOpportunityID = tblInputOpp2LP![OpportunityID] Then
        valLP = tblInputOpp2LP![LPID]
        intCounter = intCounter + 1

        Do Until tblLoanPurpose.EOF
            If valLP = tblLoanPurpose![LPID] Then
                valName = tblLoanPurpose![Name]
            End If
            tblLoanPurpose.MoveNext
        Loop

        If valTestBox = "" Then
            valTestBox = valName
        Else
            valTestBox = valTestBox & ", " & valName
        End If
    End If

    tblInputOpp2LP.MoveNext
Loop

txtMsgbox = valTestBox

End If

ErrorHandling_Exit:
    Exit Sub

ErrorHandling_Err:
    MsgBox Err.Description & " - " & Err.Number
    Resume ErrorHandling_Exit
End Sub
想法?提前谢谢

我明白了

事实证明,我需要做的是在第二个循环中添加一个“exit do”

请参见下面的代码示例

Private Sub cmdMsgBox_Click()

Dim DB As Database
Dim tblOpp2LP As Recordset
Dim tblLoanPurpose As Recordset
Dim ctlFindRecord As Control
Dim lngHoldOpportunityID As Variant
Dim intRecordCount As Integer
Dim valTestBox As String
Dim valLP As String
Dim valName As String

Set DB = CurrentDb
Set tblInputOpp2LP = DB.OpenRecordset("Opp2LP")

Set tblLoanPurpose = DB.OpenRecordset("LoanPurpose")
Set ctlFindRecord = Me.ctlFindRecord


lngHoldOpportunityID = CLng(ctlFindRecord)
valTestBox = ""

On Error GoTo ErrorHandling_Err:

tblInputOpp2LP.FindFirst "[OpportunityID] = " & lngHoldOpportunityID

If tblInputOpp2LP.NoMatch Then
    MsgBox "No Matching Record Found"
    Exit Sub
Else
Do Until tblInputOpp2LP.EOF
    If lngHoldOpportunityID = tblInputOpp2LP![OpportunityID] Then
        valLP = tblInputOpp2LP![LPID]
        intCounter = intCounter + 1

        Do Until tblLoanPurpose.EOF
            If valLP = tblLoanPurpose![LPID] Then
                valName = tblLoanPurpose![Name]
                exit do
            End If
            tblLoanPurpose.MoveNext
        Loop

        If valTestBox = "" Then
            valTestBox = valName
        Else
            valTestBox = valTestBox & ", " & valName
        End If
    End If

    tblInputOpp2LP.MoveNext
Loop

txtMsgbox = valTestBox

End If

ErrorHandling_Exit:
    Exit Sub

ErrorHandling_Err:
    MsgBox Err.Description & " - " & Err.Number
    Resume ErrorHandling_Exit
End Sub

伟大的我想建议你把整个分支重写几行。您可以通过以下方式打开记录集
set tblLoanPurpose=DB.OpenRecordset(“SELECT*FROM LoanPurpose WHERE LPID=“&valLP”)
,然后迭代该记录集,而不是所有额外的匹配,如果我不确定我是否理解。这看起来肯定会更有效,因为它通过更少的数据进行解析,但它不仍然需要循环吗?如果你提交了我键入的内容的另一个版本,并举例说明你的意思,并且效果良好,我很乐意将你的答案标记为正确答案!所以我现在遇到了代码的另一个问题。有时,它似乎一遍又一遍地重复它找到的最后一个贷款目的,而不是使用第一个然后第二个,等等。它似乎重复了正确的次数,而不是正确的值。思想?我觉得奇怪的是,它偶尔能正常工作,但并不总是如此。你能在你的问题中提供一些样本数据吗?只有几行和列名等将有助于更好地理解它。