Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Access 2010)
異なるフィールドに格納された同一種類のデータを新しく設定したフィールドに条件式で格納する
投稿日時: 18/12/19 14:03:15
投稿者: TATSUYA.ich

現状、フィールド1〜30(例:α-1、α-2、α-3、β-1、β-2、β-3・・・)の中に例えば数値の「1」及びこれに伴うα-2、α-3のデータがαフィールド群の中だけでなく、他のフィールド群にランダムに属しているような状況なのですが、これを数値「1」に対応するデータ(A-2、A-3)を同一フィールドに条件式で格納したいと思っております。
 
以下のコードが検討中のものですが、初心者のため、エラーだらけで解決できない状況です。
400000レコードあるため、データベースも重いです。
 
以上、よろしくお願い申し上げます。
 
Function データ更新()
 
Dim db As Database
Dim rs As Recordset
Dim i As Long
 
Set db = CurrentDb
Set rs = db.OpenRecordset("table1", dbOpenTable)
 
For i = 0 To rs.fields.count - 1
   If rs.Fields(i) = "01" Then
     DoCmd.RunSQL "UPDATE rs.fields(i) SET table1.A-1 ," & _A※新たにフィールドは設定済み(A-1〜)
                  "rs.fields(i+1) SET table1.A-2 ," & _
                  "rs.fields(i+2) SET table1.A-3;"
   ElseIf rs.Fields(i) = "02" Then
      DoCmd.RunSQL "UPDATE rs.fields(i) SET table1.B-1 ," & _
                  "rs.fields(i+1) SET table1.B-2 ," & _
                  "rs.fields(i+2) SET table1.B-3;"
 
〜省略〜
 
      End If
                   
Next i
 
End Function

回答
投稿日時: 18/12/19 15:47:10
投稿者: Suzu

TATSUYA.ich さんの引用:
現状、フィールド1〜30(例:α-1、α-2、α-3、β-1、β-2、β-3・・・)の中に例えば数値の「1」及びこれに伴うα-2、α-3のデータがαフィールド群の中だけでなく、他のフィールド群にランダムに属しているような状況なのですが、これを数値「1」に対応するデータ(A-2、A-3)を同一フィールドに条件式で格納したいと思っております。

 
現状どんなデータが有って
それをどうしたいのか
 
上記の説明文 と コードから やりたい事の見当がつきません。。
 
データ例を示す等を行い説明できますか?

投稿日時: 18/12/19 16:32:44
投稿者: TATSUYA.ich

ご返信ありがとうございます。
  
やりたいことを簡単に示すと以下のようになります。
  
魚の名前(α1)  数量(個)(α2) 重さ(s)(α3)
トビウオ        3        5
このように、それぞれのデータはα1〜α3まではワンセットの内容です。
  
ただし、                   魚の名前(β1)  数量(個)(β2) 重さ(s)(β3)
                         トビウオ        20        4
このトビウオのデータ群が現状α1〜α3のみに格納されているわけではなく。
 他のフィールドにもバラバラに格納されている状況です。
  
今回は、新たに魚の種類ごとにフィールドを作成し、そのフィールドには同一の魚のデータのみを
格納したいと思っております。すなわち、データの種類ごとに並べ替えをしたいということになります。
  
この内容でお判りいただけますでしょうか。
 無知でご迷惑をおかけしておりますが、何卒、よろしくお願い申し上げます。

回答
投稿日時: 18/12/19 17:01:53
投稿者: Suzu

ようやく姿が見えてきました。
 
多分、1レコードの中には、「トビウオ」のデータのみではなく、
「さんま」とか、「まぐろ」も入っている可能性があるのですよね。
 
ユニオンクエリを作ってみてください。
 
SELECT [α1] AS 魚の名前, [α2] AS 数量, [α3] AS 重さ FROM table1;
UNION
SELECT [β1] AS 魚の名前, [β2] AS 数量, [β3] AS 重さ FROM table1;
UNION
SELECT [γ1] AS 魚の名前, [γ2] AS 数量, [γ3] AS 重さ FROM table1;
UNION
      :
      :
10種類全てを、1つのユニオンクエリにすると、処理に時間が掛かる可能性が高いです。
その場合は必要に応じて、
・5種類分を表示するユニオンクエリ、を2つ作る
・3種/3種/4種 をそれぞれ表示するユニオンクエリを つくる
 
の様に分けてみてください。
 
と言うか最終的に私なら
別のワークテーブルを準備し、そこにユニオンクエリの結果(或いは1フィールドづつの結果を、
追加クエリにて追加し必要に応じて計算を行います。
 
ファイルの容量の制限に掛かる様であれば、
別の新規accdbファイルを作成し、元のテーブルへはリンクテーブルを貼り
先の処理を実行します。
 
「元のテーブルに加工をしたい」のであれば

引用:
多分、1レコードの中には、「トビウオ」のデータのみではなく、
「さんま」とか、「まぐろ」も入っている可能性があるのですよね。

が有りうるのか。あった場合どうするのかを提示下さい。

回答
投稿日時: 18/12/19 17:23:34
投稿者: Suzu

[quote]新たに魚の種類ごとにフィールドを作成し、そのフィールドには同一の魚のデータのみを
格納したいと思っております[/quote
 
あーーここに回答がありましたね。。
って事は、
1レコードに 10種類の魚のデータが入っている可能性があり、1種類 3フィールドを使うから
30フィールド追加するのですか。。
 
データベース的ではありませんね。。
 
 
テーブルの更新頻度にもよりますが
更新頻度が高いなら
   都度、ユニオンクエリを開く事では → 処理に時間が掛かる 実用に耐えませんか?
 
更新頻度が低いなら
   先に示した様に、ワークテーブルを作り、そこにデータを入れておく。

投稿日時: 18/12/19 17:39:50
投稿者: TATSUYA.ich

早々にご返事下さり有難うございます。
 
ご提示頂いたとおり作業したところ、ユニオンクエリで無事種別毎のフィールドの取得・整理ができました!
今回は業務時間の制約から早期に処理する必要があり、大変助かりました。
ご丁寧に対応下さりまして有難うございました。