パソコン情報

【Access】【Sqlserver】ファイル添付機能をFILESTREAMで実装なんてできない!?別方法で実現

マイクロソフトデータベースアクセス(以下Access)のテーブル設定時に、「ファイル添付」という型があるのに対して、Sqlserverには無い。

自分のようにスキルが無くて、UI(ユーザーインターフェイス)の部分をAccessで作り込み、データベースの部分をSqlserverで止むを得ず運用している人もいるかと思います。

ココがダメ

ファイル添付機能を実装するのに本当に苦労した内容

になります。

 

Accessのファイル添付型をSqlserverに連携できない

結論からいいますと、

ココに注意

ファイル添付型はSqlserverには使えない

Sqlserver側では、varbinary(MAX)フィールド設定にして、データの受け渡しをさせようとしましたが、Access側でうまく添付ファイルとして読み込ませることができません。

クエリなどでAccessのファイル添付型を処理させる時、添付ファイル以外に、5フィールドテーブル上では見えないフィールドが隠れているようです。※FileData、FileName、FileType、FileFlags、FileTimeStamp

その隠れているフィールドもSqlserverで連携しようとするとクエリやVBAではエラーが出てレコードの追加ができません。

つまり使えないってことです。

 

そんな事をしないで添付ファイルだけを、Sqlserverの、varbinary(MAX)フィールドにぶち込めばいいんじゃないかと考えやってみましたが、

ココに注意

動作が激重になり使い物になりません!

 

つまり、添付ファイルをデータベースに入れ込むことはやっちゃダメだってことです。

 

FILESTREAMというSqlserverの機能も使えない

https://pctips.jp/server/sqlserver-filestream/

過去の記事にもあるように、さんざん時間を費やしてファイル添付機能は実現しませんでした。

気を取り直して、本当にシンプルな構成で実験(このサイト参考)してみましたが、AccessのVBAで動かすと理解できないエラーになって先に進めませんでした。

やっぱりダメそうです。

 

 

この方法でファイル添付機能を実装

色々と頑張りましたが、AccessとSqlserverを使ってファイル添付機能を実装することは自分には不可能だという事で終結させることにしました。

さらに詳しく

でも、人間からは、いかにもAccessの仕組みのように思わせたい!

 

そこで、ファイル添付機能の部分は、WEBサーバーを使って別サーバーとインターネット網を使う事にしました。

プログラムの方は、Kent-web様のファイルアップローダーを使わせてもらいました。

この仕組みは、CGIというプログラムを使って、WEBサーバーにファイルをアップロードしたりダウンロードしたりすることができるものです。

通常なら、IntarnetExplolerやEdge、Chromeなどのウエブブラウザを使って使うような感じになります。

 

ここで、いかもにAccessの仕組みの一つのように思わせることができ方法が、WEBブラウザコントロールってのがありました。

 

つまり、Accessのフォームにブラウザ画面が埋め込める機能ですね。

 

 

ファイル添付(ファイル共有)部分がAccessとSqlserverと関係なくなってしまいまいたが、この方法なら、あたかもAccess内で動いているように使えるので欲しい機能が実現したことになります。

 

なんでも、WEB上でデータベースも扱う時代になってきていますので、Access+Sqlserverという組み合わせも時代遅れなのかもしれません。

スキルを向上させたい・・・(´;ω;`)ウゥゥ