dポイントプレゼントキャンペーン実施中!

VB6の初心者ですがお教え下さい。
現在「売上管理」を本を参考に作成しております。ACCESSで売上伝票(メイン)、売上明細(サブ)、商品台帳、、等のテーブルをデータベースとしています。
売上伝票(メイン)のフォーム上に売上明細(サブ)を「売上伝票番号」を元にしてデータグリッドで表示します。
参考本の記載では[価格]は商品台帳からひっぱっていますが、これでは、随時、異なった価格を入力するたび台帳の価格自体が変わってしまうため、私の場合「売上明細」の価格とリンクさせ、随時入力可能としました。

(お客様によって時々売値が変更するので)

そこで質問なのですが、その「価格」入力のセルに、商品台帳にある「価格」を一旦表示させる方法はないでしょうか?

(商品の定価を全て覚えてはいないので)

以前アクセスで同様のものを作成したときは、親子のフォームでしたので、
forms!txt1.text=[コントロール]みたいな感じでしました。
ちなみに下記はデータグリッドのSQLです。
 
( 定価*1 AS 価格と試しましたが変更でき   ず、だめでした。)

ヒントとなるような事でも結構ですので宜しくお願いします。

Dim rsSub As New ADODB.Recordset
Dim mySQL As String 'SQLステートメント

'SQLステートメント
mySQL = "SELECT 売上伝票番号,NO,T売上明細.JAN,商品名,定価,価格,数量 " _
& "FROM T売上明細,T商品台帳 " _
& "WHERE ( 売上伝票番号 = " & txt売上伝票番号.Text & " ) " _
& "AND (T売上明細.JAN=T商品台帳.JAN) "

A 回答 (2件)

レスが遅れました。

すいません。


VB6のデータグリッドは、データへの直結を行います。


更新作業時に、データグリッドのレコードセットそのものを利用していると、データグリッドに直結している単価を更新するのは当然です。
更新のタイミングで、データグリッドのレコードセットをそのまま利用するのではなく、別途INSERTのSQL文を作成し発行することになると思います。


ソースを見ると
>rs!売上伝票番号 = txt売上伝票番号.Text
という部分がありますね。画面イメージは以下のような感じですか?
以下の画面イメージを、メモ帳などのテキストエディタにコピペしてください。


┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃        《売上伝票明細フォーム》          ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃                              ┃
┃┌────────────────────────────┐┃
┃│データグリッドエリア                  │┃
┃├─┬─────┬─────┬─────┬────────┤┃
┃│行│伝票番号│JAN │価格  │商品名など  │┃
┃├─┼─────┼─────┼─────┼────────┤┃
┃│1│0000000001│JAN-000000│   1050│・・・・・・・・│┃
┃├─┼─────┼─────┼─────┼────────┤┃
┃│2│0000000002│JAN-000000│  111050│・・・・・・・・│┃
┃├─┼─────┼─────┼─────┼────────┤┃
┃│3│0000000003│JAN-AAAAAA│   1051│・・・・・・・・│┃
┃├─┼─────┼─────┼─────┼────────┤┃
┃│・│・・・・・│・・・・・│・・・・・│・・・・・・・・│┃
┃└─┴─────┴─────┴─────┴────────┘┃
┃                              ┃
┃                              ┃
┃ (上記の行を選択すると、テキストエリアにデータが反映)   ┃
┃ 《仮に『行2』を選択したものとする》           ┃
┃                              ┃
┃ 伝票番号 ┌──────┐               ┃
┃       │0000000002 │               ┃
┃       └──────┘               ┃
┃ JAN  ┌──────┐               ┃
┃       │JAN-000000 │               ┃
┃       └──────┘               ┃
┃ 価格   ┌──────┐               ┃
┃       │   111050│               ┃
┃       └──────┘               ┃
┃                              ┃
┃                              ┃
┃┌────────────────────────────┐┃
┃│┌───────┐    ┌─────┐┌─────┐ │┃
┃││新規入力ボタン│    │確定ボタン││削除ボタン│ │┃
┃│└───────┘    └─────┘└─────┘ │┃
┃└────────────────────────────┘┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

※上記のような場合であれば、、、
グリッドの「商品名」は「商品台帳」からの参照表示でOKだと思います。
グリッドの「価格」は、同じJANでも伝票毎に異なるのであれば、「商品台帳」からではなく「売上伝票(明細?)」からになります。


※上記と異なり、グリッドで直接JANを入力するようであれば、、、
Accessデータベースに、グリッドを表示させるため用の、テンポラリテーブルを用意する必要があります。


とりあえず、最低限
>売上伝票(メイン)、売上明細(サブ)、商品台帳
を利用しているというのであれば、個々のカラムの情報(テーブル構成)を教えてください。
    • good
    • 0
この回答へのお礼

お礼が遅れました。SQLを作成し、出来ました。ありがとうございました。

お礼日時:2006/06/27 11:29

※現状の確認


データグリッドをレコードセットの直結で利用し、データグリッド上で直接編集を行っているのですよね?
それがそのままアクセスDBに反映されているのですよね?

※実現したい事の確認
編集を行うデータグリッドのセルの売上金額の初期値に、商品台帳の価格を表示したいということですよね?



上記どおりであれば、、、、
これは、売上更新用のグリッドではなく、売上の登録用グリッドですか?
編集には、初期値が関係ないと思うので、、、


もしそうであれば、グリッドで直接編集を行うような、アクセス的な考えを捨てたら良いと思います。

この回答への補足

早速の回答ありがとうございます。
行いたい事は、回答にある通り、おっしゃる通りです。
テキスト本では、データグリッドに商品番号(私の場合JAN)及び数量のみを入力し(商品名、価格は自動)売上明細を作成するようになっています。
 私の場合、価格も手動で入力するようにしました。そこでその価格に初期値が欲しいということです。
テキスト本抜粋(一部改良)
Dim rsSub As New ADODB.Recordset
Dim mySQL As String
mySQL = "SELECT 売上伝票番号,NO,T売上明細.JAN,商品名,バラ単価,価格,数量 " _
& "FROM T売上明細,T商品台帳 " _
& "WHERE ( 売上伝票番号 = " & txt売上伝票番号.Text & " ) " _
& "AND (T売上明細.JAN=T商品台帳.JAN) "
rsSub.Source = mySQL
rsSub.ActiveConnection = deMain.cnHanbai
rsSub.CursorType = adOpenStatic
rsSub.LockType = adLockOptimistic
rsSub.Properties("IRowsetIdentity") = True
rsSub.Open
Set dbgSub.DataSource = rsSub
----------------------
Dim rs As ADODB.Recordset
Set rs = dbgSub.DataSource
rs!売上伝票番号 = txt売上伝票番号.Text
rs.Update
rs.Requery

セル番地を指定するとかは、出来ないのでしょうか?

補足日時:2006/06/17 11:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!