PDA

Vollständige Version anzeigen : Bilder einbinden?


martiniz
03.08.2001, 09:40
Hi,

ich hab eine frage:

ich möchte einen katalog erstellen. dazu habe ich schon die ganzen bilder im .jpg- format. das problem ist, daß die db später auf cd gebrannt wird. also muß ich die ganzen bilder pfadunabhägig irgendwie hinterlegen. nur momentan steh ich da wie der "ochs am berg" oder mit dem rücken zur wand. ich tüftel an dieser sache bestimmt schon 2 tage lang rum.

für lösungsvorschläge wäre ich sehr dankbar.

:eek: :mad:

se7en
03.08.2001, 09:42
Also wenn ich das Steuerelement Bild einfügen nehme, dann bleibt das in meiner Datenbank. Warum machst du es nicht auch so?

martiniz
03.08.2001, 09:55
hi se7en,

das wäre ja absolut kein problem, wenn das 10, 20 oder 100 bilder wären. dann würde ich das auch so lösen, nur bei mir gibt es schätzungsweise ca. 4000- 5000 bilder. und dann wird die datei überdimensional groß und ich habe mir deshalb gedacht pro katalog ein verzeichnis auf die cd anlegen und daß dann dementsprechend darauf zückgegriffen werden kann.

Kurt aus Kienitz
03.08.2001, 10:02
Hallo,

Defaultmäßig würde ich die Bilder in einem Verzeichnis unterhalb des Verzeichnisses installieren, in dem die Datenbank liegt.

Der Pfad der Datenbank steht in CurrentDb.Name.

martiniz
03.08.2001, 10:06
Hallo kurt,

ich denke schon. aber ändert sich der pfad dann auch nicht, wenn ich die daten von meiner festplatte auf cd brenne. ich meine paßt sich der pfad dann an oder bleibt er so wie am anfang eingestellt war?

A.S.
03.08.2001, 10:09
Hallo Martiniz,

die Eigenschaft Name des Objektes CurrentDB gibt immer den Pfad und Dateinamen der aktuell geöffneten Datenbank zurück!

Gruß

Arno

Kurt aus Kienitz
03.08.2001, 10:11
Hallo,

Na ja, ausprobiert habe das nicht aber der Name der Datenbank bzw. der Pfad ist ja abhängig davon von wo die Datenbank aufgerufen wird.

Auf deiner Festplatte z.B. aus dem Vezeichnis C:\Katalog, auf der CD z.B. D:\Katalog

martiniz
03.08.2001, 10:19
also wenn ich euch da richtig verstehe, dann ist das genau das richtige. ich teste das jetzt mal und wenn's nicht klappt dann setze ich den beitrag wieder nach oben.

Danke Kurt und Arno und Se7en

der "Brandstifter" :)

martiniz
03.08.2001, 10:31
Hallo da bin ich schon wieder!

ich habe probleme mit dem coding. ich poste es euch grade mal:

Private Sub Katalogbild_Click()
Dim db As Database
Dim Bild As Image

Set db = CurrentDb
Bild = Katalogbild

CurrentDb.Name 'Hier komme ich nicht weiter

End Sub

Kurt aus Kienitz
03.08.2001, 10:41
Hallo,

Erstmal brauchst Du was, um den Pfad zu ermitteln. Das geht u.a. so:

Function GetPfad(DatName As String) As String

Dim i As Integer

For i = Len(DatName) To 1 Step -1

If Mid$(DatName, i, 1) = "\" Then
GetPfad = Left$(DatName, i - 1)
Exit Function
End If

Next i

GetPfad = ""

End Function

Deine Prozedur sollte dann so aussehen:

Private Sub Katalogbild_Click()

Dim Bild As Image

Bild.Path = GetPfad(CurrentDb.Name) & "\BilderVerzeichnis\Bild1.jpg"

End Sub

HTH

Daniel Gyr
03.08.2001, 10:50
Hallo Martiniz,

wenn Du in Deinem Katalog nur Bilder darstellen willst (ohne grossen Text), dann schau Dir vielleicht mal die Software "ThumbPlus inkl. Datenbank" an.
Das ist Bilderverwaltung mit Datenbankanbindung(Access) und eignet sich sehr gut um mehrere Bilder auf einer Seite auszudrucken.


Gruss Dani

martiniz
03.08.2001, 10:55
hallo kurt,

erstmal danke für deine schnelle antwort.

aber kann es sein, daß du einen kleinen fehler in deinem coding hast?

2. code:

bild.path = ...

diese eigenschaft gibt es nicht (.path)

da gibt er mir die fehlermeldung beim kompellieren.

muß ich da vielleicht die methode .Hyperlink auswählen oder was anderes?

Kurt aus Kienitz
03.08.2001, 10:58
Sorry, das muß

Bild.Picture = ....

heißen.

martiniz
03.08.2001, 11:08
Hallo Kurt!

jetzt sieht mein Coding folgendermaßen aus:

Function GetPfad(DatName As String) As String

Dim i As Integer

For i = Len(DatName) To 1 Step -1

If Mid$(DatName, i, 1) = "\" Then
GetPfad = Left$(DatName, i - 1)
Exit Function

End If

Next i

GetPfad = ""

End Function

Private Sub Katalogbild_Click()

Dim Bild As Image
Bild.Picture = GetPfad(CurrentDb.Name) & "\KatalogBilderRIA\K-FO0188.jpg"

End Sub


er bringt mir jetzt die fehlermeldung with-block variable nicht festgelegt oder sowas.

und dann habe ich noch eine frage:
kann man das bild nicht über eine variable aufrufen, weil wie rufe ich das bild sonst auf. du mußt meine fragerei entschuldigen aber noch nicht so fit in access97.

A.S.
03.08.2001, 12:38
Hallo Kurt,

ein genereller Hinweis ;) :

In dieser Funktion

Function GetPfad(DatName As String) As String
Dim i As Integer
For i = Len(DatName) To 1 Step -1
If Mid$(DatName, i, 1) = "\" Then
GetPfad = Left$(DatName, i - 1)
Exit Function
End If
Next i
GetPfad = ""
End Function

verläßt Du die Funktion direkt aus der zweiten Ebene (For-Schleife) und initialisierst die Variable erst am Ende der Funktion wenn nichts gefunden wird. Initialisierungen gehören immer an den Anfang des Codings und aus der zweiten Ebene sollte man nie direkt hinausspringen. Damit ergäbe sich für Deine Funktion folgendes aussehen:

Function GetPfad(DatName As String) As String
Dim i As Integer
GetPfad = ""
For i = Len(DatName) To 1 Step -1
If Mid$(DatName, i, 1) = "\" Then
GetPfad = Left$(DatName, i - 1)
Exit For
End If
Next i
End Function

Eine einfachere Möglichkeit den Pfad zu extrahieren währe jedoch ;) :

Public Function GetPath(strPathFile As String) As String
GetPath = Left(strPathFile, Len(strPathFile) - Len(Dir(strPathFile)))
End Function

--------------------------------------------

Hallo Martin,

Das Bild ist doch eigentlich als Control auf Deinem Formular gedacht, oder wie hatte ich das verstanden? In dem Fall hast Du doch schon ein Image-Objekt in Form Deine Controls vorliegen:

Me.pctBild.Picture = GetPfad(CurrentDb.Name) & "\KatalogBilderRIA\K-FO0188.jpg"
------------------
HTH

Arno

Kurt aus Kienitz
03.08.2001, 12:45
Hallo,

Stehe heute ein wenig auf dem Schlauch, ist wohl zu warm hier.

Das Problem ist, daß Bild ein Image-Objekt ist. Ein Objekt muß mit Set Bild = .... instanziiert werden.

Ich könnte mir allerdings vorstellen, daß Du ein Formular hast, in dem Du den Katalogdaten ein Bild zuordnen möchtest.
Auf diesem Formular könntest Du dann ein Bild-Control unterbringen und diesem den Pfad zuordnen.
Deinem Code-Beispiel nach, könnte dieses Bild-Control Katalogbild heißen.
Dann sollte daß so aussehen:

Private Sub Katalogbild_Click()

Katalogbild.Picture = GetPfad(CurrentDb.Name) & "\KatalogBilderRIA\K-FO0188.jpg"

End Sub

Ich habe hier eine Beispiel-DB, die könnte ich Dir mal zumailen.

A.S.
03.08.2001, 12:53
Hallo Kurt,

mal wieder "Zwei Doofe, ein Gedanke" ;)

Gruß

Arno

martiniz
03.08.2001, 12:54
Hallo Kurt!

das nimmt hier wieder ausmaße an wie damals bei meinem ewig dauernden dialog mit sekoe. ich wäre dir echt verbunden, wenn du mir deine beispielDB mal schicken würdest. und ich versuch mal den vorschlag von dir und arno umzusetzen.

A.S.
03.08.2001, 12:55
Vergessen: Meine Funktion liefert den Pfad inklusive abschließendem BackSlash zurück.

Gruß

Arno

Kurt aus Kienitz
03.08.2001, 12:58
Hallo Arno,

Du hast natürlich recht !
Ich hatte ja auch vorsichtshalber Das geht u.a. so: geschrieben ;)

Deine Kurzversion habe ich jetzt, dreisterweise, gleich einkassiert :)
Hast Du noch so eine Version um den Dateinamen aus dem Pfad zu ermitteln ?

A.S.
03.08.2001, 13:17
Hallo Kurt,

FileName = Dir(strPathFile)

:D

Gruß

Arno

Kurt aus Kienitz
03.08.2001, 13:19
da sach ich nüscht zu..... :D

A.S.
03.08.2001, 15:38
Hallo Martin,

wie schaut's?

Gruß

Arno

martiniz
03.08.2001, 16:26
hallo arno!
ich hab um 15 uhr schon feierabend gemacht. dem problem widme ich mich gleich am montag morgen. ich schreib's dir ins forum, ob es gefunkt hat oder nicht. heute kann ich an dem problem nicht mehr weiterarbeiten.

ich wünsche dir auf jeden fall noch ein schönes wochenende und wenn man sich heute nicht mehr im forum trifft dann auf jeden fall bis montag! :)

martiniz
06.08.2001, 07:18
hallo zusammen,

ich hab mich jetzt des problems angenommen und es kam heraus, daß etwas mit dem coding nicht stimmt.

@arno

bei dem vorletzten beitrag hast du geschrieben ich solle ein me- methode anwenden. dann bekomme ich aber die fehlermeldung, dass dieses objekt diese methode nicht unterstützt.

also so wie ihr das beschrieben habt läuft das noch nicht.

Kurt aus Kienitz
06.08.2001, 08:45
Hallo,

Ich hatte Dir doch eine Beispiel-DB gemailt, funktioniert die etwa auch nicht ?

martiniz
06.08.2001, 08:57
Hallo Kurt,

ich werde daraus leider nicht wirklich schlau.

Kurt aus Kienitz
06.08.2001, 09:23
was verstehts Du denn nicht ?

martiniz
06.08.2001, 09:31
Muß ich auch solche Module schreiben? Kann ich diese 1:1 übernehmen? Wo und wie baue ich diese dann ein?

der code den du in deinem form hast ist ein ganz anderer den ihr mir anfangs gepostet habt. soll ich den ganz verwerfen?

Kurt aus Kienitz
06.08.2001, 09:47
Hallo,

Das Modul modDialog kannst Du 1:1 übernehmen. Dort ist lediglich der "Datei öffnen" Dialog implementiert, der verwendet wird um den Katalogdaten die Bilddatei zuzuordnen.

Das Modul mdlDateiname kannst Du auch 1:1 übernehmen. Dort sind Funktionen enthalten um aus dem Datenbanknamen (CurrentDb.Name) den Pfad zu ermitteln bzw. aus dem Namen der Bilddatei (die über den Datei-Öffnen Dialog ermittelt wurde) den Dateinamen zu extrahieren.

Der Code im Formular hat folgenden Sinn:

Private Sub Form_Current()

If Not IsNull(Me.dfPfad) Then
Me.Bild.Picture = GetPath(CurrentDb.Name) & "Gif\" & Me.dfPfad
Else
Me.Bild.Picture = ""
End If

End Sub

Wenn man im Formular durch die Daten blättert, wird beim Laden der Daten automatisch die Prozedur Form_Current() aufgerufen.
Dort wird geprüft, ob zu den Katalogdaten eine Bilddatei angegeben ist (ob im Textfeld dfPfad was drin steht).
Ist dies der Fall, wird dem Bild-Control Me.Bild die externe Bilddatei, die im Unterverzeichnis Gif steht, zugewiesen um diese anzuzeigen.

Der folgende Code liegt hinter dem Button ? und dient dazu, einem neuen Datensatz eine Bilddatei zuzuordnen.

Private Sub PbFileSuchen_Click()

Dim Tmp
On Error GoTo Er
Tmp = FileDialog(True, "Datei öffnen", _
"GIF-Dateien (*.gif)" & Chr(0) & "*.gif" & Chr(0) & _
"JPG-Dateien (*.jpg)" & Chr(0) & "*.jpg" & Chr(0) & _
"Alle Dateien (*.*)" & Chr(0) & "*.*", "*.tmp", "C:\TEMP")

Me.Bild.Picture = Tmp
Me.dfPfad = GetFileName(Me.Bild.Picture)
Ex:
On Error Resume Next
Exit Sub

Er:
MsgBox "FOpen: " & Err.Description
Resume Ex

End Sub

Mit Me.Bild.Picture = Tmp wird dem Bild-Control der Name der ausgew. Bilddatei (mit Pfadangabe) zugewiesen.

Mit Me.dfPfad = GetFileName(Me.Bild.Picture) wird der Name der Bilddatei (ohne Pfadangabe) dem neuen Datensatz zugewiesen, um so die Referenz zu speichern.

martiniz
06.08.2001, 10:54
hallo,

ich hab's jetzt soweit, dass er versucht das bild hochzuladen aber er bringt mir den fehler,dass er es nicht machen kann. access kann die datei'c\...\...\....jpg' nicht öffnen.

hast du einen idee woran das liegen kann?

ansonsten ist das genau das woran ich gedacht hatte!

martiniz
06.08.2001, 11:03
ich habs hinbekommen. es war ein kleiner scheibfehler in den dateinamen!!

Dank Euch