-2

在这里,我在 vb6 中创建了记录集并将值存储在该 vb6 中。我想将该记录集值写入数据库表。在执行该代码时,我收到编译错误,如“预期:=”。请看下面的代码。请让我知道我在哪里做错了。我在 cmdCommand.Execute() 中遇到错误

With rcdDNE.Fields
        .Append "RTN", adVarChar, 9
        .Append "AccountNbr", adVarChar, 17
        .Append "IndividualName", adVarChar, 22
        .Append "FirstName", adVarChar, 50
        .Append "MiddleName", adVarChar, 1
        .Append "LastName", adVarChar, 50
        .Append "Amount", adCurrency
    End With

    rcdDNE.Open
    intFileNbr = FreeFile(1)
    Open strFileName For Input As #intFileNbr Len = 95 ' Open file for input.
    Do While Not EOF(intFileNbr)
       Line Input #intFileNbr, strCurrentLine
       If Mid(strCurrentLine, 1, 1) = 6 Then
         strRoutingNbr = Mid(strCurrentLine, 4, 8)
         strAcct = Mid(strCurrentLine, 13, 17)
         strIndividualName = Trim(Mid(strCurrentLine, 55, 22))
         strAmount = Trim(Mid(strCurrentLine, 30, 10))
         strAmount = Left(strAmount, Len(strAmount) - 1)
         curAmount = CCur(strAmount)
       End If

       ' Add new record to temporary recordset
            With rcdDNE
                .AddNew
                .Fields![RTN] = strRoutingNbr
                .Fields![AccountNbr] = strAcct
                .Fields![IndividualName] = strIndividualName
                .Fields![Amount] = curAmount
                .Update
            End With

    Loop
    Close #intFileNbr

    frmDNELoad.lblStatus.Caption = "Formatting Names..."
    frmDNELoad.Refresh
    DoEvents

        ' Parse the IndividualName field
    rcdDNE.MoveFirst
    Do Until rcdDNE.EOF
        lngMidInitPos = 0
        lngParsePos1 = 0
        lngParsePos2 = 0
        lngParsePos3 = 0
        lngParsePos4 = 0
        lngParsePos5 = 0
        lngParsePos6 = 0
        strParseString = ""
        strParseFirstNm = ""
        strParseMidInit = ""
        strParseLastNam = ""

        strParseString = Trim(rcdDNE.Fields![IndividualName])
        ' Replace double spaces ("  ") with a single space (" ")
        lngPos = InStr(1, strParseString, "  ")
        Do While lngPos
            strParseString = Mid(strParseString, 1, lngPos - 1) & Mid(strParseString, lngPos + 1, Len(strParseString))
            lngPos = InStr(1, strParseString, "  ")
        Loop

        ' Locate positions of remaining spaces
        lngParsePos1 = InStr(1, strParseString, " ")
        If lngParsePos1 = 0 Then
            lngParsePos2 = 0
        Else
            lngParsePos2 = InStr(lngParsePos1 + 1, strParseString, " ")
        End If

        If lngParsePos2 = 0 Then
            lngParsePos3 = 0
        Else
            lngParsePos3 = InStr(lngParsePos2 + 1, strParseString, " ")
        End If
        If lngParsePos3 = 0 Then
            lngParsePos4 = 0
        Else
            lngParsePos4 = InStr(lngParsePos3 + 1, strParseString, " ")
        End If
        If lngParsePos4 = 0 Then
            lngParsePos5 = 0
        Else
            lngParsePos5 = InStr(lngParsePos4 + 1, strParseString, " ")
        End If
        If lngParsePos5 = 0 Then
            lngParsePos6 = 0
        Else
            lngParsePos6 = InStr(lngParsePos5 + 1, strParseString, " ")
        End If

        ' Determine if Middle initial is present
        If (lngParsePos3 - lngParsePos2) = 2 Then
            lngMidInitPos = lngParsePos2 + 1
            rcdDNE.Fields![MiddleName] = Mid(strParseString, lngMidInitPos, 1)
        ElseIf (lngParsePos4 - lngParsePos3) = 2 Then
            lngMidInitPos = lngParsePos3 + 1
            rcdDNE.Fields![MiddleName] = Mid(strParseString, lngMidInitPos, 1)
        ElseIf (lngParsePos5 - lngParsePos4) = 2 Then
            lngMidInitPos = lngParsePos4 + 1
            rcdDNE.Fields![MiddleName] = Mid(strParseString, lngMidInitPos, 1)
        ElseIf (lngParsePos6 - lngParsePos5) = 2 Then
            lngMidInitPos = lngParsePos5 + 1
            rcdDNE.Fields![MiddleName] = Mid(strParseString, lngMidInitPos, 1)
        ElseIf (lngParsePos2 - lngParsePos1) = 2 Then
            lngMidInitPos = lngParsePos1 + 1
            rcdDNE.Fields![MiddleName] = Mid(strParseString, lngMidInitPos, 1)
        End If

        ' If there is a middle initial, everything to the left of it goes into the
        ' first name field, and everything to the right of it goes into the last
        ' name field. If there is no middle initial, everything after the first space
        ' goes into the last name field.
        If lngMidInitPos <> 0 Then
            rcdDNE.Fields![FirstName] = Trim(Left(strParseString, lngMidInitPos - 1))
            rcdDNE.Fields![LastName] = Trim(Mid(strParseString, lngMidInitPos + 1, Len(strParseString)))
        Else
            rcdDNE.Fields![FirstName] = Trim(Left(strParseString, lngParsePos1))
            rcdDNE.Fields![LastName] = Trim(Mid(strParseString, lngParsePos1 + 1, Len(strParseString)))
        End If
        rcdDNE.Update
        rcdDNE.MoveNext
    Loop

    ' Write records to Database

    Call FindServerConnection_NoMsg

    Dim cmdCommand As New ADODB.Command
    If rcdDNE.EOF = False Then

    rcdDNE.MoveFirst

    cmdCommand.CommandText = "insert into DneFrc (RTN, AccountNbr, FirstName, MiddleName, LastName, Amount) values (RTN, AccountNbr, FirstName, MiddleName, LastName, Amount)"
    cmdCommand.Execute()
    rcdDNE.MoveNext
    Loop Until rcdDNE.EOF = True
4

1 回答 1

1

您声明错误发生在 cmdCommand.Execute()

这只是执行 CommandText 的值。它实际上与前面的代码无关,可以在示例中将其替换为所用数据的简单表,以及对表的预期状态和结果的简单说明

原始的 CommandText 显然是错误的,因为值列表包含未声明的变量。

除非您使用 'with rcdDNE' 阻止代码,否则更改的值列表将不起作用,因此您可以使用 .Fields 而不是 rcdDNE.Fields。

我将字符串剪切并粘贴到记事本中,以发现 ' 和 " 的组合,第一眼看起来还不错,但我会检查一下。

另外,请考虑数字和字符串值。一个好的测试是简单地构造一个包含硬编码测试值的值列表。您还可以将字段值分配给变量并在值列表中使用它们。这样,您可以在执行语句之前测试每个的实际值的有效性。

您也可以尝试直接在 SQL 环境中执行命令,而不是每次都运行您的代码。

于 2009-12-04T04:42:36.483 回答