- ベストアンサー
アクセス 空フィールドのみ 別データー挿入
アクセスの同テーブル内に下記レコード(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)データーを表示させて上手く出来ないか 考えたりもして見ましたが上手く行きません 良い方法が思いつきません こんな方法があるとか このサイトを参考にしなさいとか どなたかご教授頂けませんでしょうか よろしくお願い致します。
- みんなの回答 (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
お礼
30246kiku様 早速ご回答頂きましてありがとうございました。 クエリで2レコード事前に選択しておいてコード実行させ 希望していた結果が得られました。 コードを拝見すると1つ1つはある程度理解出来のですが 到底一から自分で作る事は出来ません知識の無さを痛感します。 方法を教えて頂くどころか作って頂いてしまい恐縮です。 また精進します。 この度は本当にありがとうございました。