DBからの値取得について

解決


いく  2005-03-11 02:28:09  No: 88803

DB:SQL Server2000
VB:6.0

SELECT文によりレコードセット(rs)された項目の値を取得する方法として
1  rs("MAKER_CD")
2  rs.Fields("MAKER_CD").Value
3  rs("MAKER_CD").Value
といった方法があると思うのですが、
どれが一番正しいですか?


Say  2005-03-11 03:09:50  No: 88804

最近どっかに書いたばかりのような気がしますが・・・(^^;

いずれも省略形として機能しますから、とりあえずすべて正解です。
ただ、省略形はなんらかの原因でうまく機能しないことがあります。

ちなみにDAOの場合の非省略形は
rs.Fields("MAKER_CD").Value

ADODBの場合の非省略形は、
rs.Fields.Item("MAKER_CD").Value


いく  2005-03-11 03:20:27  No: 88805

ありがとうございました。
ちなみに、うまく機能しない例など
ご存知でしたら教えてください。


那岐  2005-03-11 03:23:05  No: 88806

私は2番目を使ってます。3番目はあまり見ませんが1番目は中堅〜古参のプログラマがよく使っているように感じます(あくまで私の主観です)
コーディングの様式は会社や組織ごとで異なりますのでそちらで決められた様式があればそれで記述することをお勧めします。コーディング様式が統一されていないと非常にメンテナンスしにくいですし。

#1番目は何度かエラーを体験したので個人的にあまり好きじゃないです。
#ADOの非省略形を初めて知りました。Itemってなんの意味があるんだ?とずっと思ってましたので(恥)勉強になりました(^^;


魔界の仮面弁士  2005-03-11 03:51:27  No: 88807

すでにSay さんからの回答がありますが、
  rs.Fieds.Item("MAKER_CD").Value
が、省略していない正式な表記です。
他の記述は、「規定のプロパティ」を省略した表記法です。

規定のプロパティを省略すると、型の解釈に時間がかかり、パフォーマンス面で不利になります。

なお、1番の表記の場合、結果が「Field型」になります。
  Debug.Print TypeName(rs("MAKER_CD")) 

たとえば
  rs("MAKER_CD") = 123
のようなコードを書いた場合、Field型の規定のプロパティであるValueプロパティに対して操作が行われます。
  rs("MAKER_CD").Value = 123

Valueを省略して、値を直接 取得/設定する事は、ミドルウェアによっては、まれに誤動作を起こす事が報告されていますので、パフォーマンスの面を切り離して考えても、個人的にはあまりお勧めしません。
Valueプロパティは、できるだけ省略しない方が良いでしょう。

個人的には、上記の2番の書き方をお勧めしますが、ADOの場合は、
  rs.Fields("MAKER_CD").Value = 123
の代わりに、
  rs.Collect("MAKER_CD") = 123
と書いても、ほぼ同等のパフォーマンスを得る事ができますので、Collectプロパティを使ってみるのも良いかもしれません。

実際にどれを使うべきかは、下記を参考に考えてみてください。
http://www.gj.il24.net/~nakasima/vb/tech/style/index.htm

ちなみに、大昔に計測した限りでは、Value無しの時に一番高速となる「rs.Fields.Item("MAKER_CD")」の表記法でさえ、Value付きで一番低速である「rs!MAKER_CD.Value」の表記法より、20%ほど遅かったです。
http://www.ocv.ne.jp/~oratorio/windev/vb/DefPropTest.lzh


いく  2005-03-11 04:40:56  No: 88808

みなさん、どうもありがとうございました。
早速、メンバーで話し合って決定したいと思います。


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

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






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