From Evernote: |
[ACCESS→SQLServer]ACCESS→SQLServerとACCESSの違い |
ACCESSのデータテーブルをSQLServerに移管して、そのまま使用する…
と、マクロで色々不都合が起こります。
覚えてるだけまとめてみました。(ACCESS2003での検証です)
--------------------------------------------------------
①主キーは必須。
主キーがないと更新にいけなくなる。
ACCESSの時主キー設定されてなかたのならつける必要がある。
②Yes/No型→bit型にした時の扱い。
クエリを介そうがマクロ直指定だろうがとにかくFalseで問題が起こる。
クエリ、マクロ共々修正の必要がある。
詳しくは
"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 件のコメント:
コメントを投稿