みなさんはじめまして、今VisualBasic6でデータベースを作ろう
として、途中で構文エラーというのが出てしまって困っています。
どうか教えてください。ちなみにこんな感じです。

SQLステートメント

mySQL = "SELECT 伝票番号,伝票サブ.商品ID,商品名,単価,数量, "
& "単価*数量 AS 金額 "
& "FROM 伝票サブ INNER JOIN 商品一覧 "
& "ON 伝票サブ.商品ID = 商品一覧.商品ID "

とこんな感じなんですが、どうも & のところが青色に反転
していて「コンパイルエラー」となってしまいます。
誰かわかる方いますか?もし良かったら教えてください。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

mySQLは上記の通りに記述なさったのですね?



行を継続する場合は、「以下に続きがありますよ」を宣言します。
具体的には、行末に半角スペース1文字とアンダースコア(Shift+ろ)を記述します。
mySQL = "SELECT 伝票番号,伝票サブ.商品ID,商品名,単価,数量, " _
& "単価*数量 AS 金額 " _
& "FROM 伝票サブ INNER JOIN 商品一覧 " _
& "ON 伝票サブ.商品ID = 商品一覧.商品ID "
となります。

がんばってください。
    • good
    • 0
この回答へのお礼

bin-chanさん今回は本当にありがとうございました。
アドバイス通りにやったら問題が解決しました。
またなんか困ったことがあったらその時はまた
よろしくお願いします。どうもありがとうござい
ました。

お礼日時:2001/12/15 20:11

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

関連するカテゴリからQ&Aを探す

このQ&Aと関連する良く見られている質問

Q【SQL文】 where (colA & colB) in ((1 & 1), (2 & 2)) とは?

VB6のプログラムを読んでいたら、ACCESSのMDBにSQL文を
投げる際に以下のような記述がありました。

------------------------------------------------------
select * from tableA
where (colA & colB) in ((1 & 1), (2 & 2))
------------------------------------------------------

これはどういったことを表しているのでしょうか?

雰囲気的には
(colA, colB) の組み合わせが (1, 1) か (2, 2)
というようなことを表しているのかなと思うのですが
はっきりとわからなかったため質問させていただきました。

また、これはOracle等の他のDBでも使用できる構文
なのでしょうか?

ご存知の方がいらっしゃいましたら教えていただけたらと
思います。

Aベストアンサー

<IN=集合>

WHERE節のキーワード INに値を列挙することで、その値を持つ列を抽出することができます。

<列名> [NOT] IN (<値1>,<値2>,...<値n>,)

SELECT * FROM 得意先一覧 WHERE 郵便番号 IN ('8300001', '8300002')

Informix、SQL Sever では、このように書きます。
ですから、構文としては共通した書き方です。
ただし、Access では、演算子をSQLのそれでなくVBAのそれが通用します。

・文字列の加算・・・&
・'11' と 11とで型照合エラーが発生しない。

などです。

ですから、Access 以外では、次のような書き方が一般的。

[イミディエイト]
? DBSelect("SELECT * FROM A WHERE 列1+列2 IN ('1'+'1', '2'+'2')")
1;2;2;
2;1;1;

この場合、列1と列2の組合せが1+1、2+2 を取得しています。

ただし、示されているコードはバグに近い書き方です。

[イミディエイト]
? DBSelect("SELECT * FROM A WHERE 列1+列2 IN ('11'+'11', '22'+'22')")
1;11;11;
2;22;22;
3;111;1;

[イミディエイト]
? DBSelect("SELECT * FROM A WHERE 列1+'/'+列2 IN ('11/11', '22/22')")
1;11;11;
2;22;22;

この2つではヒットするレコードが違います。
ちょっと、問題ありかと思います。

<IN=集合>

WHERE節のキーワード INに値を列挙することで、その値を持つ列を抽出することができます。

<列名> [NOT] IN (<値1>,<値2>,...<値n>,)

SELECT * FROM 得意先一覧 WHERE 郵便番号 IN ('8300001', '8300002')

Informix、SQL Sever では、このように書きます。
ですから、構文としては共通した書き方です。
ただし、Access では、演算子をSQLのそれでなくVBAのそれが通用します。

・文字列の加算・・・&
・'11' と 11とで型照合エラーが発生しない。

などです。

ですから、Access...続きを読む

QACCESSで累計数量管理 仕入時と販売時の部品番号が異なる商品を累計管理する方法2

私はACCESS初心者です。
会社用に製品の仕入・販売数量累計数量を閲覧出来る仕組みを作成しております。
以前こちらのサイトでアドバイスを頂き、希望していた下記内容にて運用出来る様になりました。
-------------------------------------------------------------
「仕入番号」と「販売番号」が異なる場合、仕入番号で検索した時、
「仕入数量合計」-「販売数量合計」=「在庫」をクエリ表示する。
-------------------------------------------------------------
ただ、下記事情の修正を行う為、再度アドバイスを頂きたく投稿させて頂きました。

<現在の状況>
    仕入番号 販売番号   仕入数量 - 販売数量 = 在庫
(1)  A        A        10       5        5
(2)  A        B                 5       -5
(3)  B        B         5       5        0

つまり、仕入番号A、Bともに在庫は「0」個です。
                      
<現在のテーブル・クエリ構成>
・部品情報テーブル
 ・ID(主キー)
 ・販売番号
 ・仕入番号

・仕入情報テーブル
 ・ID(主キー)
 ・仕入番号
 ・仕入数量

・販売情報テーブル
 ・ID(主キー)
 ・販売番号
 ・販売数量

・累計情報クエリ
 ・仕入数量の合計
 ・販売数量の合計
 ・在庫:([仕入数量の合計]-[販売数量の合計])

以前頂いたアドバイスにより、「仕入番号」で各テーブルを合計する事で(1)と(2)だけの場合は、仕入番号「A」の在庫は0で表示されます。
ただ、(3)が加わった際に累計情報クエリの結果が下記になってしまいます。

    仕入番号 販売番号   仕入数量 - 販売数量 = 在庫
(1)  A        A        10       5        5
(2)  B        B         5      10       -5

前述しました通り、実際のところは
仕入番号Aの仕入数量合計10個-販売数量合計10個=在庫0個
仕入番号Bの仕入数量合計 5個-販売数量合計 5個=在庫0個
ですので、これをクエリ結果として表示したいのです。

この仕組みを現在運用中の為、出来るだけ現設定を残しつつ解決をしたいと考えております。
何卒宜しくお願い申し上げます。

私はACCESS初心者です。
会社用に製品の仕入・販売数量累計数量を閲覧出来る仕組みを作成しております。
以前こちらのサイトでアドバイスを頂き、希望していた下記内容にて運用出来る様になりました。
-------------------------------------------------------------
「仕入番号」と「販売番号」が異なる場合、仕入番号で検索した時、
「仕入数量合計」-「販売数量合計」=「在庫」をクエリ表示する。
-------------------------------------------------------------
ただ、下記事情の修正を行う為、再...続きを読む

Aベストアンサー

・部品情報テーブル
 ・ID(主キー)
 ・販売番号
 ・仕入番号

・仕入情報テーブル
 ・ID(主キー)
 ・部品_ID <---->部品情報テーブル!ID
 ・仕入番号
 ・仕入数量

・販売情報テーブル
 ・ID(主キー)
 ・部品_ID <---->部品情報テーブル!ID
 ・販売番号
 ・販売数量

このように、テーブルを変更するのは簡単。
この改善を断行しなければ、一歩も先には進めないと思います。進んでもまた後戻りは必至。

・部品情報テーブル
ID___販売番号___仕入番号
1____AAA__________AAA
2____BBB_________BBB

・仕入情報テーブル
ID___部品_ID___仕入番号___仕入数量
1_________null__________AAA___________100
2_________null__________BBB__________200

[イミディエイト]
? CNNExecute("UPDATE 仕入情報テーブル, 部品情報テーブル SET 仕入情報テーブル.部品_ID = 部品情報テーブル.ID WHERE 仕入情報テーブル.仕入番号=部品情報テーブル.仕入番号")
True

・仕入情報テーブル
ID___部品_ID___仕入番号___仕入数量
1____________1__________AAA___________100
2____________2__________BBB__________200

ここでは、SQL文実行関数を使っていますが、このSQL文をクエリにコピペすれば<更新クエリ>が出来上がります。

※仕入情報テーブル.仕入番号は、残しておいても構いません。
※ただし、部品情報テーブル.仕入番号を標準とし仕入情報テーブルでは標準を加筆修正するという仕組みが前提。

僅かに2回SQL文を実行するだけの改善です。
お勧めしておきます。

・部品情報テーブル
 ・ID(主キー)
 ・販売番号
 ・仕入番号

・仕入情報テーブル
 ・ID(主キー)
 ・部品_ID <---->部品情報テーブル!ID
 ・仕入番号
 ・仕入数量

・販売情報テーブル
 ・ID(主キー)
 ・部品_ID <---->部品情報テーブル!ID
 ・販売番号
 ・販売数量

このように、テーブルを変更するのは簡単。
この改善を断行しなければ、一歩も先には進めないと思います。進んでもまた後戻りは必至。

・部品情報テーブル
ID___販売番号___仕入番号
1____AAA_____...続きを読む

QVSAM,QSAM,BSAM,BPAM,BDAM

データセット編成とアクセス法に関してですが、それぞれ、どのようなデータセットとして使われることが多いですか?データを入れるとか…、プログラムを入れるとか…。

Aベストアンサー

メインフレームの世界ですね。私が使い慣れているのは
NEC製ですが、共通項が多いので説明します。

> BPAMがプログラムライブラリーか?
簡単にはその通りです。
プログラムだけではないですが、順編成のサブファイル
を複数格納可能な編成方式のファイル(ライブラリ)を
意味します。

> VSAMがDB?QSAM,BSAMがテープとディスクか?
VSAMはDBの原型みたいなものです。
カタログ/VSAMファイル本体以外にジャーナルを持ち、
COMMIT,ROLLBACK制御も可能です。
QSAM,BSAMはVSAMアクセスの動作方式のことで
す(プログラム中では意識する必要ありません)。

> BDAMはディスクか???
これもアクセス方式ですね。目的レコードの相対アドレ
スを指定してアクセス(READ/WRITE)する方式です。

> DBやJCL、ファイルを入れる場合はBPAMか?
DBは別物です。JCL、プログラム等が格納されるファイル
の形式(編成)がBPAMです。

> ボリュームという言葉があるけれど、データ編成で考えてはいけないのか?
ボリュームとは例えば磁気テープ1本、磁気ディスク1
スピンドルといった補助記録媒体の単位です。
→ 磁気ディスクには1ボリューム中に複数の異なる
  データ編成のファイルを作成可能です。

> ボリュームはどのようにできているのか?
VTOCおよびデータ領域です。

> ボリュームより大きいものはなんと言うのか?
通常ボリュームグループという概念があります。
→ この概念が無いとマルチボリュームファイルは作成
  できませんから・・・。

> 機能は、ちゃんと読んでみます。データ編成は他にもありそうな…。
NECの場合だと、相対編成、乱編成、待機結合編成なんて
のもありますね。

> ファイル編成とデータセット編成は同じことだよな…。???
大体において同じ意味で使用しているケースが多いです。

私の会社ではまだメインフレーム現役です・・・。

メインフレームの世界ですね。私が使い慣れているのは
NEC製ですが、共通項が多いので説明します。

> BPAMがプログラムライブラリーか?
簡単にはその通りです。
プログラムだけではないですが、順編成のサブファイル
を複数格納可能な編成方式のファイル(ライブラリ)を
意味します。

> VSAMがDB?QSAM,BSAMがテープとディスクか?
VSAMはDBの原型みたいなものです。
カタログ/VSAMファイル本体以外にジャーナルを持ち、
COMMIT,ROLLBACK制御も可能です。
QSAM,BSAM...続きを読む

QInner join と Left joinの明確な違いは?

Inner join と Left joinの違いがよくわかりません。
教えてください。

Aベストアンサー

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
4               NULL
5               NULL
6               NULL
の6レコードが出力されますが、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 INNER JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
の3レコードしか出力されません。

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3           ...続きを読む

QINNER JOINとwhere句

等結合のSQLを書く必要が出てきた場合、

INNER JOINとwhere句 どちらを使用されてるか教えて頂けないでしょうか?

私は、結合表の数が多くなってくると
INNNERのSQLはぱっと見て見にくいと想いWHEREを使っているのですが。
(何より、WHEREのほうが構文が簡単で・・・。)

よろしくお願いします。

Aベストアンサー

「Inner Join」と「Where」で、得られる結果が同じ場合であれば、
私は「Inner Join」を選択します。

Accessに触れ始めた頃から長らく、SQL文には触れずにデザイン
ビューのみで対応してきたという経緯もありますが
(→デザインビューなら結合線を追加するだけなので簡便)、
現在での最大の理由は、結果表示に要する時間が、Inner Join
の方が圧倒的に早かったため、です。
(レコードの多寡、インデックスの有無など、すべてのパターンを
 検証したわけではありませんが(汗))


このカテゴリの人気Q&Aランキング

おすすめ情報