こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLServerでのSQL文に関して(Accessより)

SQLServer2005とAccess2000で改修をしています。
共にADO接続をしています。

下記のように単純にUPDATEしているSQLがあるのですがエラーとなります。
フラグAはAccess側から見るとYes/No型
SQLServer2005から見るとビット型です。
(DB.Excute (UPDATE tblテーブル名 SET フラグA = Yes WHERE ID = 1))
エラーはメッセージが出るわけではなく、更新が決定されないというか…
デバック自体は何も言われず通るのですが

当処理記述のMDBを閉じた後、下記SQLにてリスト表示させると
SELECT IIF(フラグA = NO, '','済') FROM tblテーブル名
WHERE フラグA = NO
とすると'済'とは表示されないID=1のレコードが抽出されます。

Access側からリンクテーブルを開き
当レコードのフラグAを手で変更しようとすると
「データの競合」メッセージが表示され「レコードの保存」ボタンの押下は不可です。
見えるレコード値は「0」です。

結局試行錯誤の結果
UPDATE tblテーブル名 SET フラグA = -1 WHERE ID = 1
とすることでSELECT結果は正常となったのですが
原因と、解決方法が適切かがわかりません。

改修中のプログラムは、Yes/No、True/False、-1/0の記述が混在していて
今までYes/No型やビット型、Accessを使ったことがないのでさっぱりです。。

ちなみに現システム使用環境はSQLServer2000とAccess2000/2003です。
普通に動いているようなので、勝手に既存SQLを変えてもいいものか、
むしろSQLServerのバージョンを変えることで変えなければならないのか
判断できたらいいなと思っています。

すいませんが、よろしくお願いいたします。

投稿日時 - 2009-02-11 10:02:57

QNo.4707567

困ってます

質問者が選んだベストアンサー

まず、確認しておきたいことがあります。
SQLServer2000とAccess2000/2003間をデータリンクで結び、フロントエンドとしてAccessを使用しているということでよろしいでしょうか?
質問は、
DB.Excute (UPDATE tblテーブル名 SET フラグA = Yes WHERE ID = 1))
ではエラーはでないが、更新を確認できない。
その理由と解決方法が知りたい。
ということですね。

理由はYes/No型はBool型ですので、True(-1)かFalse(0)でしか値の更新などはできないはずです。
解決方法はmini0524さんが辿り着いた通りにBool型でアクセスすることです。
既存のシステムは正常に動いているとのことですが、別にロジックが隠れているか、または正常に動いてると思い込んでいるだけかもしれません。

参考URL:http://office.microsoft.com/ja-jp/access/HA100964501041.aspx

投稿日時 - 2009-02-11 13:48:30

お礼

さっそくの回答ありがとうございました。
お礼が遅くなってしまい申し訳ありませんでした。

質問事項はご確認いただいたとおりです。
参考に記していただきましたURLも読ませていただきました。
大変参考になりました。
既存の動作確認を再度して改修の判断をしたいと思います。

ありがとうございました。

投稿日時 - 2009-02-12 21:17:52

ANo.1

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問