スクリプト コンポーネントの出力列が NULL かどうかを確認しようとしています。Row.Column_IsNull を使用しようとしましたが、次のことをしようとすると:
If Row.Column_IsNull = True Then
// do something
End If
「Property Row.Column_IsNull is WriteOnly」というエラーが表示されます。
スクリプト コンポーネントの出力列が NULL かどうかを確認しようとしています。Row.Column_IsNull を使用しようとしましたが、次のことをしようとすると:
If Row.Column_IsNull = True Then
// do something
End If
「Property Row.Column_IsNull is WriteOnly」というエラーが表示されます。
上記の主なエラーは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