VBとACCESSを使った伝票作成方法

このQ&Aのポイント
  • VBとACCESSを使用して伝票作成を行っています。利用環境はWindows Me、Visual Basic 6.0 Pro、ACCESS 2000です。伝票番号と商品コードと数量の情報を入力すると、商品名と金額が表示されます。
  • 伝票番号ごとに行番号と入力した商品コードと数量が出力されますが、現在のプログラムでは順番通りに出力されません。一つの伝票番号につき入力した行数分が一度に出力されるようなプログラムを教えていただきたいです。
  • Grid1のrowsやrow、rowselをFor文で反復していく方法を試しましたが、うまくいきませんでした。どのようなプログラムを行えば一つの伝票番号につき入力した行数分が一度に出力されるか、教えていただけないでしょうか?
回答を見る
  • ベストアンサー

大変苦しい説明ですが、これで精一杯です。

こんにちわ。 VBとACCESSを使って伝票を作っています。 *利用環境は"Windows Me","Visual Basic 6.0 Pro","ACCESS 2000" です。 *注文詳細伝票テーブル(伝票番号、{行番号、商品コード、数量})があります。   {}内はGridの中です。   そして、商品コードを入力すると、商品名が出てきて、数量を入力すると、   商品の{単価*数量}の計算がなされた金額が表示されるようになっています。    (こちらの環境は他のプロジェクトで制作し、既に完成しました。) *伝票番号1に対し、行番号が多あり、その伝票番号の行番号に入力した値の商品コードと数量が出力されます。 *これまでに入力(insert)のみを設定しましたが、入力した通りに出力されず、行番号昇順で順々に一行ずつ出力されます。 ex)(10001[伝票番号],1[行番号],3[商品コード],6[数量])(10001,2,5,7)(10001,3,9,2) *私の予測では、 Grid1.rows , Grid1.row , Grid1.rowsel のいずれかをFor文 で反復していけば、一つの伝票番号につき入力した行数分が一回で出力されるのでは…と予測しているのですが…色々やってみたのですが、どれも駄目でした。 いっそ、失敗プログラムごとこのコーナーに貼り付けてしまおうと思ったのですが、字数オーバーの為、断念致しました。 *苦しい説明で恐縮ですが、一つの伝票番号[10001]分丸ごと一遍に、行番号[1,2,3,…]と出力させるには、どのようなプログラムを行えばいいのか、どなたか教えてください。お願いします。

noname#12942
noname#12942

質問者が選んだベストアンサー

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

すみません。ご質問内容を読み間違えてました。 ご質問の中に以下の2点が「問題点」として記述されていると思います。 > 入力した通りに出力されず、行番号昇順で順々に一行ずつ出力されます。 > 一つの伝票番号[10001]分丸ごと一遍に、行番号[1,2,3,…]と出力させるには しかし上記の記述は矛盾しているようですね。 通常、このようなご質問の場合は以下のようなものと思います。 「Insertした順に表示されてしまう。行番号の昇順にするにはどうすれば良いか?」 それで「order by が必要」としたのですが、 Insert順に表示したいのであれば、「order by」を記述しないでください。 「クエリを記述して」としたのはACCESS側のクエリで作成しておいて VB6のGridコントロールのDataSourceへ記述すれば済むように思ったからです。 select 行番号,商品コード,数量 from 注文詳細伝票テーブル where 伝票番号="10001"; (行番号順なら where 伝票番号="10001" order by 行番号; です) あらかじめACCESS側でクエリを作成し、結果確認できたものを指定すれば 苦労しなくて済むと思います。

noname#12942
質問者

補足

>通常、このようなご質問の場合は以下のようなものと思います。 >「Insertした順に表示されてしまう。行番号の昇順にするにはどうすれば良いか?」 …質問の仕方がまずかったようで… insertした時点では、一行ずつ保存しているカタチになっています。 が、出力する場合は3行文の入力を一遍に出力したいのです。 一応、伝票を作っているので…。 ACCESSでクエリを作成してから、コピーすれば手っ取り早い事は、私も知ってはいるのですが、 "(プログラム上では)一行ずつ保存した同じ伝票番号を、一気に出力"したいのです。 >「クエリを記述して」としたのはACCESS側のクエリで作成しておいて >VB6のGridコントロールのDataSourceへ記述すれば済むように思ったからです。 私はVB初心者故、こちらの意味がよくわかりません。 自分が初心者故に、"わからんわからん"を連呼し、bin-chanさん他色々な方に甘えてしまっていて、情けなく思っている今日この頃です。 どうかよろしくお願いします。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

Gridは何を使用されていますか? Sourceでどうやってデータを取得しているんでしょうか? テーブルから直接取得しているなら、クエリーを記述しておけば解決しそうな気がします。 order by 行番号; の記述がありますか?

noname#12942
質問者

補足

>Gridは何を使用されていますか? MSFlexGrid >order by 行番号; の記述がありますか? あります。 こちらに↓失敗コードを記述します。 mySQL = "select * from 注文伝票詳細テーブル order by 伝票番号,行番号 asc" Set ds_syousai = db.OpenRecordset(mySQL, dbOpenSnapshot) If ds_syousai.EOF Then '省略します。 Else For j = 1 To Grid1.Row Text1.Text = ds_syousai.Fields("伝票番号") Grid1.Row = j Grid1.Col = 0 Grid1.Text = ds_syousai.Fields("行番号") Grid1.Col = 1 Grid1.Text = ds_syousai.Fields("商品コード") Grid1.Col = 3 Grid1.Text = ds_syousai.Fields("数量") Next j End If 全部左揃えになってしまい、大変読みづらいプログラムになってしまいました。 こちらでなんとかお願いします。

関連するQ&A

  • GridでSQLを使うのに苦労してます。

    SQL文を試行錯誤して、テキストボックス(伝票番号)とGrid(行番号・商品コード・数量)を連携させ(同じテーブル(MS-access))、 VB上で操作(追加・修正・検索・削除・表示etc)しようとしています。 本来ならば、クエリで望みのSQLを作成してから、コピーすれば良いのでしょうが、 伝票番号が1に対し、Grid内(行番号etc)が多の関係にある為、どのようなSELECT文を作成すればよいのかわかりません。 ユニオンクエリやらサブクエリやらなんのことやら…。 わかりにくい質問で申し訳ありませんが、 答えられる方、いらっしゃいましたら、よろしくお願いします。

  • 空白スルー・判定は可能ですか?

    下記のようなリストから、並び替えたリストを作成したいのですが。 (シート1)   商品名    数量   A      B 1 テレビA   1 2 (CD)   5 3 洗濯機    5 4 5 テレビB   3 6 (AB)   1 奇数行に商品名、偶数行にコードが入力されたものを、 シート2にてリストを作成します。 (シート2)   A      B 1 テレビA   1 2 テレビB   3 3 洗濯機    5 4 (AB)   1 5 (CD)   5 6 (EF)   2 A列は1頁に40行目まであります。 奇数行の商品名を昇順に並替えます。 商品名が未入力(空白)になったら、偶数行のコードを昇順に並び替えます。 ※商品名は一旦未入力(空白)があった場合、それ以降入力されませんが、コードは入力されていない場合もあります。(シート1:4行目) どうぞ宜しくお願いします。

  • access2003 抽出条件が持ち越されてしまう

    http://okwave.jp/qa3580875.html ↑にて質問させていただいた者です。  一部繰り返しになりますが、2000種ほどの商品を扱っています。伝票を見ながらフォームから直接売上入力を行いたく思います。 ◆親)売上入力フォーム:売上管理番号/日付/取引先/取引先伝票番号/売上合計金額 ◆子)売上明細フォーム:商品コード/商品名/単価/数量/明細金額 ◆売上入力テーブル:売上管理番号/取引先/日付/取引先伝票番号 ◆売上明細テーブル:明細番号/売上管理番号/商品コード/数量/明細単価 子フォームで商品コードのフィルターとして、 1)親フォームで選択した取引先の商品のみ→[Forms]![売上入力フォーム]![取引先]を導入 2)ワイルドカード「Like "*" & [商品コードの一部を入力] & "*"」 のふたつを使っていますが、うまく動作してくれません。 いったん商品コードを選択すると、明細の次の行に移動しても取引先選択のポップアップが出ず、コンボボックスには同じ選択肢が提示されます。さらに、新しいレコードに移動してもポップアップなし&同じ選択肢が続きます。 この状態を回避する方法を教えてください。 長くなりましたが、どうぞよろしくお願いします。

  • access で計算結果を表に代入する方法

    3つのテーブルがあります。T商品(商品コード、商品名、単価)、T明細(伝票番号、商品コード、数量)、T伝票(伝票番号、昨年度合計) Q売上でT商品、T明細から売上が計算できます。 Q伝票合計 でQ売上から伝票番号ごとに合計が計算できます。 ここで、 Q伝票合計の結果をT伝票に代入して昨年合計との差を算出することができれば、方法を教えてください。 T商品(商品コード、商品名、単価) 001 バット 10000 002 ボール 1000 003 ベース 4000 T明細(伝票番号、商品コード、数量) D0801 001 4 D0802 002 10 D0801 002 20 D0801 001 20 T伝票(伝票番号、昨年度合計) D0801 100000 D0802 300000 D0803 400000

  • Excelでワークシート作成

    自営で飲食店をしています。 Excel2000で一枚ずつ伝票を入力し(ワークシートに商品コード入力で商品名、金額がでるようにしている)1ヶ月ごとに商品別合計を出しています。 が、とても原始的なやり方で作業しています。1ヶ月分の伝票を入力後、ソート&集計していますので、入力段階で8000行ほど使い、集計に恐ろしく時間がががっています。 (居酒屋なので、一組のお客様一枚の伝票でも平均10品目以上記入しています、これが一日数十枚×27日・・・。もちろん手書き伝票です。(涙)) そこで質問です。 商品コードを入力するだけで、商品名で数量が次々と累計されていく(商品コードはEnter後消え、またそこに入力する)・・・・という夢のようなワークシート(関数?)を作りたいのですが、ド素人には無理でしょうか?(ワタクシ、超初心者です) もし、作成は無理で、ソフトを使った方が良い場合、どんなソフトを購入すれば良いでしょうか? ご存知の方、よろしくお願いします。

  • csvファイルをエクセルにしたい。

    本当に素人の質問です。例えば、1256,,,000001,47,,1,,,,,12,248,348,01,20050206のようになっているものを 伝票番号1256,取引先コード,仕入先仕訳コード,小売企業コード000001,店舗コード47,物流ルート,明細行1,商品コード,JANコード,商品名漢字,規格名漢字,数量12,原価単価248,売価単価348,欠品区分01,納品日20050206 伝票番号が1256、取引先コードが000001だと言うようにエクセルに書き込むにはどのようにしたら良いのでしょうか?

  • access2003 複数のフォームから入力したデータに通し番号を付けてストックしたい

    初心者の恥ずかしい質問かもしれないので申し訳ありませんが、自力で解決できないのでアドバイスをお願いします。 伝票入力画面を作っています。  ◆親)売上入力フォーム:売上管理番号/日付/取引先/売上合計金額 ◆子)売上明細フォーム:商品コード/商品名/単価/数量/明細金額 ◆売上入力テーブル:売上管理番号/取引先/日付 ◆売上明細テーブル:明細番号/売上管理番号/商品コード/数量/明細単価 伝票が数種類あるため、それぞれの伝票を画像として取り込んで複数の入力画面を作り、入力しやすくしようと思っています。 このとき、各フォームから入力したデータを、オートナンバーでひとつの売上入力/明細テーブルにストックしていくにはどうしたらよいでしょうか? よろしくお願いします。

  • 桐Ver9の主キーの設定

    桐Ver9をWindowsXPで使ってます。 表定義で主キーを複数設定することってできないのでしょうか? 簡単に言うと、 伝票表(伝票番号,顧客ID,売上日)      ~~~~~~~~ 明細表(伝票番号,商品コード,数量)      ~~~~~~~~  ~~~~~~~~~ といったときの、明細表の[伝票番号]と[商品コード]なのですが。

  • Access2000フォーム/サブフォームにつおて

    Access2000でフォーム/サブフォーム(売上伝票)を作っています。 フォーム(売上伝票メイン)には伝票番号、売上先などを入力・・・ サブフォーム(売上伝票サブ)は商品、数量、金額などを入力します。 そこで質問ですが、サブフォームの商品は商品コード(コンボボックス)を入力すると該当する商品名、単価などを商品台帳から引いてくる、としたいと思い、商品コードの「更新処理後」に以下のコードを記述しました。   Me![商品名] = DLookup("[商品名]", "[商品台帳]","[商品コード]= Forms![売上伝票メイン]![売上伝票サブ]![商品コード]")     サブフォーム上の商品名に商品台帳の商品名を入力するとしたつもりなのですが、何も表示されません。  単価も単位も同様です。  この方法ではだめなのでしょうか?  

  • エクセルの連番について

    例えばA列が商品コード番号を入力する行でB列が伝票番号を入力する行だとします。A列に入力すると自動的にB列に連番が入るようにしたいのですが・・・   A  B 1 11  1 2 23  2 3 54  3 こんな感じですが。

専門家に質問してみよう