Formdaki, rapordaki veya veri erişim sayfasındaki bir klasördeki görüntüleri görüntüleme

Özgün KB numarası: 285820

Not

Uzman kodlama, birlikte çalışabilirlik ve çok kullanıcılı beceriler gerektirir. Bu makale bir Microsoft Access veritabanı (.mdb/.accdb) ve bir Microsoft Access projesi (.adp) için geçerlidir.

Özet

Bazen, görüntüleri Bir Microsoft Access tablosunda depolamak pratik değildir. Çok sayıda görüntünüz varsa veya görüntü dosyalarınızın her biri büyükse, Microsoft Access veritabanı dosyasının boyutu hızla artabilir.

Bu makalede, şunları yapmak için kullanabileceğiniz özel bir işlev gösterilmektedir:

  • Tablodaki görüntülerin dosya yollarını ve adlarını depolayın.
  • Görüntü denetimi kullanarak görüntüleri görüntüleme.
  • Kullanılabilir görüntü yoksa görüntü denetimini gizleyin.
  • Görüntünün görüntüleme durumu hakkında geri bildirim sağlayın.

Bu makale, görüntüleri bir veri erişim sayfasında görüntülemek için kullanabileceğiniz örnek Visual Basic betiğini de içerir.

Not

Bu örnek bit eşlem görüntüleri (.bmp) kullansa da .jpg, .pcx ve .gif gibi diğer görüntü türlerini de kullanabilirsiniz.

Microsoft, programlama örneklerini yalnızca gösterim amacıyla sağlar; örtülü veya açık garanti vermez. Buna zımni garantiler, satılabilirlik veya belirli bir amaca uygunluk da dahildir, ancak bunlarla sınırlı değildir. Bu makale, gösterilen programlama dilini ve yordamları oluşturmak ve hata ayıklamak amacıyla kullanılan araçları kullanmayı bildiğinizi varsayar. Microsoft destek mühendisleri, belirli bir yordamın işlevselliğinin açıklanmasına yardımcı olabilir, ancak gereksinimlerinizi karşılamaya yönelik olarak ek işlevsellik sağlamak veya yordamlar geliştirmek amacıyla bu örnekleri değiştirmezler.

Dosya ve yol verilerini depolamak için tablo oluşturma

  1. Örnek veritabanını, Northwind.mdb veya northwindCS.adp örnek projesini açın.

  2. Aşağıdaki tabloyu Northwind.mdb veya NorthwindCS.adp içinde oluşturun.

    In Northwind.mdb:

    Table: tblImage
    ----------------------------
    Field Name: ImageID
    Data Type: AutoNumber
    Indexed: Yes (No Duplicates)
    
    Field Name: txtImageName
    Data Type: Text
    
    Table Properties: tblImage
    --------------------------
    PrimaryKey: ImageID
    

    NorthwindCS.adp'de:

    Table: tblImage
    -----------------------
    Column Name: ImageID
    Datatype: Int
    Allow Nulls: Unchecked
    Identity: Yes
    
    Column Name: txtImageName
    Datatype: varchar
    
    Table Properties: ImageTable
    -------------------------------
    Primary Key Constraint: ImageID
    
  3. Veri Sayfası görünümünde tblImage tablosunu açın ve ardından her kayda bit eşlem dosyasının yolunu ve adını ekleyin. Aşağıdaki örnek tablosu kayıtların nasıl görünebileceğini gösterir:

    Tür Örnek
    Mutlak (Yerel) C:\Windows\Zapotec.bmp
    Mutlak (UNC Yolu) \\Servername\sharename\Zapotec.bmp
    Göreli Zapotec.bmp

Özel işlev oluşturma

  1. Yeni bir modül oluşturun ve aşağıdaki kodu yapıştırın veya yazın:

    Option Compare Database
    Option Explicit
    
    Public Function DisplayImage(ctlImageControl As Control, strImagePath As Variant) As String
    On Error GoTo Err_DisplayImage
    
    Dim strResult As String
    Dim strDatabasePath As String
    Dim intSlashLocation As Integer
    
    With ctlImageControl
     If IsNull(strImagePath) Then
         .Visible = False
         strResult = "No image name specified."
     Else
         If InStr(1, strImagePath, "\") = 0 Then
             ' Path is relative
             strDatabasePath = CurrentProject.FullName
             intSlashLocation = InStrRev(strDatabasePath, "\", Len(strDatabasePath))
             strDatabasePath = Left(strDatabasePath, intSlashLocation)
             strImagePath = strDatabasePath & strImagePath
         End If
         .Visible = True
         .Picture = strImagePath
         strResult = "Image found and displayed."
     End If
    End With
    
    Exit_DisplayImage:
     DisplayImage = strResult
     Exit Function
    
    Err_DisplayImage:
     Select Case Err.Number
         Case 2220       ' Can't find the picture.
             ctlImageControl.Visible = False
             strResult = "Can't find image in the specified name."
             Resume Exit_DisplayImage:
         Case Else       ' Some other error.
             MsgBox Err.Number & " " & Err.Description
             strResult = "An error occurred displaying image."
             Resume Exit_DisplayImage:
     End Select
    End Function
    
  2. Modülü Modül1 olarak kaydedin.

Formda özel işlevi kullanma

  1. tblImage tablosunu temel alan aşağıdaki yeni formu oluşturun.

    Form: frmImage
    ----------------------
    Caption: Image Form
    RecordSource: tblImage
    
    Image Control
    ---------------------------------
    Name: ImageFrame
    Picture: "C:\Windows\Zapotec.bmp"
    
    Text box
    ----------------------
    Name: txtImageID
    ControlSource: ImageID
    
    Text box
    ---------------------------
    Name: txtImageName
    ControlSource: txtImageName
    
    Text box
    ---------------------------
    Name: txtImageNote
    ControlSource: <Blank>
    

    Not

    Yolun formda görünmesini istemiyorsanız, denetimin VisibletxtImageName özelliğini False olarak ayarlayabilirsiniz.

  2. Görünüm menüsünde Kod'a tıklayın ve aşağıdaki kodu yapıştırın veya yazın:

    Option Compare Database
    Option Explicit
    
    Private Sub Form_AfterUpdate()
     CallDisplayImage
    End Sub
    
    Private Sub Form_Current()
     CallDisplayImage
    End Sub
    
    Private Sub txtImageName_AfterUpdate()
     CallDisplayImage
    End Sub
    
    Private Sub CallDisplayImage()
     Me!txtImageNote = DisplayImage(Me!ImageFrame, Me!txtImageName)
    End Sub
    
  3. frmImage formunu Form görünümünde açın. Formun her kayıt için karşılık gelen bit eşlemini görüntülediğine dikkat edin. txtImageName Alan boşsa veya görüntü bulunamıyorsa, görüntü çerçevesi yerine uygun iletileri alırsınız.

Raporda özel işlevi kullanma

  1. ImageTable tablosunu temel alan aşağıdaki yeni raporu oluşturun.

    Report: rptImage
    ----------------------
    Caption: Image Report
    RecordSource: tblImage
    
    Image Control
    ---------------------------------
    Name: ImageFrame
    Picture: "C:\Windows\Zapotec.bmp"
    
    Text box
    ----------------------
    Name: txtImageID
    ControlSource: ImageID
    
    Text box
    ---------------------------
    Name: txtImageName
    ControlSource: txtImageName
    
    Text box
    ---------------------------
    Name: txtImageNote
    ControlSource: <Blank>
    

    Not

    Yolun raporda görünmesini istemiyorsanız, denetimin Visible özelliğini txtImageNameFalse olarak ayarlayabilirsiniz.

  2. Görünüm menüsünde Kod'a tıklayın ve aşağıdaki kodu yapıştırın veya yazın:

    Option Compare Database
    Option Explicit
    
    Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
     Me!txtImageNote = DisplayImage(Me!ImageFrame, Me!txtImageName)
    End Sub
    
  3. rptImage raporunu baskı önizlemede açın. Raporun her kayıt için karşılık gelen bit eşlemini görüntülediğine dikkat edin. txtImageName Alan boşsa veya görüntü bulunamıyorsa, görüntü çerçevesi yerine uygun iletileri alırsınız.

Veri erişim sayfasında özel işlevi yineleme

  1. tblImage tablosunu temel alan aşağıdaki yeni veri erişim sayfasını oluşturun.

    Data Access Page: dapImage
    -----------------------------
    Title: Image Data Access Page
    
    Image Control
    ---------------------------------
    ID: ImageFrame
    
    Text box
    ----------------------
    ID: txtImageID
    ControlSource: ImageID
    
    Text box
    ---------------------------
    ID: txtImageName
    ControlSource: txtImageName
    

    Not

    Yolun sayfada görünmesini istemiyorsanız, denetimin Visibility özelliğini txtImageNameGizli olarak ayarlayabilirsiniz.

  2. Araçlar menüsünde Makrolar'ın üzerine gelin ve Microsoft Betik Düzenleyicisi'e tıklayın.

  3. AŞAĞıDAKI betiği, HTML belgesinin HEAD etiketi bölümüne MSODSC'nin Current olayına ekleyin.

    Not

    Olayın tetiklenmesi için bir parametre geçirmeniz gerekir.

    <SCRIPT language=vbscript event=Current(oEventInfo) for=MSODSC>
    <!--
    ImageFrame.src=txtImageName.value
    -->
    </SCRIPT>
    
  4. Sayfa görünümünde dapImage sayfasını açın. Sayfada her kayıt için karşılık gelen bit eşlem görüntülendiğini unutmayın. txtImageName alanı boşsa, bir denetim simgesi görüntülenir. Görüntü bulunamazsa, görüntü denetiminde bir X simgesi görünür.

Formda http:// yolu kullanma

Formda http:// yolu kullanmak için Web tarayıcısı denetimini (shdocvw.dll) aşağıdaki gibi kullanın:

  1. Forma bir Microsoft Web Tarayıcısı denetimi ekleyin ve bunu WebBrowser olarak adlandırın.

  2. Bir modüle aşağıdaki kodu ekleyin:

    Public Function DisplayImageWeb(ctlBrowserControl As Control, _
    strImagePath As Variant)
    
    On Error GoTo Err_DisplayImage
    
    Dim strDatabasePath As String
    Dim intSlashLocation As Integer
    
    With ctlBrowserControl
     If IsNull(strImagePath) Then
     ElseIf Left(strImagePath, 4) = "http" Then
         .Navigate (strImagePath)
     Else
         If InStr(1, strImagePath, "\") = 0 Then
             ' Path is relative
             strDatabasePath = CurrentProject.FullName
             intSlashLocation = InStrRev(strDatabasePath, "\", Len(strDatabasePath))
             strDatabasePath = Left(strDatabasePath, intSlashLocation)
             strImagePath = strDatabasePath & strImagePath
         End If
         .Navigate (strImagePath)
     End If
    End With
    
    Exit_DisplayImage:
     Exit Function
    
    Err_DisplayImage:
     Select Case Err.Number
         Case Else
             MsgBox Err.Number & " " & Err.Description
             Resume Exit_DisplayImage:
     End Select
    End Function
    
  3. Formun arkasına aşağıdaki kodu ekleyin:

    Option Compare Database
    Option Explicit
    
    Private Sub Form_AfterUpdate()
     CallDisplayImage
    End Sub
    
    Private Sub Form_Current()
     CallDisplayImage
    End Sub
    
    Private Sub txtImageName_AfterUpdate()
     CallDisplayImage
    End Sub
    
    Private Sub CallDisplayImage()
     DisplayImageWeb Me.WebBrowser9, Me.txtImageName
    End Sub