1

スクリプト コンポーネントの出力列が NULL かどうかを確認しようとしています。Row.Column_IsNull を使用しようとしましたが、次のことをしようとすると:

If Row.Column_IsNull = True Then
// do something
End If

「Property Row.Column_IsNull is WriteOnly」というエラーが表示されます。

4

1 に答える 1

1

問題は何ですか

上記の主なエラーはis WriteOnly. スクリプト コンポーネントの列を変換として参照する場合、それらが ReadOnly か ReadWrite かを指定できます。

ここに画像の説明を入力

ソースとして機能する場合、そのオプションはありません。これは (論理的に) WriteOnly であり、上記のダイアログのオプションすら提供しません。そのため、ソースにいて、次のコードが示すように書き込み専用プロパティにアクセスしようとすると、壊れます。

Public Overrides Sub CreateNewOutputRows()
    Output0Buffer.AddRow()

    ' this is logically wrong
    If Output0Buffer.Column_IsNull Then

    End If
End Sub

解決策は、現在の値が入力されたかどうかを追跡するために、割り当てを行う (または別のブール値フラグを作成する) 前に、OutputBuffer0.Column に割り当てているものを調べる必要があるということです。

何が問題ではないか

私はすでにこのウサギの穴を使い果たしたので、これをここに置いておきます

_IsNull はブール値であるため、明示的なテストをスキップして単純に使用できます

If Row.Column_IsNull Then

もともと、これは代入 (=) と等号 (==) の古典的な C のような言語の問題だと思っていましたが、@John Saunders が親切に指摘してくれたので、これは VB でした。

そうは言っても、提供されたコードは機能するはずです(私にとっては機能します)。

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
    Dim x As String
    If Row.Src_IsNull = True Then
        x = "" ' do nothing
    End If
End Sub
于 2013-11-05T19:52:25.317 に答える