|
▼小僧 さん:
とても分かりやすいアドバイスをありがとうございました。
言われたとおりに、Valueを付け加えたところうまくいきました。
小僧さんに教えてもらったSQLも試してみました。
ありがとうございました。
一つだけ、どうしても分からないことがあるのですが、
一部、どんなに値を確認してみても、TypeNameも値も一緒なのに、値が違うというように認識されてしまうものがありました。
Dictionary でやってみても、SQLでやってみても、全く同じ結果になりました。
数字の箇所なんですが、
たとえば、新データ9.2 旧データ9.2 TypeName 両方ともDouble
私にはすべて同じように感じるのですが、原因があるとすれば、何が考えられるのでしょうか?
度々、すみません。
>▼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にも挑戦されてみてはいかがでしょうか。
|
|