Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


652 / 2272 ツリー ←次へ | 前へ→

【10644】クエリデータをaddnewでテーブルに入れる際に列名を列挙しないでも済むよう... ver 08/10/31(金) 13:18 質問[未読]
【10646】Re:クエリデータをaddnewでテーブルに入れ... トキドキ徹 08/10/31(金) 15:28 発言[未読]
【10671】Re:クエリデータをaddnewでテーブルに入れ... ver 08/11/4(火) 9:40 お礼[未読]
【10682】Re:クエリデータをaddnewでテーブルに入れ... ver45 08/11/7(金) 10:22 質問[未読]
【10685】Re:クエリデータをaddnewでテーブルに入れ... トキドキ徹 08/11/7(金) 15:42 発言[未読]
【10686】Re:クエリデータをaddnewでテーブルに入れ... ver45 08/11/7(金) 16:48 質問[未読]
【10687】Re:クエリデータをaddnewでテーブルに入れ... トキドキ徹 08/11/7(金) 17:16 発言[未読]
【10689】Re:クエリデータをaddnewでテーブルに入れ... ver45 08/11/7(金) 17:34 質問[未読]
【10691】Re:クエリデータをaddnewでテーブルに入れ... トキドキ徹 08/11/7(金) 17:51 発言[未読]
【10692】Re:クエリデータをaddnewでテーブルに入れ... ver45 08/11/7(金) 18:02 質問[未読]
【10694】Re:クエリデータをaddnewでテーブルに入れ... トキドキ徹 08/11/7(金) 18:14 発言[未読]
【10695】Re:クエリデータをaddnewでテーブルに入れ... ver45 08/11/7(金) 18:20 質問[未読]
【10696】Re:クエリデータをaddnewでテーブルに入れ... トキドキ徹 08/11/7(金) 18:28 発言[未読]
【10697】Re:クエリデータをaddnewでテーブルに入れ... ver45 08/11/7(金) 18:30 質問[未読]
【10698】Re:クエリデータをaddnewでテーブルに入れ... トキドキ徹 08/11/7(金) 18:33 発言[未読]
【10699】Re:クエリデータをaddnewでテーブルに入れ... ver45 08/11/7(金) 18:41 質問[未読]
【10700】Re:クエリデータをaddnewでテーブルに入れ... トキドキ徹 08/11/7(金) 18:45 発言[未読]
【10724】Re:クエリデータをaddnewでテーブルに入れ... ver45 08/11/11(火) 10:28 質問[未読]
【10725】Re:クエリデータをaddnewでテーブルに入れ... neptune 08/11/11(火) 12:34 発言[未読]
【10732】Re:クエリデータをaddnewでテーブルに入れ... ver45 08/11/12(水) 13:32 お礼[未読]
【10693】Re:クエリデータをaddnewでテーブルに入れ... トキドキ徹 08/11/7(金) 18:04 発言[未読]

【10644】クエリデータをaddnewでテーブルに入れる...
質問  ver E-MAIL  - 08/10/31(金) 13:18 -

引用なし
パスワード
   初めましてverと申します。
宜しくお願い致します。

クエリを読み込み重複したデータを一つだけテーブルに追加していくという処理を作成しているのですが

Dim rs1        As ADODB.Recordset
Dim rs2        As ADODB.Recordset

rs2.AddNew

rs2!野菜 = rs1!野菜
rs2!肉 = rs1!肉
rs2!魚 = rs1!魚

rs2.Update


のように作成したのですが、これを読み込んだクエリからフィールド名を取得してテーブルに書き出すように変更したいのです。

何故かといいますと、処理したいクエリごとにフィールド名が異なっているので、addnewとupdateの間の処理を変更せずに処理が出来るようにしたいのです。

宜しくお願い致します

【10646】Re:クエリデータをaddnewでテーブルに入...
発言  トキドキ徹  - 08/10/31(金) 15:28 -

引用なし
パスワード
   ▼ver さん:
フィールド名の取得例です。

Dim myLooP As Long

For myLooP = 0 To rs1.Fields.Count - 1
  Debug.Print rs1(myLooP).Name
Next myLooP


参考までに

【10671】Re:クエリデータをaddnewでテーブルに入...
お礼  ver E-MAIL  - 08/11/4(火) 9:40 -

引用なし
パスワード
   rs2.AddNew
        
For ix = 0 To rs1.Fields.Count - 1
rs2(ix) = rs1(ix)
Next ix
        
rs2.Update

としたところ上手く所定の動作が出来るようになりました

ありがとうございます!

【10682】Re:クエリデータをaddnewでテーブルに入...
質問  ver45  - 08/11/7(金) 10:22 -

引用なし
パスワード
   すみません 改めて失礼致します。

これをSQLを用いてやりたい場合はどうしたら良いでしょうか 教えていただけませんか?

【10685】Re:クエリデータをaddnewでテーブルに入...
発言  トキドキ徹  - 08/11/7(金) 15:42 -

引用なし
パスワード
   ▼ver45 さん:

> For ix = 0 To rs1.Fields.Count - 1
> rs2(ix) = rs1(ix)
> Next ix
>         
> rs2.Update
>
> としたところ上手く所定の動作が出来るようになりました

これより、テーブルのフィールド構成は同じものと想像します。
よって

Dim mySQL AS String
mySQL = "INSERT INTO 追加先テーブル " & _
    "SELECT * FROM 追加元テーブル "
CurrentDB.Excute mySQL, dbFailOnError

とすると良いでしょう

【10686】Re:クエリデータをaddnewでテーブルに入...
質問  ver45  - 08/11/7(金) 16:48 -

引用なし
パスワード
   ▼トキドキ徹 さん:
>▼ver45 さん:
>
>> For ix = 0 To rs1.Fields.Count - 1
>> rs2(ix) = rs1(ix)
>> Next ix
>>         
>> rs2.Update
>>
>> としたところ上手く所定の動作が出来るようになりました
>
>これより、テーブルのフィールド構成は同じものと想像します。
>よって
>
>Dim mySQL AS String
>mySQL = "INSERT INTO 追加先テーブル " & _
>    "SELECT * FROM 追加元テーブル "
>CurrentDB.Excute mySQL, dbFailOnError
>
>とすると良いでしょう

ご丁寧にありがとうございます。

すみません 現在このようなコードになっていまして、newkeyとoldkeyを比較して
違った場合に出力するという処理を行っています。列名はこの三つ以外にもありますが、肉と野菜と卵これらの一つでも切り替わった時に書き込まれる用になっております。

For i = 1 To rs1.RecordCount

    NewKey = Trim(rs1!肉) & "|" & Trim(rs1!野菜) & "|" & Trim(rs1!卵)
    
      If NewKey <> OldKey Then
       
        mySQL = "INSERT INTO 書き込み先テーブル " & _
        "SELECT * FROM 書き込み元テーブル "
        CurrentDb.Execute mySQL, dbFailOnError
        
      End If
    
      OldKey = Trim(rs1!肉) & "|" & Trim(rs1!野菜) & "|" & Trim(rs1!卵)
   
    rs1.MoveNext
  Next i

今の状態はブレイクする度に、全てのデータが書き込み先に書かれてしまいまして、1回ブレイクするごとにSQLで1件づつデータを書き込まれる用にしたいのです。

情報が足りず重ね重ね申し訳ありません。

【10687】Re:クエリデータをaddnewでテーブルに入...
発言  トキドキ徹  - 08/11/7(金) 17:16 -

引用なし
パスワード
   ▼ver45 さん:
一件ずつ追加の場合のSQLです。

mySQL = "INSERT INTO 書込み先テーブル (肉, 野菜, 卵) " & _
    "VALUES ('" & rs1("肉") & "', '" & _
    rs1("野菜") & "', '" & _
    rs1("卵") & "') "

このSQLにて試してみてください。
データ型によっては、VALUES〜の「'」は外して下さい。

【10689】Re:クエリデータをaddnewでテーブルに入...
質問  ver45  - 08/11/7(金) 17:34 -

引用なし
パスワード
   ▼トキドキ徹 さん:
>▼ver45 さん:
>一件ずつ追加の場合のSQLです。
>
>mySQL = "INSERT INTO 書込み先テーブル (肉, 野菜, 卵) " & _
>    "VALUES ('" & rs1("肉") & "', '" & _
>    rs1("野菜") & "', '" & _
>    rs1("卵") & "') "
>
>このSQLにて試してみてください。
>データ型によっては、VALUES〜の「'」は外して下さい。

ありがとうございます。処理の間に追加してみたのですが

mySQL = "INSERT INTO 書込み先テーブル (肉, 野菜, 卵) " & _
            "VALUES (" & rs1("肉") & ", " & _
            rs1("野菜") & ", " & _
            rs1("卵") & ") " & _
            "SELECT * FROM 書き込み元テーブル"
            
            CurrentDb.Execute mySQL, dbFailOnError


CurrentDb.Execute mySQL, dbFailOnErrorでエラーになってしまいます。

肉 野菜 卵ともにデータ型はテキスト型です。

【10691】Re:クエリデータをaddnewでテーブルに入...
発言  トキドキ徹  - 08/11/7(金) 17:51 -

引用なし
パスワード
   ▼ver45 さん:

>肉 野菜 卵ともにデータ型はテキスト型です。
それでは
> データ型によっては、VALUES〜の「'」は外して下さい。
外さないで下さい

【10692】Re:クエリデータをaddnewでテーブルに入...
質問  ver45  - 08/11/7(金) 18:02 -

引用なし
パスワード
   申し訳ありません 私の説明が悪くて意図が伝わりづらかったと思います。一件づつという意味はiで回しているレコード行をブレイクのたびに一件づつ書き込んでいきたいという意味でした。言葉足らずで申し訳ありません。

その上で列名を

For ix = 0 To rs1.Fields.Count - 1
          rs2(ix) = rs1(ix)
        Next ix

のように列名を指定せずに書き込み用のテーブルに書き込みたいのです。

重ね重ね申し訳ありません。

【10693】Re:クエリデータをaddnewでテーブルに入...
発言  トキドキ徹  - 08/11/7(金) 18:04 -

引用なし
パスワード
   ▼ver45 さん:
追記です

"SELECT 〜 FROM 〜"
も不要です

【10694】Re:クエリデータをaddnewでテーブルに入...
発言  トキドキ徹  - 08/11/7(金) 18:14 -

引用なし
パスワード
   ▼ver45 さん:
> 列名を指定せずに書き込み用のテーブルに書き込みたいのです。
基本的に追加クエリでは、列名必須です。

全てのフィールドのデータを指定できるのであれば
> mySQL = "INSERT INTO 書込み先テーブル (肉, 野菜, 卵) " & _
>     "VALUES ('" & rs1("肉") & "', '" & _
>     rs1("野菜") & "', '" & _
>     rs1("卵") & "') "
こちらを
mySQL = "INSERT INTO 書込み先テーブル " & _
    "VALUES ('" & rs1("肉") & "', '" & _
    rs1("野菜") & "', '" & _
    rs1("卵") & "') "
のように省略することも可能です。
VALUES(〜内にデータを順番通りに並べていけば良いだけです。

【10695】Re:クエリデータをaddnewでテーブルに入...
質問  ver45  - 08/11/7(金) 18:20 -

引用なし
パスワード
   ▼トキドキ徹 さん:
>▼ver45 さん:
>> 列名を指定せずに書き込み用のテーブルに書き込みたいのです。
>基本的に追加クエリでは、列名必須です。
>
>全てのフィールドのデータを指定できるのであれば
>> mySQL = "INSERT INTO 書込み先テーブル (肉, 野菜, 卵) " & _
>>     "VALUES ('" & rs1("肉") & "', '" & _
>>     rs1("野菜") & "', '" & _
>>     rs1("卵") & "') "
>こちらを
>mySQL = "INSERT INTO 書込み先テーブル " & _
>    "VALUES ('" & rs1("肉") & "', '" & _
>    rs1("野菜") & "', '" & _
>    rs1("卵") & "') "
>のように省略することも可能です。
>VALUES(〜内にデータを順番通りに並べていけば良いだけです。

ご丁寧にありがとうございます。 追加クエリでは列名を列挙しなければならないのですね。

色々なクエリから取り込む際は基本的に列挙しなければSQLでは不可能ということなのでしょうか。

【10696】Re:クエリデータをaddnewでテーブルに入...
発言  トキドキ徹  - 08/11/7(金) 18:28 -

引用なし
パスワード
   ▼ver45 さん:
>色々なクエリから取り込む際は基本的に列挙しなければSQLでは不可能ということなのでしょうか。

先の回答のとおり
> 全てのフィールドのデータを指定できるのであれば
省略も可能です。

追加データも省略する訳ではないですよね?

【10697】Re:クエリデータをaddnewでテーブルに入...
質問  ver45  - 08/11/7(金) 18:30 -

引用なし
パスワード
   ▼トキドキ徹 さん:
>▼ver45 さん:
>>色々なクエリから取り込む際は基本的に列挙しなければSQLでは不可能ということなのでしょうか。
>
>先の回答のとおり
>> 全てのフィールドのデータを指定できるのであれば
>省略も可能です。
>
>追加データも省略する訳ではないですよね?

ありがとうございます

追加データは省略しません。

【10698】Re:クエリデータをaddnewでテーブルに入...
発言  トキドキ徹  - 08/11/7(金) 18:33 -

引用なし
パスワード
   ▼ver45 さん:
追記です

追加する1件をWHERE区で指定できるのであれば、
先に回答したSQLにて可能です。

mySQL = "INSERT INTO 追加先テーブル " & _
    "SELECT * FROM 追加元テーブル " & _
    "WHERE " ・・・・

【10699】Re:クエリデータをaddnewでテーブルに入...
質問  ver45  - 08/11/7(金) 18:41 -

引用なし
パスワード
   ▼トキドキ徹 さん:
>▼ver45 さん:
>追記です
>
>追加する1件をWHERE区で指定できるのであれば、
>先に回答したSQLにて可能です。
>
>mySQL = "INSERT INTO 追加先テーブル " & _
>    "SELECT * FROM 追加元テーブル " & _
>    "WHERE " ・・・・

例えば変数i番目のデータなどと指定することが可能なのでしょうか?
度々申し訳ありません。

【10700】Re:クエリデータをaddnewでテーブルに入...
発言  トキドキ徹  - 08/11/7(金) 18:45 -

引用なし
パスワード
   ▼ver45 さん:
変数i番目ということは、rs2などのレコードセットとして取得して
いるものですよね。

その場合は無理です。
データを指定してください。

クエリとしてWHERE区で1件(または目的のもののみ)指定できる
場合に限ります。

【10724】Re:クエリデータをaddnewでテーブルに入...
質問  ver45  - 08/11/11(火) 10:28 -

引用なし
パスワード
   ▼トキドキ徹 さん:
ありがとうございます。返事遅れて申し訳ありません。

1行ごとに取得してみようと思ったのですがどうも上手くいかず、教えていただいた通りに列名を記載しましてやったのですが列のデータ型に日付型と数値型がテキスト型以外にも入っているのですがシングルクウォーテーションについてはどのような扱いになるのでしょうか?

【10725】Re:クエリデータをaddnewでテーブルに入...
発言  neptune  - 08/11/11(火) 12:34 -

引用なし
パスワード
   ▼ver45 さん:
横から失礼


>1行ごとに取得してみようと思ったのですがどうも上手くいかず、教えていただいた通りに列名を記載しましてやったのですが列のデータ型に日付型と数値型がテキスト型以外にも入っているのですがシングルクウォーテーションについてはどのような扱いになるのでしょうか?
シングルクウォーテーションは文字列のみに使用します。

最初から読んでるわけでないのでよく分かりませんが、
データ型はField オブジェクトのType プロパティで取得できます。

【10732】Re:クエリデータをaddnewでテーブルに入...
お礼  ver45  - 08/11/12(水) 13:32 -

引用なし
パスワード
   お二人ともありがとうございます。

何とか出来ました。

出来なかった理由は教えていただいた部分では無く
実行時エラー 3134  INSERT INTO ステートメントの構文エラーです。
というものが出ていて上手くいかず、こちらを調べたところ列名にSQLの予約語が入っていたので上手くいっていなかったようです。列名を変更したところ上手くいきました。

大変お世話になりました。改めてありがとうございます。

652 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078199
(SS)C-BOARD v3.8 is Free