人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ACCESS2003の質問です。
下記のようなテーブルがあるのですが、
このテーブル1の行数をもとにして、番号ごとに
行数分重複したレコードを持つ、テーブル2を作成したいです。
方法を教えてください。


テーブル1

番号 行数
A01 2
B003 3
G2256 5



テーブル2

番号
A01
A01
B003
B003
B003
G2256
G2256
G2256
G2256
G2256

●質問者: rupopon
●カテゴリ:コンピュータ 学習・教育
✍キーワード:レコード 作成
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● nao_iwashima
●23ポイント

VBSでよろしければ…

「hoge.mdb」を書き替えて、同じフォルダ階層に以下のソースを任意のファイル名&拡張子.vbsでと保存し、実行すると作成できますがいかがでしょう?

mdb = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=hoge.mdb"

sql_array = array
set rs = createobject("adodb.recordset")
with rs
.open "select 番号,行数 from テーブル1",mdb,3,3
do while not .eof
for i = 1 to rs("行数")
n = ubound(sql_array)+1
redim preserve sql_array(n)
sql_array(n) = "insert into テーブル2 values ('" & rs("番号") & "')"
next
.movenext
loop
.close
end with
set rs = nothing

set cn = createobject("adodb.connection")
with cn
.open(mdb)
for each sql in sql_array
.execute(sql)
next
.close
end with
set cn = nothing
◎質問者からの返答

ありがとうございました。

出来ればACCESS内(VBA)で処理したいですが・・・

参考にさせていただきます。


2 ● ken3memo
●23ポイント

テーブル3をダミーで作ってください。

NO

1

2

3

4

5

100

とか、100個

1から連番で作ります。※行数が100以上あったらどうするの?と言われそうですが。。。

操作動画1 : http://www.youtube.com/watch?v=4eugTa77PjU

↑ダミーのテーブル作成

テーブル1と今作ったテーブル3で

テーブル同士を つなげないクエリー を作ります。

SELECT テーブル1.番号, テーブル1.行数

FROM テーブル1, テーブル3

すると、テーブル1 * テーブル3 の積で n個データが作られます。

操作動画2 : http://www.youtube.com/watch?v=NePK40e-hf4

↑つなげないクエリーと↓条件作成まで

このままでは、使えないので、

[no]<=[行数]

で、行数を絞り込みたいと思います。

SELECT テーブル1.番号, テーブル1.行数

FROM テーブル1, テーブル3

WHERE (((IIf([no]<=[行数],"OK","NG"))="OK"))

ORDER BY テーブル1.番号;

あとは、テーブル2に追加したいので、

INSERT INTO テーブル2 ( 番号, 行数)

SELECT テーブル1.番号, テーブル1.行数

FROM テーブル1, テーブル3

WHERE (((IIf([no]<=[行数],"OK","NG"))="OK"))

ORDER BY テーブル1.番号;

で、いいのかなぁ。

テーブル2の行数が余計ですが、こんな感じです。

(↑カッコつけて動画作ってから、あとから気が付きました(笑))

ダミーテーブルとSQL文を使ってみました。

外していたらスミマセン。何かの参考となれば幸いです。

( 手前味噌ページ http://www.ken3.org/vba/backno/vba147.html も見て笑ってください)

◎質問者からの返答

ありがとうございました。参考にさせていただきます。


3 ● nao_iwashima
●22ポイント

無理やりVBAにしてみました。

Function ins()

Set rs = CurrentDb.OpenRecordset("テーブル1", dbOpenTable)

ReDim sql_array(0)

With rs
 Do While Not .EOF
 For i = 1 To rs!行数
 n = UBound(sql_array) + 1
 ReDim Preserve sql_array(n)
 sql_array(n) = "insert into テーブル2 values ('" & rs!番号 & "')"
 Next
 .MoveNext
 Loop
 .Close
End With
Set rs = Nothing

For Each SQL In sql_array
 If SQL <> "" Then
 CurrentDb.Execute SQL
 End If
Next

End Function
◎質問者からの返答

ありがとうございました。作ってみます。


4 ● jccrh1
●22ポイント

VBAでDAOを使用して単純に作成しました。

Option Compare Database
Sub 自動作成()
 Dim daoDB As Database
 Dim daoRS1 As Recordset
 Dim daoRS2 As Recordset
 Dim I As Integer
 
 Set daoDB = CurrentDb
 Set daoRS1 = daoDB.OpenRecordset("テーブル1", dbOpenTable)
 Set daoRS2 = daoDB.OpenRecordset("テーブル2", dbOpenTable)
 Do While (Not (daoRS1.EOF))
  For I = 1 To daoRS1!行数
   daoRS2.AddNew
   daoRS2!番号 = daoRS1!番号
   daoRS2.Update
 Next I
 daoRS1.MoveNext
 Loop
 daoRS1.Close
 daoRS2.Close
 daoDB.Close
End Sub
◎質問者からの返答

ありがとうございました。作ってみます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ