[リストへもどる]
一括表示

投稿時間:2002/08/20(Tue) 16:22
投稿者名:さー
Eメール:
URL :
タイトル:
VB SQL
アクセステーブルA---項目a1(日付),a2
アクセステーブルB---項目b1(日付)
アクセステーブルC---項目c1,c2
      ※a2とc2は同じデータ。
月日数---x

    
としたとき、a1とb1が同月の時、c1にx−a1(日数)をいれるという作業をしたいのですが、
(Cにはa2=c2のデータがあるかどうかは不明、ある場合はc1のみ書く。)

a2=c2のレコードがある時
execute "update C " _
      & "set c1 = (datediff('d',a1,x) from A,B,C)" _
      & "where (year(A.a)=year(B.b)) and " _
      & "(month(A.a)=month(B.b)) and " _
      & "(A.a2=C.c2)"
ない時
execute "insert into C(c1) " _
      & "select datediff('d',a1,x) " _
      & "from A,B,C " _
      & "where (year(A.a)=year(B.b)) and " _
      & "(month(A.a)=month(B.b)) and "        
      & "(A.a2<>C.c2)"

と書いたところ、
update の方は、(datediff('d',x,a1) from A,B,C)に演算子がないとエラーが出て、
insert の方はパラメータが足りませんでした とエラーが出てしまいました。

どこが間違っているのか分かりません。
どなたか分かったら教えてください。
また、もっと分かりやすい組立て方がありましたら、教えてください。

投稿時間:2002/08/20(Tue) 17:04
投稿者名:とろ
Eメール:
URL :
タイトル:
Re: VB SQL
A.a や B.b が定義されていません。
A.a1 や B.b1 の間違いじゃありませんか?

投稿時間:2002/08/20(Tue) 17:13
投稿者名:さー
Eメール:
URL :
タイトル:
Re^2: VB SQL
> A.a や B.b が定義されていません。
> A.a1 や B.b1 の間違いじゃありませんか?

A.a1 B.b1 でした。。。
訂正します。
(Year(A.a1)=Year(B.b1)) and (Month(A.a1)=Month(B.b1))でした。
実際にはちゃんと書いているのですが、エラーが出てしまいました。。

投稿時間:2002/08/20(Tue) 17:16
投稿者名:とろ
Eメール:
URL :
タイトル:
Re: VB SQL
>       & "set c1 = (datediff('d',a1,x) from A,B,C)" _
>       & "select datediff('d',a1,x) " _

datediff 関数の第2引数、第3引数は日付ですよ。
x は数値(日数)ではないですか?

関数を良く調べましょう。

投稿時間:2002/08/20(Tue) 17:26
投稿者名:さー
Eメール:
URL :
タイトル:
Re^2: VB SQL
x=DateSerial(Year(DateAdd("m", 1, a1)),Month(DateAdd("m", 1, a1)), 0)
と月末の日を求めたものなのですが、dateserialじゃだめなんですか???

投稿時間:2002/08/20(Tue) 17:55
投稿者名:とろ
Eメール:
URL :
タイトル:
Re^3: VB SQL
> x=DateSerial(Year(DateAdd("m", 1, a1)),Month(DateAdd("m", 1, a1)), 0)
> と月末の日を求めたものなのですが、dateserialじゃだめなんですか???

それならば良いんじゃないですか?

ただ、 x は月日数って書かれていたから、
28 や 30 や 31 が入っているのかなって思っただけで...

前もちょっと言ったけど、 x っていうのは何ですか?
VB の変数じゃないですよね。

投稿時間:2002/08/20(Tue) 18:34
投稿者名:NAO★
Eメール:
URL :
タイトル:
Re^4: VB SQL
私もVBの変数をそのまま文字列に書いていると
思われる方に一票

SQLとかは直接Execute文に渡さないで、一旦変数に保存して
Debug.Printなどに表示させるようにした方が
デバッグしやすいですよ

投稿時間:2002/08/21(Wed) 09:21
投稿者名:さー
Eメール:
URL :
タイトル:
Re^5: VB SQL
とろさん。
xは変数ですが、、、’’で囲うだけじゃダメなんですか???

NAOさん。
> SQLとかは直接Execute文に渡さないで、一旦変数に保存して
> Debug.Printなどに表示させるようにした方が
> デバッグしやすいですよ

ありがとうです。
一応表示させたりしてるんですが、
表示したやつを見ても分からないため、原因がまったくわからないのです。(T_T)

update〜 と insert〜 のエラー内容が違うのもちょっと気になるところです。。。

投稿時間:2002/08/21(Wed) 09:38
投稿者名:とろ
Eメール:
URL :
タイトル:
Re^6: VB SQL
> 一応表示させたりしてるんですが、
> 表示したやつを見ても分からないため、原因がまったくわからないのです。(T_T)

表示させたやつをデータベース側で実行してみれば、
エラーの原因となっている位置が分かりますよ。
Access ならばクエリの新規作成で、
SQL Server ならばクエリアナライザで実行してみて下さい。

投稿時間:2002/08/22(Thu) 14:54
投稿者名:さー
Eメール:
URL :
タイトル:
Re^7: VB SQL
> 表示させたやつをデータベース側で実行してみれば、
> エラーの原因となっている位置が分かりますよ。

なるほど!!
その手がありましたね。
さっそくやってみます。