4

Access 2010 に添付ファイル フィールドがあることを最初に発見したとき、私は非常にうれしく思いました。これは、私の内なるデータベース純粋主義者を美的に苛立たせる機能ですが、私の内なる怠け者がここで担当しており、一見すると、次のいずれかを作成できるように見えます。私の現在のプロジェクトははるかに簡単/単純です。幸いなことに、フォームとレポートに画像/アイコンが自動的に表示されますが (なぜ常にあるのですか?) 最初のものしか表示されず、それらすべてを表示する必要があります。

もちろん、添付ファイルを 1 つずつスクロールすることもできますが、MS-Access でプロジェクトを完了するように依頼されたにもかかわらず、クライアントはそれを着用しないと確信しています。表示:/しかし...

間違っているかもしれませんが、MS-Access の経験はほとんどありません。私のコーディングの背景はしっかりと LAMP スタックと Web であるため、Windows/Access エコシステムで提供されているものについてはまったく知りません。非常に柔軟なレイアウトを提供する優れたサードパーティのレポート ツールがあると思いますが、レポートだけでなく、フォーム上のすべての添付ファイルを確認する必要があります。

というわけで、やみくもに虚無に突っ込む私の最初の戦略はこれです...

各フィールドが単一のアイテムのみを含む「添付ファイル」である、添付ファイル用の個別のテーブルを作成します。次に、フォームとレポートでスクリプトを使用して...

  1. 問題のレコードに属するすべての添付ファイルについて、そのテーブルをクエリします
  2. これらのフィールドをある種のリストとして表示/フォーマットします
  3. そのリストの最後に新しい添付フィールドを動的に追加して、ユーザーが次の添付ファイルをアップロードする場所を確保できるようにします
  4. 添付ファイルが追加されるたびにフォーム ページが更新されるようにして、空きファイルをなくします。

それで、私の質問は...

  1. 私が説明したことは Access で実現可能ですか?
  2. はるかにシンプル/より優れた/標準的なソリューションがありませんか?
  3. Access のスクリプト言語は、表示に関してどの程度強力ですか? つまり、不格好ですか、それともピクセルパーフェクトですか?
  4. まだ Visual Basic じゃないですか。(いいえ! ;)
  5. もしそうなら、フォーム/レポート内で使用できる他のスクリプト言語はありますか?

申し訳ありませんが、私はそれが少し長い毛むくじゃらの質問であることを知っていますが、私はここで水を得た魚です!

ありがとう、

ロジャー

4

2 に答える 2

8

添付ファイル付きのテーブルがあるとしましょう:

アタッチメントテーブル

表示したい添付フィールドの 1 つに 3 つの画像があるとします。クエリを作成できます:

添付クエリ

その後、連続フォームを作成できます。

添付フォーム

于 2012-12-16T19:40:33.280 に答える
0

これで同様の問題を検索しました。フィールドごとに複数の添付ファイルがあります。プロパティからフォームにフィールドをドラッグして作成した 2 つのイメージ コントロールの .jpg と .pdf を格納するために、フィールドを使用するつもりです。それらを ctlImage および ctlFeatures と名付けました。このフォームを、製品カタログ フォームの詳細ボタンからの非モーダル ポップアップとして使用しています。これまでのところ、製品カタログのレコードを検索し、選択したリストボックスの検索結果を使用して、詳細フォームを現在のレコードに設定する where 句を含むフォームを開くことができます。画像タイプを探してctlImageを操作しようとすると、インテリセンスで表示される唯一のプロパティはctlImage.valueです。ctlImage を jpg に、ctlFeatures を pdf に割り当てたいと思っていました。一方が他方を台無しにしている場合に備えて、frmProducts btnMoreInfo_Click コードと frmCatalogDetails コードを次に示します。

Private Sub btnMoreInfo_Click()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim str As String
    Dim row As Long
    Set db = CurrentDb
    Set rs = db.OpenRecordset("tblProducts", dbOpenSnapshot)

        If Me.lstSearchResults.ItemsSelected.Count > 0 Then

            ' Debug.Print Me.lstSearchResults.Column(0)
            row = Me.lstSearchResults.Column(0)
            rs.MoveFirst
            rs.FindFirst "ProductID=" & row
            Debug.Print rs("Description")
            DoCmd.OpenForm "frmCatalogDetails", acNormal, , "ProductID=" & Me.lstSearchResults.Column(0, Me.lstSearchResults.ItemsSelected), acFormReadOnly, acWindowNormal

        Else
            MsgBox "You must select a product"
            Exit Sub
        End If
End Sub

とカタログの詳細

Option Compare Database
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim fld As DAO.Field

Private Sub Form_Load()

    Set db = CurrentDb

    'Set rs = db.OpenRecordset("tblProducts", dbOpenSnapshot)


    'Set fld = rs("image")

    Debug.Print rs("ProductID")
    Debug.Print rs("Description")
    'me.ctlImage.ControlSource =

    'Me.ctlImage.CurrentAttachment = fld.Value    
End Sub

このフォームが親フォームから rs を認識するのに問題があるため、rs ステートメントはコメントアウトされています。ブロック変数が設定されていませんが、rs.openRecordSet を実行すると、レコードセットは最初の行に戻ります。上記の回答は別として、添付オブジェクトの操作についてはほとんど見たことがなく、添付フィールド内へのアクセスさえカバーしていないため、ヘルプは困難でした。私は、このトピックについて答えるよりも多くの質問をするところまで来ています。回答を作成するために多くの時間を割いてくださったことに非常に感謝しています。Rollin のモットー: 必要なときに助けを求め、求められたら助けを与え、自分がどこから来たのかを覚えておいてください。

于 2014-10-10T04:21:23.737 に答える