2012年4月17日火曜日

[ACCESS→SQLServer]ACCESS→SQLServerとACCESSの違い

From Evernote:

[ACCESS→SQLServer]ACCESS→SQLServerとACCESSの違い

ACCESSのデータテーブルをSQLServerに移管して、そのまま使用する…
と、マクロで色々不都合が起こります。
覚えてるだけまとめてみました。(ACCESS2003での検証です)

--------------------------------------------------------


①主キーは必須。
主キーがないと更新にいけなくなる。
ACCESSの時主キー設定されてなかたのならつける必要がある。



②Yes/No型→bit型にした時の扱い。
クエリを介そうがマクロ直指定だろうがとにかくFalseで問題が起こる。
クエリ、マクロ共々修正の必要がある。
   詳しくは



②date型の扱い。
"yyyy/mm/dd"の型かどうかに注意。
  -------------------------------------------------
  ○ACCESS→" ~WHERE #2012/12.01#" OK
  ○SQLServer→" ~WHERE #2012/12.01#" NG!→yyyy/mm/dd型に!
  -------------------------------------------------
クエリーを介している場合は問題ないみたいなのだが、 
  マクロで直接上記のようにしてSQL文を投げている場合は修正の必要がある。
ちなみに、
dim Mydate : Mydate = "2012/12.01" として
Mydate = Cdate(Mydate)
  としてやれば
Mydateは"2012/12/01"と扱われるみたい。



③既定値の扱い。
 テーブル項目の既定値=0としていれば、勝手に0が入るだろ…と思うんですが注意。
  -------------------------------------------------
 RS!単価 = Form!単価 のような時に…
  ○ACCESS→
 Form!単価 = "" なら → 既定値0が入る
 Form!単価 = Null なら → 既定値0が入る
 Form!単価 = 3 なら → 3が入る
  ○SQLServer→
 Form!単価 = "" なら → ""が入る
 Form!単価 = Null なら → Nullが入る
 Form!単価 = 3 なら → 3が入る
  -------------------------------------------------
結構異なってくる。特に勝手にNullが入られるのは…困る…。


④1桁だけ抜き出してそれを他のテーブルとJOINする場合。
例えば
 -------------------
  Left(管理区分,1) = 親管理No (両方数値の場合)
 -------------------

  という風に結合していた場合、何故かNG。
Leftを使うことで1度文字列とみなす為かな?

-------------------
  val(Left(管理区分,1) = val(親管理No)
  -------------------

  としてやらなければダメ。
他にもあまりにも複雑なSQL文だとエラーを起こす模様…。

0 件のコメント:

コメントを投稿