Microsoft Access 掲示板

別テーブルのデータを1つのフォームに取り込む / 3

15 コメント
views
4 フォロー
3
hiroton 2020/10/27 (火) 09:59:32 7c8fb@f966d

一連の質問の延長ですかね?
最終的に合体テーブル(タイトル、感想、製作年、国、おすすめ度合い、タイプ、etc...)を作りたい。とか

    Set rs = db.OpenRecordset(tblname)

Database.OpenRecordset メソッド (DAO)

tblnameにはクエリを指定することもできます

'//テーブル1パターン
Private Sub データ追加_Click()
    Dim strSQL As String
    strSQL = "SELECT タイトル, 感想, 製作年, 国 FROM 合体テーブル"
    Call AddData(strSQL, Me.txtデータ)
End Sub

こんな感じで必要な列と並びを指定してあげればデータごとにインポート用のテーブルを作る必要はないですよ

通報 ...
  • 5
    セロハン 2020/10/27 (火) 12:07:18 0029a@1c915 >> 3

    仰る通り一連の質問の延長でした。
    取り込む際に設定して1つのテーブルにすればよかったのですね。
    ごめんなさい、例ではフィールド名を同じにしてしまいましたが、
    実際は微妙に違う名前ですのでそれで書いてみます。
    下記認識で正しいでしょうか…?

    パターン1【フィールド名】タイトル、感想、製作年、国
    パターン2【フィールド名】題名、作られた年
    パターン3【フィールド名】タイトル、思ったこと、国名

    パターンごとに3つボタンを作成。それぞれステートメント3行目を下記内容に変える。

    パターン1
    strSQL = "SELECT タイトル, 感想, 製作年, 国 FROM 合体テーブル"
    
    パターン2
    strSQL = "SELECT 題名,, 作られた年 FROM 合体テーブル"
    
    パターン3
    strSQL = "SELECT タイトル, 思ったこと,,国名 FROM 合体テーブル"
    

    以上、何卒宜しくお願いいたします。

    6
    hiroton 2020/10/27 (火) 12:45:22 7c8fb@f966d >> 5

    「合体テーブル」のフィールド名を挙げてください
    (「合体テーブル」も分割したテーブルがなくなると名前が変わりそうですね)

    7
    セロハン 2020/10/27 (火) 12:53:59 0029a@1c915 >> 5

    ありがとうございます。
    仰る通り合体テーブルは変更して、「作品テーブル」とさせていただきます。
    フィールド名は
    タイトル、感想、製作年、国、おすすめ度合い、タイプ
    でお願いします。
    おすすめ度合い、タイプは後から追記するためのフィールドです。

  • 8
    hiroton 2020/10/27 (火) 13:26:58 7c8fb@f966d >> 3

    メインのデータ取込処理は

            For j = 0 To UBound(Datas)
                rs(j) = Datas(j)
            Next
    

    ですね。ループ処理になっているのでそれっぽく書き直すと

    rs(0) = Datas(0)
    rs(1) = Datas(1)
    rs(2) = Datas(2)
    :
    :
    

    な感じになります。これの意味するところはrsの0番目にDatasの0番目を入れる、rsの1番目にDatasの1番目を入れる・・・ということで、元データのフィールド名も作品テーブルのフィールド名も関係ありません。列番号だけ見て同じ列に値を入れているだけです。(列を飛ばしたりもできません)

    例えばパターン2ならtblnameの1列目に「題名」を入れる、2列目に「作られた年」を入れるという処理をしていて、対応した列になっていればフィールド名は不問です

    というわけで、「作品テーブル」から元データの列に対応する列を持ったテーブルをクエリ(SQL構文)で用意してあげます

    パターン1
    strSQL = "SELECT タイトル, 感想, 製作年, 国 FROM 作品テーブル"
    
    パターン2
    strSQL = "SELECT タイトル, 製作年 FROM 作品テーブル"
    
    パターン3
    strSQL = "SELECT タイトル, 感想, 国 FROM 作品テーブル"
    
  • 9
    セロハン 2020/10/27 (火) 15:10:46 0029a@1c915 >> 3

    ありがとうございます。
    取込不要の列があった場合にはどうなりますか?以下のように空欄にしてよいでしょうか。
    ※例えばパターン4の3列目に「取込不要列」があったとする。

    パターン4
    strSQL = "SELECT タイトル, 感想,, 国 FROM 作品テーブル"
    
    もしくは
    パターン4?
    strSQL = "SELECT タイトル, 感想,取込不要列, 国 FROM 作品テーブル"
    
    11
    hiroton 2020/10/27 (火) 16:25:00 7c8fb@f966d >> 9

    ちょっと脱線しますがクエリSQLについての知識を身につけましょう
    ざっくりですが、SQLはデータベースを扱うための命令書の仕様、クエリはSQLに従って作成された実際の命令書といった感じです

    ACCESSはSQLを意識することなくクエリを扱えるアプリケーションですが、クエリの実態はきちんとSQLです。クエリデザインでリボンの「表示」からSQLビューデザインビューを相互に切り替えることができ、ACCESSのGUI(クエリデザイン)で作成するものがSQLであることが確認できます

    つまり、SQL構文を記述するというのはクエリを作成すると同じことをしているわけです

    それでは、クエリデザインを起動しテーブルの表示では何も選ばずに閉じて、SQLビューを表示してみましょう

    SELECT;
    

    と表示された画面が表示されるはずです。選択クエリを作成しようとし、テーブルを一つも選んでいないので選択クエリであることを表すSQLの命令SELECTのみが表示されている状態です。これを

    SELECT タイトル, 感想, 製作年, 国 FROM 作品テーブル
    

    に書き換えてデザインビューデータシートビューと切り替えてみましょう。よく使う形のものを見ることができると思います。このデータシートビューをみれば「対応する列を持ったテーブルを作成する」の意味が分かると思います

    うまく動いたらSQLビューデザインビューを切り替えて見比べてみてください。何となくSQL構文のどこがどういう意味なのか分かると思います

    そうしたら次に

    SELECT タイトル, 感想,, 国 FROM 作品テーブル
    
    SELECT タイトル, 感想,取込不要列, 国 FROM 作品テーブル
    

    も同様にSQLビューにコピペして試してみましょう


    掲示板ではクエリデザインでのイメージを伝えるのが難しいものです。SQLビューを使ったSQL文のコピペのやり取りができると間違いのないやり取りができるようになるのでうまく活用できるようになりましょう

    12
    セロハン 2020/10/27 (火) 17:34:16 f1ed8@73413 >> 9

    長文ありがとうございます🙇‍♂️
    後ほど試させていただきます