|
▼KANA さん:
こんにちは。
>> MyDic.Add "1", rs(0)
>> MyDic.Add "2", rs(0).Value
>
> 上記の部分で rs(0)とrs(0).value の意味が
> いまいちわかりませんので教えていただけないでしょうか?
ごめんなさい。
KANAさんの記述を使うと
Midic.Add "1", rs![F1]
Midic.Add "2", rs![F1].Value
の方が解りやすかったですね。
rs(0) は rs の一番初めのフィールドを表しています。
>rs(0)のほうはFieldとでてきてて
rs![F1] をDictionary オブジェクトの Item 値に代入すると
rs![F1] の値ではなく、ADODB.Recordset で定義されている
フィールドオブジェクトへの参照を代入してしまっている事を意味します。
初めに投稿されたコードですと、
>>> rs.Close
>>> Set rs = Nothing
の箇所で rs への参照が切れてしまっている為、
フィールドも参照できなくなりエラーが発生しております。
値だけをDictionaryオブジェクトに入力するのであれば
rs![F1].Value と明示的に指定しなければいけないという事です。
KANAさんのコードをそのまま生かすとなると、
> MyVal = Array(rs![F1], rs![F2], rs![F3], rs![F4], rs![F5], rs![F6], rs![F7], _
> rs![F8], rs![F10], rs![F11], rs![F12], rs![F13], rs![F14], rs![F17])
MyVal = Array(rs![F1].Value, rs![F2].Value, rs![F3].Value, rs![F4].Value, rs![F5].Value, rs![F6].Value, rs![F7].Value, _
rs![F8].Value, rs![F10].Value, rs![F11].Value, rs![F12].Value, rs![F13].Value, rs![F14].Value, rs![F17].Value)
となりますね。
> Accessで、こういうことをやる場合は、
> Dictionaryはあまり使わないほうがいいのでしょうか?
当方でしたら、SQLで片づけてしまうかと思われます。
提示されたコードのうち、左3つを比較するSQLでしたら
SELECT
旧TBL.key
, IIf([旧TBL]![F1]=[新TBL]![F2],"",[新TBL]![F2]) AS 比較1
, IIf([旧TBL]![F2]=[新TBL]![F3],"",[新TBL]![F3]) AS 比較2
, IIf([旧TBL]![F3]=[新TBL]![F4],"",[新TBL]![F4]) AS 比較3
FROM
旧TBL
INNER JOIN
新TBL
ON 旧TBL.key = 新TBL.key
WHERE NOT(
([旧TBL]![F1]=[新TBL]![F2])
AND ([旧TBL]![F2]=[新TBL]![F3])
AND ([旧TBL]![F3]=[新TBL]![F4])
)
上記のSQLをクエリのSQLビューに張り付け実行すると
結果が出るかと思われます。
(コピーペーストする際は
全角スペースは半角スペースに変換して下さい)
ただ、自分に慣れている方法で結果を出すことは
決して悪い事だと思いませんので
まずはコードの問題を解決した後
ご興味があればSQLにも挑戦されてみてはいかがでしょうか。
|
|