ACCESSでテーブルに有る数字分CODEをテーブルに追加するには?

解決


usaginohoxtupe  2006-01-20 01:04:59  No: 129682

アクセスであらかじめcodeと数量の定義されたテーブルがあるとします。
ここの数量分のcodeを新しいテーブルに追加するにはどうすれば良いでしょうか?
(例)a  5  →    a   a   a   a   a   (ちなみにレコードでは5つ追加)

VBAは詳しくありませんので、よろしくお願い致します。


もげ  2006-01-20 01:18:43  No: 129683

>どうすれば良いでしょうか?

まず、数量とコードを取得し、
数量の数だけループ(For〜Nextなど)させて
1件づつINSERTしていきます。

Recordsetの扱い方  と、
SQLにおけるINSERT文の書き方  もしくは、Accessなら追加クエリでも可
をヘルプで調べてみてください。


usaginohoxtupe  2006-01-20 18:14:12  No: 129684

accessの追加クエリで作る方法をもう少し詳しく教えてもらえませんか?
数量とコードの取得方法などなど


もげ  2006-01-20 18:42:09  No: 129685

>ヘルプで調べてみてください。
と書いたはずですが。

http://hp.vector.co.jp/authors/VA002739/admin/20031228.htm
釣り竿としては、
DLookup()
http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=VBA+Recordset&num=50


usaginohoxtupe  2006-01-20 19:14:52  No: 129686

>もげ  様
早い回答アドバイスありがとうございます。
ヘルプは一応確認したんですが、不明だったもので申し訳無いです。
ヒントを参考に考えてみます。この問題は6ヶ月位悩んでいたもので、
すぐにわかれば助かると、安易に考えていました。


もげ  2006-01-20 19:58:33  No: 129687

>ヘルプは一応確認したんですが、不明だったもので申し訳無いです。

この場合、
どこがどのように判らないのか具体的に要点を絞って質問してもらえれば
回答が得られる可能性が高いですが、
「まったく判らないんで丸投げ」
だと回答の余地が(釣り方の教えようが)無いです。

確認ですが、
> (例)a  5  →    a   a   a   a   a   (ちなみにレコードでは5つ追加)

というのは、

元テーブル(コード、数量)が
a 5
b 3
c 1
だったら、

結果テーブル(コード)  は、
a
a
a
a
a
b
b
b
c
となればいいのですよね?
であれば、この辺をじっくり読んで試してみれば、
自ずと解けそうに思います。
http://www.geocities.jp/cbc_vbnet/DAO/recordidou.html


usaginohoxtupe  2006-01-23 19:20:36  No: 129688

結果はそうです。
現在、はっきりしているのは1レコードずつ数量の値を変数に代入
その後変数が0で無い場合、結果テーブルにcodeを追加し0になるまで-1していき
0になった状態で次のレコードへ移動する。
という流れで可能なはずなのですが、
どうすればいいのか  不明です。
code追加は追加クエリで可能までは、はっきりしています。
vbはまったくの初心者です。


もげ  2006-01-23 19:40:41  No: 129689

>どうすればいいのか  不明です。

実際にコード書いて試してみてください。
その上で疑問点を具体的に質問しましょう。
追加はこの辺でできると思いますよ。
http://www.geocities.jp/cbc_vbnet/DAO/record2.html

もうすこし  だと思うのでがんばってください。


もげ  2006-01-25 04:07:59  No: 129690

そろそろいいかな。

'検証環境:Access2000SP3  DAO3.6を参照設定
'テーブルT1,T2を用意、構造は以下に
'T1  (CODE,QTY)
'T2  (CODE)

Function vba_de_tsuika()
    Dim db As DAO.Database
    Dim rsIn As DAO.Recordset
    Dim rsOut As DAO.Recordset
    Dim lCntMax As Long
    Dim lCntLoop As Long
    Dim strCode As String
    
    Set db = CurrentDb
    db.Execute "DELETE FROM T2", dbConsistent
    Set rsIn = db.OpenRecordset("T1", dbOpenTable)
    Set rsOut = db.OpenRecordset("T2", dbOpenTable)
    Do Until rsIn.BOF = True Or rsIn.EOF = True
        lCntMax = rsIn.Fields("QTY").Value
        strCode = rsIn.Fields("CODE").Value
        For lCntLoop = 1 To lCntMax
            With rsOut
            .AddNew
            .Fields("CODE") = strCode
            .Update
            End With
        Next lCntLoop
        rsIn.MoveNext
    Loop
    rsIn.Close
    rsOut.Close
    Set rsIn = Nothing
    Set rsOut = Nothing
    db.Close
    Set db = Nothing
End Function


usaginohoxtupe  2006-01-30 07:44:21  No: 129691

現在指導いただいた内容を勉強中です。
ありがとうございました。
考えた結果、不明な点があればまたよろしくお願いいたします。


usaginohoxtupe  2006-02-15 01:56:45  No: 129692

やっと解決しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加