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
Örnek veritabanını, Northwind.mdb veya northwindCS.adp örnek projesini açın.
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
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
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
Modülü Modül1 olarak kaydedin.
Formda özel işlevi kullanma
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
Visible
txtImageName
özelliğini False olarak ayarlayabilirsiniz.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
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
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ğinitxtImageName
False olarak ayarlayabilirsiniz.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
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
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ğinitxtImageName
Gizli olarak ayarlayabilirsiniz.Araçlar menüsünde Makrolar'ın üzerine gelin ve Microsoft Betik Düzenleyicisi'e tıklayın.
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>
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:
Forma bir Microsoft Web Tarayıcısı denetimi ekleyin ve bunu WebBrowser olarak adlandırın.
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
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
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin