Onlin Shop商品管理DB

My Notes 忘れっぽい自分のためのメモ

ショップ個別データの編集

ショッピングカート毎にアップロード用CSVファイルでバリエーションデータなどの記述の仕方が異なるため、このフォームで編集出来るようにする。

データ編集フォーム作成

個別データ用クエリQ_PutItemを作成

使用テーブル:T_Putup(メイン)、T_Shop、T_Detail、T_Category2

テーブルの結合方向:

テーブル フィールド 結合方向 テーブル フィールド
T_Putup SID T_Shop SID
  GroupNo T_Detail GroupNo
T_Detail Ctg1ID T_Category2 Ctg1ID
  Ctg2ID T_Category2 Ctg2ID

データ編集フォーム(F_ShopEdit)を作成

  1. ショップ抽出用、カテゴリー・バリエーション絞込み用テキストボックスと実行ボタンを作成
  2. サブフォーム(F_ShopEditSub)を配置
    使用クエリ:Q_PutItem
抽出及び絞込み用コントロールの設定

ショップ抽出用(ShopID)、カテゴリー絞込み用(Category)をコンポボックスに変更、[値集合ソース]をT_Shop、T_Category2に設定、バリエーション絞込み用(Variaition)は変更なし

コントロールの値に応じて、ラベルの表示を変える

  • レコード抽出対象のショップ名を表示するラベル(名前:[S_Name];標題:ショップ名)を配置
  • [ShopID]の値に応じて表示ショップ名を変更する。

クラスモジュールShopID_Change([イベント]-[変更時]のプロシージャー)

   S_Name.Caption = "ショップ名:" & DLookup("[ShopName]", "Q_Shop", "[SID]=" _
& [ShopID])

クエリ抽出条件にコントロールの値を使う

サブフォームの[レコードソース]クエリ、[SID]フィールド[抽出条件]行

   [Forms]![F_ShopEdit]![ShopID]

サブフォームのクエリーを更新する

ラベル[S_Name]の[イベント]-[クリック時]のイベントプロシージャー(S_Name_Click)で更新

   Me.F_ShopEditSub.Requery

サブフォームのレコードにフィルターを掛ける

サブフォームのレコードをカテゴリー又はバリエーションで絞り込んで編集出来るようにする。

カテゴリー絞込みボタン(名前:[C_Narrew];標題:[絞込み])

クラスモジュール(C_Narrew_Click)

    Forms!F_ShopEdit!F_ShopEditSub.Form.Filter = _  
      "Category2='" & Forms!F_ShopEdit.Category & "'"
    Forms!F_ShopEdit!F_ShopEditSub.Form.FilterOn = True

バリエーション絞込みボタン(名前:[V_Narrew];標題:[絞込み])

クラスモジュール(V_Narrew_Click)

    Forms!F_ShopEdit!F_ShopEditSub.Form.Filter = _
        "VarDiv='" & Forms!F_ShopEdit.Variation & "'"
    Forms!F_ShopEdit!F_ShopEditSub.Form.FilterOn = True

絞込みフィルターをクリアにする

フィルターのクリアと同時にテキストボックスの値もクリアにする。
フィルタークリアボタン(名前:[F_Clear];標題:[クリア])

クラスモジュール(F_Clear_Click)

テキストボックスの値のクリア処理

   Forms!F_ShopEdit.Category = "" 
   Forms!F_ShopEdit.Variation = "" 

フィルターのクリア処理

   Forms!F_ShopEdit!F_ShopEditSub.Form.Filter = "category2=true"
'サブフォームを再クエリする。
   Forms!F_ShopEdit!F_ShopEditSub.Form.Requery
メモ

絞込みフィルターをクリアするのに、”<フォーム名>.FilterOn = False”にすると、ショップ名でのレコード抽出が出来なくなる。そのため、”Category2=True"でフィルターを掛けることで、今は代用しておく。

入力レコードの自動作成

レコードからスクリプトで生成できるデータが有れば、自動作成してフィールドに入れる。ここでは、バリエーション情報を作成することにします。

バリエーション情報の作成

標準モジュール(ShopData)

変数の宣言

Dim rsFormS As Recordset                         'サブフォームのレコードセット 
Dim rsQ_Item As New ADODB.Recordset     'Q_Itemのレコードセット
Dim rsQ_Putup As New ADODB.Recordset   'Q_Putupのレコードセット
Dim cnt As Integer
Dim strVrt As String 

クエリQ_ItemのレコードセットrsQ_Itemの生成
[variation]フィールドに値の有る物に絞り込ん生成する。

With Application.CurrentProject
    rsQ_Item.Open "select * from Q_Item where variation <> ''", .Connection _   
 , adOpenStatic, adLockOptimistic 
End With 

'サブフォームF_ShopEditSubのレコードでレコードセットを生成

Set rsFormS = Forms!F_ShopEdit.F_ShopEditSub.Form.RecordsetClone

rsFormSから[VarDiv]フィールドに値の有る物だけを抽出

rsFormS.Filter = "VarDiv <> ''" 
Set rsFormS = rsFormS.OpenRecordse

クエリQ_Putupのレコードセットの生成
ショップコード[SID]で出店先を絞り込んで生成

With Application.CurrentProject
    rsQ_Putup.Open "select * from Q_Putup where SID =" & intSID, .Connection _
    , adOpenStatic, adLockOptimistic
End With

Select Caseステートメントで処理を分ける

Do Until rstFormS.EOF
    '編集レコードの抽出
    rsQ_Item.Filter = "GroupNo=" & rsFormS!GroupNo
    'ショップコードに合わせて処理を分ける。
    Select Case intSID
        Case 1:
	          Shop1の処理へ
        Case 2:
	      Shop2の処理へ
    End Select
    rstFormS.MoveNext
Loop
MsgBox "バリエーションデータの作成が終わりました。"

クラスモジュール(Execute_Click)
引数(Me!ShopID)は変数[intSID]に引き渡す

    <自動作成プロシージャー名> (Me!ShopID)

各Shopの処理については、ショップ(カート)フォーマの規定に沿って個々に作成する。