AccessDBのinsert処理等でのエラーについて

解決


ボン  2004-09-25 02:58:20  No: 116496

VB.NETでアプリを作成中です。
DBにACCESSを用いていますが、INSERT処理を行う際に
integerで宣言しているものがinsertされません。
【文字列"insert into ・・・"から型'Double'へのキャストは有効ではありません】とエラーが返ってきてしまいます。
ACCESSのフィールドは数値型の整数型に設定しております。
整数型以外にも色々と変更して試しましたが全て同じエラーで終わります。

integerではなくString型にすると何故か上手く処理できてしまったりで
わけが分からない状態に陥ってます。

どなたか心当たりのある方はいらっしゃいませんか?
ご教授お願いいたします。


特攻隊長まるるう  2004-09-25 04:54:25  No: 116497

SQL 文は"文"という言葉が使われている事から分かるように
データベースに渡して処理させる文字列の事です。
String 型で作成して下さい。VB 側で処理は行われません。
VB 側での型は何であっても、データベースが解釈できる構文
に従って、SQL 文という文章にしてデータベース様にお手紙
しなければなりません。お手紙は全て文字列でないといけません。

…ま、変数としてパラメータをくっつけることは出来ますが…
それは予備知識。


ボン  2004-09-26 08:32:41  No: 116498

特攻隊長まるるうさん。お返事有難うございます。

例えば
Dim a As Integer = 1
Dim b As integer = 2
Dim c As Integer = 0
c= a + b
OleDa = New OleDa("insert into テーブル名 set 列名 = '" + c + "'",OleCn)

というのがあったとしたときは、別のString型の変数例えばdを用意して
d = c として
"insert into テーブル名 set 列名 = '" + d + "'"
としないといけないんですか?
もしそうだとした場合、Integer型をString型へ変化する方法は
上記したd = cで問題ないのですかね?
何か関数みたいなのあるのでしょうか?
宜しくお願いいたします。


特攻隊長まるるう  2004-09-26 16:06:35  No: 116499

まず、文字列の連結には + は使わず、& を使うようにして下さい。
   OleDa = New OleDa("insert into テーブル名 set 列名 = '" & c & "'",OleCn)
ただし、上のコードもVBが実行時にInteger型をString型に暗黙の
了解として変換してくれてます。変数の型を意識してコーディング
する事は重要です。まずコードの1行目(ファイルの先頭)に
   Option Explicit On
と記述するクセを付けておくと良いでしょう。明示的な型変換(キャスト)
には関数があります。キャスト(Cast)の頭文字 C から始まる型変換関数
(CStr, CInt, CBool,…)です。String型へ変化するなら
   OleDa = New OleDa("insert into テーブル名 set 列名 = '" & CStr(c) & "'",OleCn)
と記述します。


ボン  2004-09-28 00:09:24  No: 116500

特攻隊長まるるうさん。
親切に教えていただき有難う御座いました。
無事に解決いたしました。

ちなみに文字列連結の際、
【+】でも【&】でも大丈夫というようなことを
どこかで読んだ気がするのですが・・・
【+】を使用するのは良くないのでしょうか?


特攻隊長まるるう  2004-09-28 00:39:18  No: 116501

ヘルプに載ってる事くらいは事前に目を通しておいて下さい。
[+ 演算子(オンライン)]より抜粋。MSDN(ヘルプ)にも同じものが載っているはずです。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vblr7/html/vaoprAdd.asp
>例
>+ 演算子を使って数値を加算する例を次に示します。+ 演算子を使用することによって、
>文字列を連結することもできます。ただし、どちらの用途なのかがあいまいになるため、
>連結には & 演算子を使用することを推奨します。


ボン  2004-09-28 18:36:34  No: 116502

特攻隊長まるるうさん。有難う御座います。
今後は自分でちゃんと調べてからご質問するように致します。

色々と有難う御座いました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加