• ベストアンサー

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

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

noname#12942
noname#12942

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

  • ベストアンサー
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.3

ちなみに、ユニオンクエリは、別種のテーブル/クエリのデータをひとつの表にまとめたいときに使います。 個人テーブルと法人テーブルがあるとして、氏名と法人名をひとつの表として扱いたいときは、 SELECT 氏名 FROM 個人WHERE ~  UNION ALL SELECT 法人名 FROM 法人 WHERE ~; ってな感じですね。 サブクエリは、クエリで抽出した結果を使ってさらに別のクエリを抽出したいときに使います。 売上テーブルから、あ行の顧客が購入した商品を知りたいときなど、 SELECT 商品ID FROM 売上テーブル WHERE 顧客ID IN (  SELECT 顧客ID FROM 顧客テーブル WHERE カナ LIKE '[アーオ]*' ); のようにします。 少しでもヒントになれば幸いです。

noname#12942
質問者

お礼

2度にも渡り、ご回答いただきありがとうございました。 今、やっていて一番難しいことは、プログラムを読む事よりも、 相手に自分の出来ない事が何なのか…を伝える事にあります。 だからARCさんが最初に書かれたコメントを見て、 ドキッとしました。 先ほど、私(大学3年)の指導をしてくださっている大学の先生から、 バグが見つかったとメールがきました。 まだ何のバグなのか(そもそもバグってそんなに探し難いものなのかでしょうか?)わかりませんが、もうちょっと前進できそうです。 それでは…また何かの時は宜しくお願いします。 そのときこそ自分の分からないところをきちんと説明できればな…と願っております。

その他の回答 (2)

  • masabou7
  • ベストアンサー率18% (2/11)
回答No.2

要するに「伝票番号」単位で集約して表示したいのでしょうか? であれば、「GROUP BY」を使ってみてはどうでしょうか? それでも、出来ない場合は、VB側でLOOPしながら合計をカウントするしかないでしょうね。

noname#12942
質問者

お礼

そうです、「伝票番号」単位で集約して表示したいのです。 [GROUP BY]をなかなか上手く使えなかったので、LOOPしながらカウントすることにしました。 ご指導ありがとうございます。 指導教官より今日メールが… バグが見つかったそうです。 (何のバグかはまだ詳しく聞かされていませんが) ちょっと前進できそうな気がしてきました。 次回、質問をするときは、自分の分からないところをはっきりと伝えられるようになっていたいなと思っております。それでは。

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.1

SELECT * FROM Table1 WHERE 伝票番号 =1; のようなSQLを作って、それをグリッドに表示すればいいのでは? 大変混乱していらっしゃるようで、お書きになった文章ではいまいち何のことやらわからないです。 思いっきり具体的に、 ○どのようなテーブル、フィールドがあって、 ○どのような表示にしたいのか、 ○これまでどのようなことをしたのか、 ○そのやり方ではどのように駄目だったのか、 ○もちろん、OS、VB、Accessのバージョンなども。 といった事を補足してくださいな。 今回に限らず、技術系の質問をするときには、上記のような事柄をできるだけ具体的にお書きになって下さい。 その方が回答者の方ももぐっと答えやすくなりますので、より良い結果が得られますよ。 (ちなみに、現在システム大クラッシュ中でして、VBはおろか、Accessも、その他もろもろの開発環境も使えません。640*480の画面でちまちまと書いております。 ってことで、他力本願モードです。ほかの回答者さん、よろしくお願いします(笑)。)

関連するQ&A

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

    こんにちわ。 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,…]と出力させるには、どのようなプログラムを行えばいいのか、どなたか教えてください。お願いします。

  • ACCESSのクエリで同じSQL文だが結果が異なる

    ACCESS2003にて 選択クエリAをSQLビューで開きSQL文をコピー、 新規作成したクエリBのSQLビューに貼り付けて実行したところ、 AとBで結果の件数が異なりました。 そのままBを保存して終了。 BをSQLビューで開き、 SQL文の末尾の;を削除して実行すると、 Aと同じ件数の結果になりました。 再度Bを保存して終了し、 BをSQLビューで開き、 SQL文の末尾の;を削除して実行すると、 Aと異なる件数(元の結果)になりました。 何が原因なのでしょうか。 SQL文の内容は、サブクエリを含んでいて、サブクエリのFROMは SQLSERVERのリンクテーブルです。 よろしくお願いします。

  • (2)-SQL文の書き方を教えてください。

    table項目:名称、日付、数量。 以上のtabelから以下のクエリーをつくりたいです: クエリー項目:名称、当日数量、当月数量。 日付の値は、フォーム上で指定する。 具体的に:フォーム上日付欄に2003/10/01と2003/10/30を指定し、実行すると、当日数量は、2003/10/30その日の合計数が出る。当月数量に指定された10/01から10/30までの数字の合計がでる。 今、片方だけ条件のSQL文を書けるですが、二つ条件のSQL文がとても難しい。 そうゆうSQL文を教えていただけませんか? よろしくお願いいたします。

  • SQL文を教えて下さい

    VB2008、SQL Server で開発をしています。 下記の条件でデータを取得したいのですが、SQL文がうまくできず、困っています。 おわかりの方、教えてください。 仕様:得意先マスタ(得意先M)の全件と、売上テーブル(売上T)を読みます。     売上テーブルの商品コードの商品名を商品マスタ(商品M)より取得します。     得意先マスタの全得意先を取得する必要があります。     すべての得意先の売上データが存在するわけではありません。 ACCESS上でクエリを作成し、SQLビューにすると、こうなります。 inptSyoCD:画面から入力した商品コード 1,まず、クエリ1: SELECT 売上T.伝票日付, 売上T.伝票番号, 売上T.得意先コード, 売上T.明細区分, 売上T.商品コード, 商品M.商品名称 FROM 売上T LEFT JOIN 商品M 売上T.商品コード = 商品M.商品名 WHERE 売上T.明細区分=1 AND 売上T.商品コード= inptSyoCD ; 2,次に、実際に処理するSQL文: SELECT 得意先M.得意先コード, 得意先M.得意先名称,       クエリ1.伝票日付, クエリ1.伝票番号, クエリ1.明細区分, クエリ1.商品コード, クエリ1.商品名  FROM 得意先M LEFT JOIN クエリ1 ON 得意先M.得意先コード = クエリ1.得意先コード ORDER BY 得意先M.得意先コード,売上T.伝票日付,売上T.商品コード; この2つをひとつのSQL文にする方法がわかりません。 よろしくお願いいたします。

  • 【再】2)-SQL文の書き方を教えてください。

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=694458 先日この問題で投稿しましたが、未完成のため、再度要望を整理し、ご指導をお願いいたします。 W←tabel名:名称、日付、数量 明細データ:     名称   日付    数量 A   2003/10/01   200 B   2003/10/03   500 C   2003/10/10   4000 A   2003/10/03   200 A   2003/10/03   100 C   2003/10/15   100 B   2003/10/15   300 C   2003/10/15   50 B   2003/10/15   60 求めているクエリーのイメージ:    2003/10/15 時点 ================================================ 名称     当日数量     当月数量     A          0       300     B         360       860     C         150       4150 ------------------------------------------------- 先日教えてもらったSQL文、希望のクエリーを作れないです。 -------------------------------------------------- select 名称, sum(AAA) as 当日数量, sum(BBB) as 当月数量 from ( select 名称, 0 as AAA, sum(数量) as BBB from W where 日付 >= #2003/10/01# and 日付 <= #2003/10/15# group by 名称 union select 名称, sum(数量) as AAA, 0 as BBB from W where 日付 = #2003/10/15# group by 名称 ) group by 名称; このSQL文は、2番目のSelectのところでエラーが出る (From句の構文エラーです) -------------------------------------------------- 後、Accessバージョンによって、SQL文が変わるでしょうか?当方は、Access97を使っている。 ご指導をお願いいたします。

  • 並替にてSQL文を優先させたい

    テーブル1には 番号フィールド 001 002 003 が入力されています。 選択クエリで SELECT テーブル1.番号 FROM テーブル1 ORDER BY テーブル1.番号; というSQL文でクエリ1を作成しました。 クエリ1を開くと 番号 001 002 003 となります。 ここでクエリ1をダブルクリックで開き、 右クリック→降順で並替をすると 003 002 001 に並び変わります。 このまま保存し、再度クエリ1を開くと降順のままです。 SQL文の並び替え順は無視されるのでしょうか?

  • PHP+mysqlでSQL文に文字数制限はありますか?

    基本的な質問で申し訳ありません。 $sql="......";にSQL文を書き $rst = mysql_query($sql,$con); $col = mysql_fetch_array($rst); として($conはmysql_connect関数の結果です) WEBを作成しているのですが、ある程度以上長いSQL文を書くと正常に作動しません。(短いSQLであれば正常に差作動します。)  当然SQL文自体もmysqlで直接実行すると作動するものです。SQL文自体がUNIONや副問い合わせを多用し250行程度になってしまったためかと考えていますが、文字数制限等があるのでしょうか?PHPには変数宣言が無いと認識しているのでどう対処して良いかわかりません。 SQLを分解できないとすると何か良い方法はありますでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Access2003 集合クエリ(SQL文の書き方)

    Access2003 集合クエリ(SQL文の書き方) 下記のようなデータがあります 価格  数量 480   1 1000 2 1100 3 2500 1 3300 2 2800 1 これを下記のように各価帯に数量合計をまとめいたいのですが 499円以下   1 500~999円  0 1001~1999円 5 2001~2999円 2 3001~3999円 2 このような値を求めるSQL文はかけるのでしょうか?

  • ACCESS 追加クエリでレコード数の指定したい

    Win XP Access2003 見積伝票を作成しております。サブフォーム(帳票フォーム)の登録方法でご教授お願い致します。 "伝票明細テーブルW"(伝票番号,行番号,内容、数量、単価、・・・)を基にした "伝票明細クエリW"を作成し、入力しやすいようにフォームを開いた時に行番号(連番)を振り、30行表示するようになっています。 入力確認後に登録ボタンをクリックして追加クエリを開き"伝票明細テーブルW"から"伝票明細テーブル"に30件レコード保存するようになっているのですが、 場合によって内容が2~3行で終わる時があります。 このような時に無駄に30行のレコードを保存せず"内容"(フィールド)が入力されているの最終レコードまでで伝票明細テーブルに追加したいのですが、よい方法がありましたら宜しくお願い致します。 "内容"(フィールド)は途中に空白の時があります。 行番号    内容        数量  1     オイル交換      3.0  2  3     タイヤ交換       4.0

  • サブクエリではかけるのですが、サブクエリを使わないとできません。

    sql文について困っているので質問させてください。 以下のデータがあるとします。 番号  月日   金額 ---------------------------- 1    0512   100 1    0411   200 1    0310   300 2    0609   400 2    0708   500 2    0411   600 3    0523   700 3    0322   800 このデータを番号でグループ化し、 月日が最大のときの金額を取得したいです。 つまり、クエリの実行結果を以下のようにしたいです。 番号  月日   金額 ---------------------------- 1    0512   100 2    0708   500 3    0523   700 この場合、サブクエリを使って書けばほしい結果が得られると思いますが、 mysqlのバージョンが4.0.22なのでサブクエリが使えません。 サブクエリを使わないで上記の結果を得ることはできるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL

専門家に質問してみよう