Access VBA質問箱 IV

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

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


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

【8208】テーブルの項目について たけし 06/7/11(火) 15:15 質問[未読]
【8209】Re:テーブルの項目について クロ 06/7/11(火) 16:32 回答[未読]
【8210】Re:テーブルの項目について たけし 06/7/11(火) 17:20 質問[未読]
【8211】Re:テーブルの項目について クロ 06/7/11(火) 17:33 回答[未読]
【8212】Re:テーブルの項目について クロ 06/7/11(火) 17:59 回答[未読]
【8215】Re:テーブルの項目について たけし 06/7/12(水) 9:49 質問[未読]
【8218】Re:テーブルの項目について クロ 06/7/12(水) 10:20 回答[未読]
【8219】Re:テーブルの項目について クロ 06/7/12(水) 11:04 発言[未読]
【8220】Re:テーブルの項目について たけし 06/7/12(水) 11:16 お礼[未読]

【8208】テーブルの項目について
質問  たけし  - 06/7/11(火) 15:15 -

引用なし
パスワード
   題名はテーブルの項目と書いてありますが、どのように書いていいか解らなかったのでとりあえずテーブルの項目についてと書いてみました。
例)
テーブルAに 項目1 項目2
        1   A
        2   B
        3   C
        4   D
        ・   ・
        ・   ・
        ・   ・
        22   Z
とある場合
テーブルAを一度読込んで何度も項目1を指定して項目2を算出する方法はあるのでしょうか?ランダムに項目1を指定して項目2を参照したいのです。
計算結果が3だったら、Cを参照し、計算結果が1だったら、Aを参照したいのです。
よろしくお願いします
 

【8209】Re:テーブルの項目について
回答  クロ  - 06/7/11(火) 16:32 -

引用なし
パスワード
   こんにちは

Dlookup関数でいいのかな?

どの場面で使うのか分からないのですが、取りあえずフォーム上でとした
場合

テキストボックス3のコントロールソースに
=DlookUp("[項目2]","[テーブルA]","[項目1]=" & Me.テキストボックス1+テキストボックス2 )
だとか…
※項目1のデータ型が数値型ししてます。

テキストボックス1… 1
テキストボックス2… 2
だとした場合
テキストボックス3には… C
が返ると思います。

#テーブル上では項目と言われているところは「フィールド」といいます。

【8210】Re:テーブルの項目について
質問  たけし  - 06/7/11(火) 17:20 -

引用なし
パスワード
   クロ さん
質問に答えていただいてありがとうございます。
フォーム上ではなくてモジュールで処理したいのですが、
処理的にはテーブルを作成したいのです。
前回は簡単に書きましたが、本当に処理したいのは
例)
店舗テーブルにはフィールド(店番)が1から22まであります。
委託者テーブルにはフィールド(委託者コード)とフィールド(店番)フィールド(金額)があります。
委託者コードごとに店舗テーブルの店番全部をテーブルに出力したいのです。
そうすると委託者コードごとに店舗テーブルをオープンしクローズしなければ処理できないのかと思い、他に処理の方法がないかと思い前回の質問をしてしまいました。申し訳ありません。
よろしくお願いします

【8211】Re:テーブルの項目について
回答  クロ  - 06/7/11(火) 17:33 -

引用なし
パスワード
   委託者マスタテーブルはないのでしょうか?

あるようでしたら
SQLで

INSERT INTO 委託者テーブル ( 委託者コード, 店番 )
SELECT 委託者マスタ.委託者コード, 店舗テーブル.店番
FROM 店舗テーブル, 委託者マスタ
ORDER BY 委託者マスタ.委託者コード, 店舗テーブル.店番;

Executeで上記SQLを実行すればいいのでは?

【8212】Re:テーブルの項目について
回答  クロ  - 06/7/11(火) 17:59 -

引用なし
パスワード
   あれ?もしかしたら店舗テーブルと委託者テーブルで新規テーブルを
作るのかしら…でしたら

SELECT 委託者テーブル.委託者コード, 店舗テーブル.店番, 委託者テーブル.金額 INTO 新規テーブル名
FROM 委託者テーブル, 店舗テーブル
ORDER BY 委託者テーブル.委託者コード, 店舗テーブル.店番;

こうですかね。こちらもExecuteで上記SQLを実行でいいと思います。
※新規テーブル名は適宜に

【8215】Re:テーブルの項目について
質問  たけし  - 06/7/12(水) 9:49 -

引用なし
パスワード
   クロ さん
おはようございます。
いろいろありがとうございます。
新規のテーブルを作成するのでが、
店舗テーブルには、店番が051・052・053・054とあり
委託者テーブルには
 委託者コード 店番   金額
  10001    051   100
  10001    052   100
  10001    053   200
  10002    052   200
  10002    053   200
結果
  店番 委託者コード 金額
  051  10001    100
  052  10001    100
  053  10001    200
  054  10001     0
  051  10002     0
  052  10002    200
  053  10002    200
  054  10002     0
したいのです。

SELECT 委託者テーブル.委託者コード, 店舗テーブル.店番, 委託者テーブル.金額 INTO 新規テーブル名
FROM 委託者テーブル, 店舗テーブル
ORDER BY 委託者テーブル.委託者コード, 店舗テーブル.店番;
ですと
結果
  店番 委託者コード 金額
  051  10001    100
  052  10001    100
  053  10001    200
  052  10002    200
  053  10002    200
になりませんか?
SQLはあまりよくわからないんです。
いつもモージュールで作成しています。
本当に申し訳ありませんがよろしくお願いします。

【8218】Re:テーブルの項目について
回答  クロ  - 06/7/12(水) 10:20 -

引用なし
パスワード
   おはようございます。
委託者テーブルから委託者コードを重複なく取りだし(サブクエリのQ1)、
店番テーブルの店番とで、委託者コード/店番クエリを作成(サブクエリ
Q2)します。

で、こんな感じです。
SELECT Q2.委託者コード, Q2.店番, CCur(Nz([金額],0)) AS 式1 INTO 新しいテーブル名
FROM (SELECT Q1.委託者コード, 店舗テーブル.店番
FROM (SELECT 委託者コード FROM 委託者テーブル GROUP BY 委託者コード) AS Q1, 店舗テーブル
GROUP BY Q1.委託者コード, 店舗テーブル.店番
ORDER BY Q1.委託者コード, 店舗テーブル.店番) AS Q2 LEFT JOIN 委託者テーブル ON (Q2.店番 = 委託者テーブル.店番) AND (Q2.委託者コード = 委託者テーブル.委託者コード);

※金額をデータ型変換関数で通貨型(CCur)にしてあります。
  ここは適宜に変更してください。
 前回同様に新規テーブル名は「新しいテーブル名」としてありますので
 こちらも適宜に変更してください。

【8219】Re:テーブルの項目について
発言  クロ  - 06/7/12(水) 11:04 -

引用なし
パスワード
   もう一つ

Dim db(1) As DAO.Database
Dim rs(1) As DAO.Recordset
Dim i As Integer
Dim strSQL(3) As String

'委託者テーブルをグループ化して委託者コードを取得
strSQL(0) = "SELECT 委託者コード FROM 委託者テーブル GROUP BY 委託者コード"
'strSQL(0)をサブクエリ化して委託者コード/店番リストクエリを作成
strSQL(1) = "SELECT Q1.委託者コード, 店舗テーブル.店番" & _
         " FROM (" & strSQL(0) & ") AS Q1, 店舗テーブル" & _
         " GROUP BY Q1.委託者コード, 店舗テーブル.店番" & _
         " ORDER BY Q1.委託者コード, 店舗テーブル.店番;"
'既存テーブル削除SQL
strSQL(2) = "DROP TABLE 新しいテーブル;"
'新規テーブル作成SQL
strSQL(3) = "CREATE TABLE 新しいテーブル (委託者コード LONG, 店番 TEXT(50), 金額 MONEY);"
         
         
Set db(1) = CurrentDb
On Error GoTo el
db(1).Execute strSQL(2)
el:
db(1).Execute strSQL(3)

Set rs(1) = db(1).OpenRecordset("新しいテーブル")
Set db(0) = CurrentDb
Set rs(0) = db(0).OpenRecordset(strSQL(1))

rs(0).MoveLast
rs(0).MoveFirst

For i = 1 To rs(0).RecordCount
  rs(1).AddNew
  rs(1)![委託者コード] = rs(0)![委託者コード]
  rs(1)![店番] = rs(0)![店番]
  rs(1)![金額] = CCur(Nz(DLookup("金額", "委託者テーブル", _
           "[委託者コード]=" & rs(0)![委託者コード] & _
           "And [店番]='" & rs(0)![店番] & "'"), 0))
  rs(1).Update
  rs(0).MoveNext
Next i

rs(0).Close: Set rs(0) = Nothing
db(0).Close: Set db(0) = Nothing
rs(1).Close: Set rs(1) = Nothing
db(1).Close: Set db(1) = Nothing

【8220】Re:テーブルの項目について
お礼  たけし  - 06/7/12(水) 11:16 -

引用なし
パスワード
   ▼クロ さん:
ありがとうございます。
早速やってみます。
いろいろありがとうございます。
また何かありましたらよろしくお願いします。

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