最近新規で導入したデータベースのお話
当初顧客がExcelで作成されていたデータベースっぽいものを
フロントエンドをAccess、バックエンドをSQL Server Expressでデータベース化して納品した
顧客もAccessなら多少触れるらしく、納品後は顧客側で項目の追加などの仕様変更を行ってたらしい
が、今日いつものようにデータベースの更新を行ったところ、メインのデータ更新時に
他のユーザーが同じデータに対して同時に変更を試みているので、プロセスが停止しました。
上記エラーが発生し更新ができなくなったらしい
以下確認内容および対処内容
とりあえず今日行った更新内容を確認
曰く「nvarchar型のフィールド1つ」と「bit型のフィールド2つ」をSQL Server Expressで追加し
Access側でそれを更新する処理を追加したらしい
確認してみるとAccess側でリンクテーブルを編集すると上記エラーが発生し
(新規追加では発生しない、更新・削除時のみ)
SQL文を使用して更新すると発生しない…
これは主キーの設定がされてないんじゃない?と思ったが、ちゃんと重複のないフィールドが主キーに設定されていた
じゃあ今日の更新分をロールバックだ、と本日追加された3フィールドを削除して再確認…更新可能になりました
それなら1個づつフィールドを追加して確認だ!と思ったところ、bit型フィールドを追加するとエラーになることが分かりました
その後AccessテーブルとSQLテーブルを比べっこすること30分余り
Accessではbit型(YesNo型)フィールドに「0」が初期値で入力されているが、SQLでは「NULL」になっている…
これが原因かな?とAccess側からSQL文を使用して上記bit型フィールド2つのすべてに「0」を上書き
結果Accessから更新できるようになりました
SQL上、bit型には「0」か「1」しか存在できないのに「NULL」が存在したことが原因のようです
(SQL Expressから参照すると「True」と「False」だけど)
だったらSQLでフィールド追加時に標準で「NULL」を放り込むようなマネはやめて頂きたい…
ところでAccessでいうYesNo型はSQLでいうbit型で合っているのかいまだに疑問です
Access2012で削除されてしまったアップサイジングを使用するとbit型になるので今まで考えないようにしてましたが
どうみてもAccess側では「0」と「-1」なんですよね…
助かりました。ありがとうございます!