2009-05-13 18 views
2

フォームを使用して共有ドライブのAccessデータベースにPDFファイルを保存する必要があります。私はテーブル(OLEオブジェクトフィールドを使用して、その後、ドラッグアンドドロップ)でこれを行う方法を考え出しましたが、保存ボタンがあるフォームでこれを行いたいと思います。保存ボタンをクリックすると、リンクだけでなくファイルもデータベースに保存されます。これを行う方法に関するアイデア?フォームを使用してMS AccessデータベースにPDFを保存する

EDIT: 私はAccess 2003を使用していますが、DBは共有ドライブに格納されるため、ファイルへのリンクが問題を解決するかどうかはわかりません。

+0

PDFをOLEフィールドに保存することは間違いありませんか? Accessのバージョンは言いませんが、2007年以前はこれには大きなオーバーヘッドがありました。言及されていないいくつかの要件がない限り、ファイルシステムにファイルを格納し、パス/ファイル名をデータテーブルのテキストフィールドに入れるだけです。 –

+0

このデータベースには共有ドライブからアクセスできます。だから私が理解しているように、ファイルシステムは異なって見えるでしょう(ユーザーが私たちの共有をマップしたドライブに基づいて)。これがリンクを使用していなかった理由です。この制限を避けることができれば、明らかに、ファイルを完全に格納する代わりにリンクを使用したいと思うでしょう。 –

+1

これは古いスレッドですが、私の質問に対するMatthewの応答は一度も言いません。それには、マップされたドライブを使用せず、UNCパスを使用してください。サーバー名が変更されたり、共有マッピングが変更されない限り、常に同じになります。これらの事のいずれかが起こった場合、ドライブのマッピングはとにかく無効になります。 –

答えて

0

おそらく、これは役に立ちます:ACC2000: Reading, Storing, and Writing Binary Large Objects (BLOBs)

説明:ファイルをチャンクで読み取り、VBA関数を使用してBLOBに追加します。

+0

私はアクセスとVBAに本当に新しい(<1週間)ので、これは私にとってはひどく複雑です。私はそれが私が望むことをすると思いますが、そこには何か簡単ですか? –

0

OLEオブジェクトのフィールドは、デフォルトでフォーム上のバウンドオブジェクトフレームを使用します。それを右クリックすると、オブジェクトを挿入できます。これは、ファイルの参照を完了しています。フィールドをダブルクリックすると、実際の文書が開きます。

デビッドのアドバイスとリンクをお勧めします。 1つのファイルを転送する必要がなく、すべてのPDFが含まれている必要がある場合を除きます。サイズとパフォーマンスが問題になります。

セキュリティが問題でアクセスファイルが唯一のコントロールである場合(リンクされたすべてのファイルを含むフォルダにセキュリティを設定できない場合)、埋め込む必要があります。

2

数千ものドキュメント(pdf、doc、jpg、...)を含む数種類のデータベースがあり、全く問題はありません。 Accessで、我々はバイナリフィールドにバイナリオブジェクトをアップロードするには、次のコードを使用します。この場合、

Function LoadFileFromDisk(Bestand, Optional FileName As String = "") 
    Dim imgByte() As Byte 
    If FileName = "" Then FileName = strFileName 
    Open FileName For Binary Lock Read As #1 
    ReDim imgByte(1 To LOF(1)) 
    Get #1, , imgByte 
    Close #1 
    If Not IsEmpty(imgByte) Then Bestand.Value = imgByte 
End Function 

、Bestandは、バイナリデータを含むフィールドです。 私たちはバックエンドとしてMS SQL Serverを使用していますが、Accessバックエンドでも同様に動作します。

+0

@birger 提案していただきありがとうございます。私はこのコードを実装しようとしましたが、VBAの初心者であるため、私の人生では実装方法を理解できません。たとえば、「#1」とLOFの名前が意味するものを説明できますか? –

+0

ファイルが開かれ、番号(#1)が割り当てられます。 imgByteはバイト配列です。この配列のサイズは、ファイル1:LOF(1)の長さに設定されます。 GET関数はファイルを読み込み、imgByteに格納します。この時点で、imgByteはイメージファイルを表すバイトの配列です。 Bestandフィールドの値がこの配列に設定され、voila:ファイルがフィールドに格納されます。 – Birger

+0

終了注意:このメソッドはOLEラッピングをファイルに追加しないため、これはOLEフィールドにオブジェクトを格納する以外の方法です。 – Birger

1

イメージデータ型(またはvarbinary(max))内にPDFを格納するSQL Serverにアップコンバートした場合、フルテキスト検索を使用してPDF内を検索できます。

私は、あなたがIFILTER製品を登録できるファイルタイプでこれを行うことができると言います。私はちょうど先日Adobeのウェブサイトにいたので、AcrobatのIFILTERは無料です。

+0

非常に興味深い!しかし、これは、@ birgerの答えのようなブロブとしてではなく、OLEとして保存されたオブジェクトでのみ動作すると思いますか? –

+0

AccessのOLEはSQL Serverのblobと同じです。BLOBは基本的にIMAGEデータ型かvarbinary(max)などのどちらでも同じです –

+0

ありがとうございます。記憶に同意しますが、 "as OLE"を保存すると、可能なクライアントに関する情報、形式の説明、プレビューなど、エンベロープにドキュメント(またはドキュメントの一部) iFilterがその仕事をするためにOLE enveloppeが必要なのかどうか疑問に思っていましたか? –

関連する問題