- PR -

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

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-17 14:12
引用:

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

INSERT SELECTしてみましたが、実際の値は1ですが(whereで=1としていますので)-1が入ってきます。


例外うんぬんの前にこれがおかしいですよね。

引用:

insert into entry (entryno,code,machine) select
entryno = 1, code = 1, machine = member.machine
from member where member.code = 1"


これって、= で評価された結果が -1 になって挿入されてませんかね?

コード:

INSERT INTO Entry(EntryNo, Code, Machine)
    SELECT 
        M.EntryNo, M.Code, M.Machine
    FROM
        Member M
    WHERE
        M.Code = 1


こうではないのですか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ちぇび
常連さん
会議室デビュー日: 2005/12/26
投稿数: 28
投稿日時: 2006-01-17 14:17
じゃんぬねっとさん、お返事ありがとうございます。
>これって、= で評価された結果が -1 になって挿入されてませんかね?
そうなんです、
挿入すると、-1になってしまっています。
そうですか、書き方がおかしいんですね。
すみません、VB6・SQLServerの時は、
さっきのように書いて動かしていたので、
mdbでも同じようにできるのだと思っていました。
ご指摘ありがとうございましたm(__)m
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-17 14:23
引用:

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

すみません、VB6・SQLServerの時は、
さっきのように書いて動かしていたので、


私も SQL 云々はかなり疎いんですが、これって正しい結果が挿入されてましたか?
どういう意味で「左辺値」を書いているんですか?
WHERE 句に書く内容と混同していませんか?

試しに、「= 5」としてみてください。
Member.Code = 1 で抽出していますから、今度は「1 = 5」ということになり、
Entry.Code には -1 以外の値 (多分 0) が挿入されるようになりませんか?

可能であれば、SQL Server で動いていたステートメントを再度確認して頂けませんか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ちぇび
常連さん
会議室デビュー日: 2005/12/26
投稿数: 28
投稿日時: 2006-01-17 14:36
じゃんぬねっとさん、お返事ありがとうございます。
そうですね、ちょっと今回の場合、
わかりやすいようにentryno=1,code=1と書きましたが、
これはおかしいですよね。
実際にはテキストに入力したコードを使う予定でいます。
SQLServerなんですが、一番初めの投稿で書いたのですが、
あのSQLでSQLServerでなら通るんです。
私が普段書いているのは
--------------------------------
insert into table select
code = a.code,
name = a.name,
flg = '1'
from subtable as a
where a.code = 1
--------------------------------
みたいな感じで、
(これが正しいのかわかりませんが、通用しています)
tableのすべての列に挿入する場合は
selectの前の列挙を省略して左辺を書いています。
ある列だけに書くような時は列の列挙をしてから
同じように左辺を書いているんです。
また固定の値(この場合はフラグの1)も使います。
きっと普通はこういうやりかたはしないんでしょうね

もう少しいろいろ自分で調べて勉強してみます。
いろいろとアドバイスいただきありがとうございましたm(__)m
ちぇび
常連さん
会議室デビュー日: 2005/12/26
投稿数: 28
投稿日時: 2006-01-17 14:51
最後に、ですが、
みなさんお返事ありがとうございましたm(__)m
じゃんねっとさんに指摘していただいたように、
フィールド名=データという風に
select内を書くのをやめたところ、
ちゃんと更新できました。
また固定値の更新も同じようにできました。
たくさんのアドバイスありがとうございました(*^-^)v
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-17 14:53
引用:

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

これはおかしいですよね。
実際にはテキストに入力したコードを使う予定でいます。


今回、それでやっても -1 とか 0 が入ってくるような気がします。

引用:

私が普段書いているのは
--------------------------------
insert into table select
code = a.code,
name = a.name,
flg = '1'
from subtable as a
where a.code = 1
--------------------------------
みたいな感じで、


SQL Server の場合、a.code の値が code に入り code が挿入される。
今回の場合は、左辺値と右辺値の評価結果が生成されて、それが挿入される。
... のかなぁ。(^^;)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-01-17 14:53
引用:

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

わかりやすいようにentryno=1,code=1と書きましたが、
これはおかしいですよね。
実際にはテキストに入力したコードを使う予定でいます。
SQLServerなんですが、一番初めの投稿で書いたのですが、
あのSQLでSQLServerでなら通るんです。
私が普段書いているのは
--------------------------------
insert into table select
code = a.code,
name = a.name,
flg = '1'
from subtable as a
where a.code = 1
--------------------------------
みたいな感じで、
(これが正しいのかわかりませんが、通用しています)



便乗して質問させて下さい。
select 以降の式の = は代入を意味するのですか?
じゃんぬねっとさんの回答を見る限りだと、比較の = として評価されると言う意味だと解釈したのですが。
代入の = だとすると

引用:


insert into entry (entryno,code,machine) select
entryno = 1, code = 1, machine = member.machine
from member where member.code = 1"




この

machine = member.machine

は、自分自身に値を入れることになるのか、entry テーブルに値が入ることになるのかが明確にならないといけないですよね。

そして更にちぇびさんの仰っていることから、sqlサーバーとoledb の動作結果が異なることになってくる訳で・・・

一体、どっちなんだろう?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-17 14:57
おっと、入れ違い...

引用:

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

じゃんぬねっとさんに指摘していただいたように、フィールド名=データという風に
select内を書くのをやめたところ、ちゃんと更新できました。


やはり、そこが原因でしたか。

で、時間さえ許されるのであれば、SQL Server でも同じ構文で書いてみて頂けませんか?
正しく更新されると思います。

# 代入構文を使うとマギラワシス。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

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