|
AテーブルをBテーブルのように店名で統合する記述が下記にありますが
Aテーブルのフィールドを店名、商品1、商品2・・商品100にし
Bテーブルのフィールドを店名、商品1、商品2・・商品999にしたい場合
どこをどのように直せばいいか教えていただけますでしょうか?
宜しくお願いいたします。
Aテーブル
店名 | 商品 |
A店 |リンゴ |
A店 |トマト |
A店 |ナシ |
B店 |リンゴ |
B店 |みかん |
Bテーブル
店名 |商品1 |商品2 |商品3 |商品4 |
A店 |リンゴ |トマト |ナシ | |
B店 |リンゴ |みかん | | |
--------------------------------------------------------------------
Function TEST02()
Dim Rec01 As DAO.Recordset
Dim Sql_Str As String
Dim ShopName As String
Dim Shouhin(4) As String
Dim F_Number As Integer
Dim i As Integer
Dim Insert_Str As String
'DoCmd.RunSQL で確認メッセージが出ないようにする
DoCmd.SetWarnings False
'現在のBテーブルのデータをすべて削除する
DoCmd.RunSQL "DELETE * FROM Bテーブル;"
Sql_Str = "SELECT * FROM Aテーブル ORDER BY 店名, 商品;"
Set Rec01 = CurrentDb.OpenRecordset(Sql_Str, dbOpenForwardOnly)
'フィールドの数の上限を入れておく
F_Number_Max = 4
'ShopName にとりあえずありえないデータを入れておく
ShopName = "XXX"
F_Number = 1
For i = 1 To F_Number_Max
Shouhin(i) = ""
Next i
Do Until Rec01.EOF
'最初のレコードではない または 店名が変わったら
If ShopName <> "XXX" And ShopName <> Rec01!店名 Then
'INSERT文を作る
Insert_Str = ""
For i = 1 To F_Number_Max
If Shouhin(i) <> "" Then
Insert_Str = Insert_Str & ", '" & Shouhin(i) & "'"
Else
Insert_Str = Insert_Str & ", Null"
End If
Next i
'Bテーブルにデータを追加
DoCmd.RunSQL "INSERT INTO Bテーブル" & _
"(店名, 商品1, 商品2, 商品3, 商品4) " & _
"VALUES('" & ShopName & "'" & Insert_Str & ");"
F_Number = 1
For i = 1 To F_Number_Max
Shouhin(i) = ""
Next i
End If
ShopName = Rec01!店名
'万が一上限の数を超えてしまったら Shouhin への代入は行わない
If F_Number <= F_Number_Max Then
Shouhin(F_Number) = Rec01!商品
F_Number = F_Number + 1
End If
Rec01.MoveNext
Loop
Rec01.Close
'最初のレコードではない(最後の店名の分を処理する)
If ShopName <> "XXX" Then
'INSERT文を作る
Insert_Str = ""
For i = 1 To F_Number_Max
If Shouhin(i) <> "" Then
Insert_Str = Insert_Str & ", '" & Shouhin(i) & "'"
Else
Insert_Str = Insert_Str & ", Null"
End If
Next i
'Bテーブルにデータを追加
DoCmd.RunSQL "INSERT INTO Bテーブル" & _
"(店名, 商品1, 商品2, 商品3, 商品4) " & _
"VALUES('" & ShopName & "'" & Insert_Str & ");"
F_Number = 1
For i = 1 To F_Number_Max
Shouhin(i) = ""
Next i
End If
'確認メッセージが出るようにする
DoCmd.SetWarnings True
End Function
|
|