• ベストアンサー

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

アクセスの同テーブル内に下記レコード(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

  • アクセスのデータ取り込みについて

    UTF8のテキストデータを取り込みする際 データが10フィールドあるとします。 1レコード目の1フィールド目から9フィールド目までデータがあり、10フィールド目はNULL 2レコード目の1フィールド目から10フィールド目までデータがある場合 テキストデータ自体9フィールド目までしか取り込めない場合がございます。 こういったレコード終端がNULLの場合とNULLでない場合に取り込む際 注意することはありますでしょうか?? 因みにデータを取り込む際、文字コードを指定しフィールドの データ型を変更する際 存在するフィールドに比べアクセス上ではフィールド数が足らなくなるのですが・・・ どうぞよろしくお願いします。

  • Access DlookUpのネスト

    Access 2010 です。 コントロールソースでの利用を想定しています。 DlookUpでDlookUpの結果を条件にネストする場合 =DLookUp("外フィールド1","外テーブル","[外フィールド2]=DLookUp(内フィールド,'内テーブル','rs('内フラグ')=Yes')") の様な利用の仕方をしたいのですが#エラーになってしまいます。 検索条件の =DLookUp(内フィールド,'内テーブル','rs('内フラグ')=Yes')") 単体では正しく取得出来ているので、 ネストする際のクォーテーション絡みなどで正しく値が取得できていないのでは と考えておりますが、正しくはどう記述するべきでしょうか?

  • 回答フィールドのデータをリセットするには

    只今、問題と回答と集計する問題集のデータベースをAccess2002で作成しています。 会社では、バージョン2013になります。 バージョン2013では全く動作確認はしていませんが、基本骨格を自宅のバージョン2002で作成しています。 集計迄は、完了出来て、同じファイルで複数の人が使用して、一人の方の回答が終了したら全ての回答フィールドの答えをリセットする流れにしたいと思っています。 下記の方法で、試してみましたが、思い通りの動作になりません。 1.回答フィールド(回答1 回答2 回答3 回答4 回答5 の5つで、yes/no型のチェック方式)の削除クエリを作成して、データを削除できるかと思いましたが、問題まで削除されます。 2.ボタンに下記のコードで、回答フィールドの内容をリセットする。   Private Sub クリア_Click() Me.回答1 = Null Me.回答2 = Null Me.回答3 = Null Me.回答4 = Null Me.回答5 = Null End Sub この場合は、表タイプのフォームを作成して、先頭行をクリックして最終行迄ドラッグして選択したら全ての行の回答フィールドのレコードがリセット出来ると思いましたが、最初にクリックした行が有効となり選択が有効になっている行のみのデータがリセットとなります。 全ての問題に対しての全ての回答フィールドに入っているデータをボタンをクリックしてデータを一括でリセットする方法は有りますでしょうか? ご教授頂ければ幸いです。 宜しくお願い致します。

  • アクセスのテキスト型フィールドの初期値

    アクセスのテーブルにテキスト型フィールド「●●日付」を作成しました。さらに、定型入力の方法として、日付(____/__/__)を指定しています。 このテーブルから、クエリでデータを取得する際、●●日付にデータを入力していないレコードのみを取得したいと思い、クエリの抽出条件として=""(ダブルクォーテーション)や=''(シングルクォーテーション)と記載したのですが、レコードが1件も抽出されません(もちろん●●日付にデータを入れていないレコードは複数あります)。一方で、<>""や<>''で、●●日付にデータが入力されているレコードを抽出しようとした場合は、●●日付にデータが入力されているレコードが抽出されます。 テキスト型フィールドにデータが入力されていないレコードを抽出するクエリはどのようにしたら作成できるのでしょうか?

  • テーブルに空文字を入力させない方法

    MYSQLで下記のようなテーブルがあります。codeが主キーになっています。 +---------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+-------+ | day | varchar(255) | YES | | NULL | | | time_mm | varchar(255) | YES | | NULL | | | time_ss | varchar(255) | YES | | NULL | | | id | varchar(255) | YES | | NULL | | | code | varchar(255) | NO | PRI | NULL | | | stock | varchar(255) | YES | | NULL | | +---------+--------------+------+-----+---------+-------+ selectでデータを引っ張ってくると下記のようになります。 +------+---------+---------+-------+------+-------+ | day | time_mm | time_ss | id | code | stock | +------+---------+---------+-------+------+-------+ | NULL | NULL | NULL | dd | | NULL | | 1111 | 2222 | 3333 | 4444 | 1234 | 6666 | | 11 | 22 | 33 | 44 | 4649 | 66 | | 111 | 222 | 333 | 444 | 5963 | 666 | | NULL | NULL | fdfd | fdfd | fd | NULL | +------+---------+---------+-------+------+-------+ codeの一番上が空文字列になっているので、テーブルにデータが入っていると思うのですが、空文字も入力不可にさせたいです。 どのようにすれば実現させることができるでしょうか?

  • order by について

    質問させてください。 下記テーブルがあるとします。 [samle_tbl](フィールドa, b(integer)) ====== a|b ====== 2|* *|4 3|5 4|2 *|1 2|6 1|2 (※*はNULLデータ) 上記のテーブルでa, bフィールドにおいて数字の大きいレコード順に取得したいとかんがえています。 2|6 3|5 *|4 4|2 2|* 1|2 *|1 簡単にいうとa, bフィールドの値においてどちらかの数値がa, bフィールド内において降順にレコードをシュとくしたいです。 同じ順番に値する場合*(NULLデータ)を含むレコードと含まないレコードの順番は気にしません。 どのようなSQLを実行すれば取得できますでしょうか?

  • ACCESSのフィールドに記述する式について

    次のソフトを使っています。 ACCESS 2003 Windows7 次のことをやりたいです。 1つのレコードに業者が20フィールドほど並んでいるテーブルを作成しました。 クエリのフィールドに式を1つ追加しまして、1レコードの中で 業者フィールドにNullが1つ以上あるかないかを調べる式を 作りたいです。 1つも無ければ、値を表示し、1つ以上ある場合は値を表示しないという ことをやりたいのです。 そもそも、このようなことができるのかもわかりませんが、 どなたかお助けくださいませ。 よろしくお願いいたします。

  • アクセス:不要なデータのみを一括削除

    複数のフィールドに”不明”という文字が記録されています。この不明を全てのレコードで一括して削除する方法を探しております。 色々試しましたが、同じレコードのところまでしか消えなかったり(and条件)、逆に必要なデータが入った部分まで消えてしまったりします(Or条件)。 今までは更新クエリのフィールドひとつひとつで”不要”で条件設定し、更新にNullを入れ消していますが、一つ一つするには時間がかかるため、一括してする方法を探しております。

  • Access 条件によってフィールドのデータを削除したい

    いつもお世話になっています。 Accessで書籍管理のデータベースを作っています。 「利用者名」「連絡先」「貸出日」等のフィールドがあります。  書籍が返却されたときに「利用者名」のデータを削除しますが、削除されたとき「Null」の時、そのレコードの「連絡先」と「貸出日」のデータを消去したいと思います。 どのように設定すればよいか教えてください。 また、貸しだし登録の時に、「利用者名」が入力されたのに、「連絡先」や「貸出日」を入力されていな場合の警告の出し方も教えてください。 よろしくお願いいたします。

  • WORDの差込印刷の挿入データ(フィールド・スイッチの挿入方法)

    WORD、Excel2002シリーズです。 今、WORDの文書内にExcelのデータを差込んでいるのですが、Excelで料金のデータで表示していた通貨表示の円マークとカンマがWORDに差込むと非表示になってしまい、困っています。ヘルプなどで、「スイッチ」というものを挿入してくださいとあり、通貨形式にするには、\#を追加してくださいとあるのですが、どこに追加したらいいのかわかりません。 ちなみに、自分の今のフィールの形式は、下記の状態です。{MERGEFIELD"代金"}です。この代金フィールドがExcelのデータで\5,500というようにExcelでは、表示されています。 教えてください。。ちなみにこのフィールドの設定操作でよくわかるようなサイトや書籍などをご存知の方いらしゃったらそちらも教えてください!!

専門家に質問してみよう