• ベストアンサー

アクセス 空フィールドのみ 別データー挿入

アクセスの同テーブル内に下記レコード(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)データーを表示させて上手く出来ないか 考えたりもして見ましたが上手く行きません 良い方法が思いつきません こんな方法があるとか このサイトを参考にしなさいとか どなたかご教授頂けませんでしょうか よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.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

hide_sky
質問者

お礼

30246kiku様 早速ご回答頂きましてありがとうございました。 クエリで2レコード事前に選択しておいてコード実行させ 希望していた結果が得られました。 コードを拝見すると1つ1つはある程度理解出来のですが 到底一から自分で作る事は出来ません知識の無さを痛感します。 方法を教えて頂くどころか作って頂いてしまい恐縮です。 また精進します。 この度は本当にありがとうございました。

関連するQ&A

専門家に質問してみよう