アクセスのエラー「#Deleted」の解決

Microsoft社のデータベースアプリケーションからODBC接続でMySQLのデータベースを読み込もうとした際に、目的のデータベースによっては「#Dleted」というエラー文字がフィールド全面または一部のレコードに表示されることがあります。

初めてこのエラーに出くわすと、どういう意味か分からず戸惑ってしまい、ますますAccessが難解なものになってしまいかねません。

ODBC接続で出るAccessのエラーは

Accessの「#Deleted」エラーを解決するに当たって知っておかなければならないのは、Microsoftは「SQLサーバー」という自社製の商品を扱っていて、AccessからのSQL接続は「MS_SQL_Server」を第一に想定していると考えたほうが良いと言うことです。

なので、MySQL(MariaDB)へのODBC接続が安定しないからといって完全な解決には至らないことがあるということを心得ておいた方が、あとあと精神衛生的に良いことでしょう。

以上のことを踏まえた上で今回のエラー「#Deleted」について考えてみます。

データ型の不適合を考える

#DEletedエラーについて調べてみると、このエラーはどうやらMySQLのデータの読み込みに失敗したときに出るものらしいということです。

そこで、ふと思いついたのがサーバー側でデータ型を修正してみるということでした。

flot型をdouble型に変更、あるいはその逆を試してみるなどです。

データベースを扱うに当たっては、初心者を気をくじけさせるほどの多種のデータ型が存在します。

データの保存や運用に問題がなければ、これらの型を類似する型に変更してみることで「#Deleted」エラーを消すことができました。

ほかには、サンプルで作成したテーブルに主キーを設定していなかったために、やはり#Deletedが表示されたというのがありました。

テーブルの連結がなければ主キーは必要ないかと思って作ったサンプルデータでしたが、おかしなところで引っかかった例です。

これはたまたまなのか、主キーがないと出るのかわかりません。

ほかに、ネットで調べてみると#Deletedエラーは「パススルークエリ」を書いて対処するというのがありましたが、まずパススルークエリという用語そのものが不明でしたので対処例そのものをスルーさせていただきました。

MSのSQLでも出るらしい

ところで、この#DeletedはAccessからMS_SQLサーバーへ接続した際にも表示される場合があるようで、この特定の条件をMicrosoft側が仕様上起こる問題として把握しているそうです。

アプリケーション側でODBC呼び出しの際に、SQLサーバーのデータ精度との間に不一致があるとか、そんな感じのエラーのようでした。

今後も、このエラーが発生したときは、こうした情報をヒントにエラーの原因を探ることになりそうです。