プロが教えるわが家の防犯対策術!

アクセスの同テーブル内に下記レコード(1)(2)が有ります。

(1)レコードのフィールドにはほぼデータが入っていますがNULLのフィールドもあります。
(2)レコードのフィールドはほとんどNULLです。

(1)のレコードのフィールド、データーを取得して
(2)のレコードのフィールドがNULLの場合は(1)のフィールドのデーターを貼付ける

例えば下記の(3)様にしたいです。

|数値型 |テキスト型 |日付型  |通貨型  |メモ型 |Yes/No型 |
|ID    |名前     |入力日  |金額   |     |チェック   |

(1)|01   | さる    |07/28 |1,000 |     |-1     |
(2)|02   |とら     |       |      |     |       |

(3)|02   |とら     |07/28 |1,000 |     |-1     |

自分なりに考えた所
DLookUp で一つ一つ(1)フィールドを取得して(2)フィールドNULLの場合は挿入し(3)にする方法を
考えましたが、フィールド数が実際には100ほど有り方法が良くないと思いました。

Cloneメソッドを使用して同じフォームに(1)と(2)データーを表示させて上手く出来ないか
考えたりもして見ましたが上手く行きません

良い方法が思いつきません
こんな方法があるとか
このサイトを参考にしなさいとか

どなたかご教授頂けませんでしょうか
よろしくお願い致します。

A 回答 (1件)

以下のような雰囲気ではどうでしょう



必ず並び順を指定してレコードを得ておいてから
・Clone を作成( rsC )
・同調させてから rs を1レコード先行
・rs 内が Null なら rsC から代入


Public Sub Samp1()
  Dim rs As New ADODB.Recordset
  Dim rsC As ADODB.Recordset
  Dim i As Long
  Dim bChg As Boolean

  rs.Source = "SELECT * FROM テーブル名 ORDER BY 並び順;"
  rs.Open , CurrentProject.Connection, adOpenStatic, adLockOptimistic
  If (Not rs.EOF) Then
    Set rsC = rs.Clone
    rsC.Bookmark = rs.Bookmark
    rs.MoveNext
    While (Not rs.EOF)
      bChg = False
      For i = 0 To rs.Fields.Count - 1
        If (IsNull(rs(i))) Then
          rs(i) = rsC(i)
          bChg = True
        End If
      Next
      If (bChg) Then rs.Update
      rs.MoveNext
      rsC.MoveNext
    Wend
    rsC.Close
    Set rsC = Nothing
  End If
  rs.Close
End Sub
    • good
    • 0
この回答へのお礼

30246kiku様
早速ご回答頂きましてありがとうございました。
クエリで2レコード事前に選択しておいてコード実行させ
希望していた結果が得られました。

コードを拝見すると1つ1つはある程度理解出来のですが
到底一から自分で作る事は出来ません知識の無さを痛感します。

方法を教えて頂くどころか作って頂いてしまい恐縮です。
また精進します。
この度は本当にありがとうございました。

お礼日時:2014/07/29 05:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!