Lomakkeen, raportin tai tietokantasivun kansion kuvien näyttäminen

Alkuperäinen KT numero: 285820

Huomautus

Edellyttää asiantuntijakoodausta, yhteentoimivuutta ja moniajotaitoa. Tämä artikkeli koskee Microsoft Access -tietokantaa (.mdb/.accdb) ja Microsoft Access -projektia (.adp).

Yhteenveto

Joskus kuvien tallentaminen Microsoft Access -taulukkoon ei ole käytännöllistä. Jos kuvia on useita tai jos jokainen kuvatiedosto on suuri, Microsoft Access -tietokantatiedoston koko voi kasvaa nopeasti.

Tässä artikkelissa esitellään mukautettua funktiota, jonka avulla voit:

  • Tallenna tiedostopolut ja kuvien nimet taulukkoon.
  • Näytä kuvat kuvaohjausobjektin avulla.
  • Piilota kuvan ohjausobjekti, jos kuvaa ei ole käytettävissä.
  • Anna palautetta kuvan näyttötilasta.

Tässä artikkelissa on myös Visual Basic -esimerkkikomentosarja, jonka avulla voit näyttää kuvat tietokantasivulla.

Huomautus

Vaikka tässä esimerkissä käytetään bittikartan kuvia (.bmp), voit käyttää myös muita kuvatyyppejä, kuten .jpg, .pcx ja .gif.

Microsoft esittää ohjelmointiesimerkkejä vain asian havainnollistamiseksi, ilman suoraa tai epäsuoraa vastuuta niiden toimivuudesta. Tämä sisältää muunmuassa epäsuorat vastuut soveltuvuudesta kaupankäyntiin tai soveltuvuuteen yksilöityyn käyttöön. Tässä artikkelissa oletetaan, että olet perehtynyt käytettyyn ohjelmointikieleen, sekä proseduurien luonti- ja virheenkorjaustyökaluihin. Microsoftin tukihenkilöt voivat auttaa selvittämään tietyn proseduurin toiminnallisuutta, mutta he eivät muokkaa näitä esimerkkejä parantamaan yksittäisen tarpeen toiminnallisuutta eivätkä luo siihen proseduureja.

Luodaan taulukkoa tiedoston ja polun tietojen tallentamista varten

  1. Avaa mallitietokanta, Northwind.mdb tai malliprojekti NorthwindCS.adp.

  2. Luo seuraava taulukko joko Northwind.mdb tai NorthwindCS.adp-tiedostoon.

    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
    

    Kohteessa NorthwindCS.adp:

    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. Avaa tblImage-taulukko taulukkonäkymässä ja lisää sitten bittikarttatiedoston polku ja nimi kuhunkin tietueeseen. Seuraavassa esimerkkitaulukossa näytetään, miltä tietueet saattavat näyttää:

    Kirjoita Esimerkki
    Absoluuttinen (paikallinen) C:\Windows\Zapotec.bmp
    Absoluuttinen (UNC-polku) \\Servername\sharename\Zapotec.bmp
    Suhteellinen Zapotec.bmp

Mukautetun funktion luominen

  1. Luo uusi moduuli ja liitä tai kirjoita seuraava koodi:

    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. Tallenna moduuli muodossa Module1.

Mukautetun funktion käyttäminen lomakkeessa

  1. Luo seuraava uusi lomake, joka perustuu tblImage-taulukkoon.

    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>
    

    Huomautus

    Jos et halua polun näkyvän lomakkeessa, voit määrittää Visible ohjausobjektin ominaisuudeksi txtImageNameFalse.

  2. Valitse Näytä-valikostaKoodi ja liitä tai kirjoita seuraava koodi:

    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. Avaa frmImage-lomake lomakenäkymässä. Huomaa, että lomake näyttää kunkin tietueen vastaavan bittikartan. txtImageName Jos kenttä on tyhjä tai kuvaa ei löydy, näyttöön tulee kuvakehyksen sijaan sopivia viestejä.

Mukautetun funktion käyttäminen raportissa

  1. Luo seuraava uusi raportti, joka perustuu ImageTable-taulukkoon.

    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>
    

    Huomautus

    Jos et halua polun näkyvän raportissa, voit määrittää Visible ohjausobjektin ominaisuudeksi txtImageNameFalse.

  2. Valitse Näytä-valikostaKoodi ja liitä tai kirjoita seuraava koodi:

    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. Avaa raportti esikatselunäkymässä. Huomaa, että raportti näyttää kunkin tietueen vastaavan bittikartan. txtImageName Jos kenttä on tyhjä tai kuvaa ei löydy, näyttöön tulee kuvakehyksen sijaan sopivia viestejä.

Mukautetun funktion monistaminen tietokantasivulla

  1. Luo seuraava uusi tietokantasivu, joka perustuu tblImage-taulukkoon.

    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
    

    Huomautus

    Jos et halua polun näkyvän sivulla, voit määrittää Visibility ohjausobjektin txtImageName ominaisuudeksi Piilotettu.

  2. Valitse Työkalut-valikostaMakrot ja valitse sitten Microsoft Script Editor.

  3. Lisää seuraava komentosarja MSODSC:n Nykyiseen tapahtumaan HTML-asiakirjan HEAD-tunnisteosassa.

    Huomautus

    Sinun on välitettävä parametri, jotta tapahtuma voidaan käynnistää.

    <SCRIPT language=vbscript event=Current(oEventInfo) for=MSODSC>
    <!--
    ImageFrame.src=txtImageName.value
    -->
    </SCRIPT>
    
  4. Avaa dapImage-sivu sivunäkymässä. Huomaa, että sivulla näkyy kunkin tietueen vastaava bittikartta. Jos txtImageName-kenttä on tyhjä, näkyviin tulee ohjausobjektikuvake. Jos kuvaa ei löydy, kuvaohjausobjektissa näkyy X-kuvake.

http:// polun käyttäminen lomakkeessa

Jos haluat käyttää http:// polkua lomakkeessa, käytä selainohjausobjektia (shdocvw.dll) seuraavasti:

  1. Lisää lomakkeeseen Microsoft Web Browser -ohjausobjekti ja anna sille nimeksi WebBrowser.

  2. Lisää seuraava koodi moduuliin:

    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. Lisää seuraava koodi lomakkeen taakse:

    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