レコードセット rstImportData("Flat Size") の項目 = Null
それにより、次のステートメントが与えられます。
IIF(IsNull(rstImportData("Flat Size")), Null, cstr(rstImportData("Flat Size")))
Result: Throws error 94: Invalid use of Null
偽の比較で型変換を削除してステートメントを変更すると、次のようになります。
IIF(IsNull(rstImportData("Flat Size")), Null, 0)
Result: Null
最初は Null を返します。IIF テストに合格したとしても、渡された値が null である必要がある場合、IIF で型変換を実行できないようです。それでも、真と偽の両方の答えで評価しようとします。このように IIF を使用している唯一の理由は、インポートからのデータをデータベース内の一致するレコードと比較して、履歴の前に追加する必要があるかどうかを確認するための 25 行の比較があるためです。
何かご意見は?データがインポートされる方法にはnullの日付があり、スプレッドシートのインポートが文字列形式の場合、値を適切に比較するためにどちらか一方を他方に変換する必要がありますが、どちらかの側がnullの場合、この例外が発生します:(
編集 IIF を使用していた理由の例 (およびユニバーサル関数の使用を検討している)
If master("one") <> import("one") Or _
master("two") <> import("two") Or _
master("date") <> import("date") Or _ //import("date") comes from a spreadsheet, it comes in as string, CAN be a null value
master("qty") <> import("qty") Or _ //import("qty") comes from spreadsheet, comes in as a string can CAN be null
master("etc") <> import("etc") Then
....stuff....
End If
このコードは、データベースで比較するために約 20 列に展開されます。声明の一部として確認したいと思います。たくさんの解決策を思いつくことができますが、それらにはさらに多くのコードを追加する必要があります。ならば力だが、俺はそう簡単に屈服する者ではない。
私が見るオプションは
- 一時変数を作成して、レコードセットの代わりにこれらの新しい変数を比較して使用する前に作業を行う
- レコードを渡して事前フォーマットして操作するオブジェクトを作成します。ただし、同様のフィールドを持つ異なるファイルがあるため、追加の作業により各インポート タイプにこの機能が提供されます。
私はアイデアを得るためにここにいます。最も再利用可能なアプローチを探しています。