-2

ここでは、vb6 でレコードセットを作成し、その vb6 に値を格納します。そのレコードセットの値をデータベース テーブルに書き込みたい。そのコードの実行中に、「Expected:=」のようなコンパイル エラーが発生します。以下のコードを参照してください。どこが間違っているのか教えてください。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'を使用してコードをブロックしない限り、変更された値のリストも機能しないため、rcdDNE.Fieldsの代わりに.Fieldsを使用できます。

文字列を切り取ってメモ帳に貼り付け、「」と「」の組み合わせを見つけました。これを確認する場合を除いて、最初は問題ないように見えます。

また、数値と文字列の値についても考えてください。良いテストは、ハードコードされたテスト値を含む値リストを作成することです。フィールド値を変数に割り当てて、値リストで使用することもできます。このようにして、ステートメントを実行する前に、それぞれの実際の値の有効性をテストできます。

毎回コードを実行するのではなく、SQL環境で直接コマンドを実行してみることもできます。

于 2009-12-04T04:42:36.483 に答える