アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。アクセス初心者です。

QNo.3023548 「アクセス 同じフィールド(テキスト型)のレコードを連結させたい」
の方と同じ質問内容で申し訳ありません。
私のレベルでは、うまく理解することが出来ませんでした。

あらためまして
マイクロソフト アクセス 2000を使用しております。
【テーブル1】
ID 商品コード 金額  色
1______100__________\10______赤
2______100__________\10______青
3______200__________\10______黄
4______200__________\10______緑
5______200__________\10______黒

【クエリ1】
ID 商品コード 金額  色  累計金額  色の累計
1______100__________\10______赤__________\10____________赤
2______100__________\10______青__________\20____________赤-青
3______200__________\10______黄__________\10____________黄
4______200__________\10______緑__________\20____________黄-緑
5______200__________\10______黒__________\30____________黄-緑-黒

累計金額は式ビルダで
累計金額: (Select SUM(金額) From テーブル1 As 累計 Where テーブル1.ID >= 累計.ID And テーブル1.商品コード = 累計.商品コード)
なんとか作る事が出来ました。

色の累計を、この式を使って試みましたが
うまくいきません。

できれば、式ビルダ形式で回答を頂くとありがたいです。
よろしくお願い致します。

A 回答 (2件)

まず、私が作成したクエリの結果を見て下さい。



ID 商品コード 色の累積
1  100      赤
2  100      赤-青
3  200      黄
4  200      黄-緑
5  200      黄-緑-黒

このクエリのデザインは次のようです。
なお、テーブル名は、らしく Goods にしています。

フィールド: ID    商品コード  色の累積: DBSELECT("SE・・・・
テーブル: _Goods  Goods 
並び替え: 昇順         
表示:    レ     レ        レ
抽出条件:             
または:         

色の累積:以降の式は、少し、長いので次に示します。

色の累積: DBSelect("SELECT 色 FROM GOODS Where ID <=" & ID & " And [商品コード]=" & 商品コード,"-")

なお、質問文のIDの比較では、色の累積は希望のような結果にはなりませんので修正しています。

さて、クエリは[SQLヴュー]でも確認することが出来ます。

SELECT
ID,
商品コード,
DBSelect("SELECT 色 FROM GOODS Where ID <=" & ID & " And [商品コード]=" & 商品コード,"-") AS 色の累積
FROM Goods
ORDER BY ID;

もちろん、式ビルだでは、[関数]-[データベース名]-[標準モジュール名]-[DBSelect] と選択しています。

DBSelect(SQL文, 区切り文字):

DBSelect関数は、指定のSQL文で抽出したデータを指定の区切り文字で連結して戻す関数です。

<続く>
    • good
    • 0

さて、[関数]-[データベース名]-[標準モジュール名]-[DBSelect] と選択しようとしてもありません。


なぜなら、DBSelect 関数は、標準モジュールで作成する必要があるからです。

標準モジュール名=[データベース関数]
関数名=DBSelect

Public Function DBSelect(ByVal strQuerySQL As String, _
             Optional ByVal strSeparator As String = ";") As String
On Error GoTo Err_DBSelect
  Dim I   As Integer
  Dim J   As Integer
  Dim R   As Integer
  Dim C   As Integer
  Dim M   As Integer
  Dim N   As Integer
  Dim rst  As ADODB.Recordset
  Dim fld  As ADODB.Field
  Dim Datas As String
  
  Set rst = New ADODB.Recordset
  ' =================
  ' Begin With: rst
  ' -----------------
  With rst
     .Open strQuerySQL, _
        CurrentProject.Connection, _
        adOpenStatic, _
        adLockReadOnly
     If Not .BOF Then
      M = .RecordCount - 1
      N = .Fields.Count - 1
      .MoveFirst
      For R = 0 To M
        For C = 0 To N
          Datas = Datas & .Fields(C) & strSeparator
        Next C
        .MoveNext
      Next R
     End If
  End With
  ' ---------------
  ' End With: rst
  ' ===============
Exit_DBSelect:
  DBSelect = Left(Datas, Len(Datas) + (Len(Datas) > 0))
  Exit Function
Err_DBSelect:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBSelect)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBSelect
End Function

まあ、中級入り口の関数です。
    • good
    • 0
この回答へのお礼

Husky2007さん
ありがとうございます。m(__)m

初心者の私に迅速かつ丁寧なアドバイスをいただき
感謝しております。

標準モジュールの作成は
初めて行う作業でしたので、かなり苦戦しましたが
おかげ様で形になりました。

色々試して、偶然うまくいった標準モジュールなので自信が持てない為
これから基礎を勉強していきたいと思います。

本当に助かりました
これで前に進めます。

お礼日時:2007/06/22 15:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!