- PR -

VB.NETでのmdbの操作について

投稿者投稿内容
ちぇび
常連さん
会議室デビュー日: 2005/12/26
投稿数: 28
投稿日時: 2006-01-17 11:26
今VB.NETのWindowsアプリケーションで
mdbに接続してデータを挿入する、ということをやっています。
使用しているコントロールは
OleDbConnectionとOleDbCommandです。
下のようなSQL文を書きました。
------------------------------------------------
insert into entry (entryno,code,machine) select
entryno = 1, code = 1, machine = member.machine
from member where member.code = 1"
------------------------------------------------
テーブルはentryとmemberの二つで、
entryの主キーはentryno、memberの主キーはcodeです。
memberのなかのcodeが1のものをentryに挿入、としたいのですが、
OleDbCommand.ExecuteNonQueryで、
-----------------------------------------------------------------
'System.Data.OleDb.OleDbException' のハンドルされていない例外が
system.data.dll で発生しました。
-----------------------------------------------------------------
というエラーになります。
同じ文をSqlConnectionとSqlCommandでSQLServerの接続でやってみると
問題なくinsertできたので構文は間違っていないと思うのですが・・。

このような状態を回避する方法がわかるかたいましたら
教えてください。
よろしくお願いしますm(__)m
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-01-17 11:37
引用:

ちぇびさんの書き込み (2006-01-17 11:26) より:

mdbに接続してデータを挿入する、ということをやっています。
使用しているコントロールは
OleDbConnectionとOleDbCommandです。
下のようなSQL文を書きました。



回答ではないのですが、mdb で挿入ということを試すのならば、もう少し単純な SQL に書き換えて実行してみてはいかがでしょうか?

コード:

insert into entry (entryno,code,machine) values(1,2,'pc名')" 


ちぇび
常連さん
会議室デビュー日: 2005/12/26
投稿数: 28
投稿日時: 2006-01-17 11:46
R・田中一郎さん、お返事ありがとうございます。
先にmemberテーブルからmachineをselectして
その後entryに入れる、ということですよね。
それでしたら簡単にできますよね。
ただ、SQLServer(VB6)で開発していたときは
insert selectを使ってできたので、
VB.NETでもできるかなーと思って試しています。
また何か情報があったら教えてくださいm(__)m
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-01-17 11:56
引用:

ちぇびさんの書き込み (2006-01-17 11:46) より:

先にmemberテーブルからmachineをselectして
その後entryに入れる、ということですよね。
それでしたら簡単にできますよね。
ただ、SQLServer(VB6)で開発していたときは
insert selectを使ってできたので、
VB.NETでもできるかなーと思って試しています。



すみません。
例外エラーの原因がどこにあるのかを特定するために、まずは簡単なものでで実行できることを確認してみたら良いんじゃないかな〜、と思っただけでした。
ちぇび
常連さん
会議室デビュー日: 2005/12/26
投稿数: 28
投稿日時: 2006-01-17 12:02
R・田中一郎さん、お返事ありがとうございますm(__)m
いえいえ、全然大丈夫です。
お返事いただけるだけでありがたいので。
で、valueではちゃんとできます。
また、さっきのinsert文でも、codeとmachineだけにすると
とりあえず動きはするんです。
ただ、値は-1になっていてなんだかおかしいんです。
また何か情報があればよろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-17 12:16
引用:

ちぇびさんの書き込み (2006-01-17 12:02) より:

また、さっきのinsert文でも、codeとmachineだけにすると
とりあえず動きはするんです。


そういう場合こそ、INSERT と SELECT を分けて、
SELECT だけで本当に正常に動作するのを検証すべきでしょう。
VALUES では出来るといっても、それは INSERT の検証でしかないです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-01-17 12:18
System.Data.OleDb.OleDbException
を捕捉して、その例外の原因を教えてください
ちぇび
常連さん
会議室デビュー日: 2005/12/26
投稿数: 28
投稿日時: 2006-01-17 13:29
じゃんぬねっとさん、お返事ありがとうございます。
>そういう場合こそ、INSERT と SELECT を分けて、
>SELECT だけで本当に正常に動作するのを検証すべきでしょう。
>VALUES では出来るといっても、それは INSERT の検証でしかないです。
そうですよね、いろいろと調べないまま
お返事してしまい、すみませんでした。助言ありがとうございます。
その後いろいろやってみました。
SELECTは問題ありません。きちんとmemberのcode=1のデータが取得できますし、
where文の指定なしや、*や一部のフィールドを取得、もできました。
INSERTですが、一番シンプルに、memberの主キーであるcodeだけを
INSERT SELECTしてみましたが、実際の値は1ですが(whereで=1としていますので)
-1が入ってきます。
SQLの構文自体は問題ないのでしょうか・・。
なにかmdbの時のSQLで注意することなどありますか??
これ以前にSQL文で全角のスペースが入っていたら動かないということがありました。
他にもなにか制限などありますでしょうか。

かるあさん、お返事ありがとうございます。
また質問になってしまって申し訳ないのですが、
捕捉、というのはどのようにするのでしょう??
VB.NETで動かしているとき、エラーの内容がわかりづらく、
どこが悪いのか探すのに手間取っています。
何かエラーの詳しい内容がわかるやりかたがあるのでしょうか。

たびたびすみませんが、
またなにか情報がありましたらよろしくお願いしますm(__)m

スキルアップ/キャリアアップ(JOB@IT)