none
FileStreamに保管したファイルをAccessのフォームから操作したい RRS feed

  • 質問

  • 例題
    商品の取り扱い説明書(PDF)や画像のファイルを管理したいので、データベース化を検討する。
    例えば、商品名を入力したら、商品の写真と共に取扱説明書を参照できるようにする。

    そこで、検討する。
    1.個人用の小規模システムならAccessの添付ファイル型で実現できる。
    2.複数人で共有するので、Accessに格納するはやめてSQLServerに格納することにする。
    3.更にCADデータ等の大容量のファイルを格納する可能性があるのでFileStream
     で表領域の外部に保管することにする。

    と、ここまでは良いのですが、
    さて、GUIの構築法が分からず困ってしまった。

    4.最小限の手間でリッチなGUIを提供したいです。
    5.Accessに格納することはあきらめましたが、AccessのフォームのリッチなGUIは魅力です。
     また、Office365ユーザーであれば、追加投資が不要なのも魅力です。

    さて、

    質問1
    SQLServerのFileStream属性とAccessのフォームを組み合わせて例題のような
    データベースを構築することは可能でしょうか?
    SQLServerのFileStream属性がAccessの添付ファイル型にコードレスでリンクできて、
    面倒なことは考えなくて済むのであれば理想的ですが、可能ですか?
    あるいは、低レベルのコード(SQL等)をスクラッチで多量に記述する必要がありますか?

    質問2
    FileStream属性を使用する場合、トランザクション処理やエラー処理に特別な配慮やスキルが必要ですか?
    外部に置いてあるファイル操作に失敗したり、整合性をチェックに労力がかかりますか?

    C#開発者

    2020年7月15日 10:28

回答

  • MicroVAXさん、こんにちは。フォーラムオペレーターのKumoです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    SQL Serverでは、BLOB を、データをテーブルに格納する標準の varbinary(max) データとして使用することも、データをファイル システムに格納する FILESTREAM varbinary(max) オブジェクトとして使用することもできます。
    データベース ストレージとファイル システム ストレージのどちらを使用するかは、データのサイズと用途によって決まります。 
    次の条件が true の場合は、FILESTREAM を使用することを検討する必要があります:
    ・格納するオブジェクトの平均的なサイズが 1 MB より大きい。
    ・高速な読み取りアクセスが重要とされる。
    ・アプリケーション ロジックに中間層を使用するアプリケーションを開発している。
    比較的小さなオブジェクトの場合は、 varbinary(max) BLOB をデータベースに格納する方が一般に高いストリーミング パフォーマンスが得られます。
    詳しい情報はこの記事をご参照ください。

    Accessについては、ご質問は開発に関連しているように見えるのですが、適切なフォーラムをご投稿いただくことをご検討ください。
    あるいは、次のスレッド(英語となりますが)をご参照、ご確認のほどお願いします。
    Using access 2010 as a frontend to SQL Server database
    Using Microsoft Access program to upload images to be stored in SQL Server database

    どうぞよろしくお願いいたします。 

    MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    • 回答としてマーク MicroVAX 2020年7月30日 7:52
    2020年7月21日 8:59
    モデレータ
  • SQL Server 2012より、FileTableという機能が追加されました。これはFileStreamをベースに開発され、扱いが容易になっています。
    実際、私もPDFの格納のために使用した経験があります。
    stream_idがキーとなり、例えば以下のSQLでファイルのフルパスを取得することができます。

    select file_stream.GetFileNamespacePath() FileNamespacePath, FileTableRootPath() FileTableRootPath,
    FileTableRootPath() + file_stream.GetFileNamespacePath() フルパスファイル名
    from FileTable1 t
    where stream_id = @stream_id;
    Accessの添付ファイル型というのは私はわかりませんが、FileTableを扱うSQLは上記のように簡単です。

    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    • 回答としてマーク MicroVAX 2020年7月30日 8:00
    2020年7月22日 1:20

すべての返信

  • MicroVAXさん、こんにちは。フォーラムオペレーターのKumoです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    SQL Serverでは、BLOB を、データをテーブルに格納する標準の varbinary(max) データとして使用することも、データをファイル システムに格納する FILESTREAM varbinary(max) オブジェクトとして使用することもできます。
    データベース ストレージとファイル システム ストレージのどちらを使用するかは、データのサイズと用途によって決まります。 
    次の条件が true の場合は、FILESTREAM を使用することを検討する必要があります:
    ・格納するオブジェクトの平均的なサイズが 1 MB より大きい。
    ・高速な読み取りアクセスが重要とされる。
    ・アプリケーション ロジックに中間層を使用するアプリケーションを開発している。
    比較的小さなオブジェクトの場合は、 varbinary(max) BLOB をデータベースに格納する方が一般に高いストリーミング パフォーマンスが得られます。
    詳しい情報はこの記事をご参照ください。

    Accessについては、ご質問は開発に関連しているように見えるのですが、適切なフォーラムをご投稿いただくことをご検討ください。
    あるいは、次のスレッド(英語となりますが)をご参照、ご確認のほどお願いします。
    Using access 2010 as a frontend to SQL Server database
    Using Microsoft Access program to upload images to be stored in SQL Server database

    どうぞよろしくお願いいたします。 

    MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    • 回答としてマーク MicroVAX 2020年7月30日 7:52
    2020年7月21日 8:59
    モデレータ
  • SQL Server 2012より、FileTableという機能が追加されました。これはFileStreamをベースに開発され、扱いが容易になっています。
    実際、私もPDFの格納のために使用した経験があります。
    stream_idがキーとなり、例えば以下のSQLでファイルのフルパスを取得することができます。

    select file_stream.GetFileNamespacePath() FileNamespacePath, FileTableRootPath() FileTableRootPath,
    FileTableRootPath() + file_stream.GetFileNamespacePath() フルパスファイル名
    from FileTable1 t
    where stream_id = @stream_id;
    Accessの添付ファイル型というのは私はわかりませんが、FileTableを扱うSQLは上記のように簡単です。

    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    • 回答としてマーク MicroVAX 2020年7月30日 8:00
    2020年7月22日 1:20
  • ご回答ありがとうございます。

    FileStreamが活用できないか検討してみようと思います。

    Accessについては、別サイトで調べてみようと思います。

    リンク先参考になりました。


    C#開発者

    2020年7月30日 7:59
  • ご回答ありがとうございます。

    FileTable 機能は知りませんでした。こちらも調べてみようと思います。


    C#開発者

    2020年7月30日 8:01