- ベストアンサー
Accessメール取り込みで重複問題
- VBAを使用してOutlookのメールをAccessのテーブルに取り込む際、重複するメールが取り込まれてしまう問題が発生しています。
- 対象フォルダは「個人用フォルダ」の中の「受信トレイ」の中の「集荷」です。
- 最近ADOを勉強し始めたばかりで原因がわからないため、解決策を探しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
大変申し訳ありません。 私の勘違いだったようです。 検証結果、条件に合致しない場合には、EOF BOF ともに True になりました。 迷宮に入っていたのはヘルプを~@;}%した私でした。 orz こちらでは何故か、主キー設定無し・全てのフィールドでインデックス無し にしても機能しました? >1つ目のメールアイテムに対して・・・ こちらです。
その他の回答 (1)
- nicotinism
- ベストアンサー率70% (1019/1452)
ここが迷宮の入り口かも? >If rs.EOF Then '検索条件と合致する物がない場合 合致しない場合に、EOFにはならなくて最後のレコードに移動します。 ヘルプより 『カレント行の位置は、検出されたレコードに設定され、 条件を満たす行がない場合は、Recordset の最後 (または最初) に設定されます』 EOF は最後のレコードの【次】です。 『EOF カレント レコードの位置が Recordset オブジェクトの最後のレコードより後にあることを示します。』 なので、rs.EOF は常に不成立です。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DAOのレコードセットなら、NoMatch プロパティで簡単に調べられますので DAOのレコードセットを使われるのが分かりやすいかと思います。 (Find でも Seek でも有効です) ADO で、Rs.Recordcount = Rs.AbusolutePosition で最後のレコードか否かを判断できますが 最後のレコードに行った理由が 該当するレコードが無いため、か たまたま最終レコードが該当したため、かは判別不能のような気がします。 (自信なさげ・・・)
お礼
すみません OKwaveの利用は初めてなので… ここへの入力をしていませんでした… ありがとうございました。
補足
ありがとうございます。 実は回答を待つ間にテーブルのKEYフィールドに主キーを設定したところ、正常に作動しました。(理由はよくわからないままですが…) >合致しない場合に、EOFにはならなくて最後のレコードに移動します。 読むほどにわからなくなってきたので少しご解説頂きたいのですが、上記rs.Find…の動作は、カレントレコードのフィールドの値1つに対してメールアイテムの最初から最後までを捜索するのか、1つ目のメールアイテムに対してフィールドの値の最初から最後までを捜索するのかどちらなんでしょうか。 自分では前者だと思っているのですが…。(トンデモ質問でしたらスミマセン)
お礼
わざわざ調べていただいてありがとうございます。 おかげさまで自分なりにEOF BOFについて調べて、より深く理解することができました。 主キーについては謎のままですが、ADOで更に違うテーブルへレコードを書き移す際にも主キーがないとうまくいきませんでしたので、設定したままにしておきます。 >1つ目のメールアイテムに対して・・・ >こちらです。 なるほど、そうなんですね。 意味が分かってくると捗りますし楽しいです。 お忙しい中ありがとうございました。 次の機会があればまた宜しくお願いいたします。