Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Bilder werden nur angezeigt, wenn erneut ein Bild gesetzt wird...

Begonnen von derilzemer, April 09, 2015, 01:01:54

⏪ vorheriges - nächstes ⏩

derilzemer

Hallo,
die Datenbank (accdb 2013 Version) sieht wie folgt aus http://quartettportal.de/bilder/beziehungen.jpg.
Ich habe in der Tabelle tblQuKarten ein neues Feld BildNameFlaggen (Textfeld) hinzugefügt, im Bild rot markiert.
Diese Tabelle ist als Unterformular (frmErfassungUfoQuartUfoKarten) im Unterformular frmErfassungUfoQuart im Hauptformular frmErfassung integriert. Über das Textfeld BildNameFlaggen habe ich ein Bild gelegt, welches als Datenquelle das Textfeld BildNameFlaggen hat. Wenn ich nun das kleine png (max. 2KB) via Doppleklick oder als Dateiname eintrage, zeigt er mir das Bild auch an. Die Funktionalität ist also gewährleistet. Wenn ich nun die Datenbank schließe und erneut öffne, dann sehe ich von den hinzugefügten Bildern nur noch den Text. Wenn ich nun ein einziges Bild erneut via Doppelklick auswähle, dann zeigt er auch alle anderen Bilder wieder an. Die Bilder liegen extern auf einem NAS, welches sich zur aktuellen Situation nicht in einem Sleep Mode oder ähnlichen befindet. Das gleiche Verfahren wird innerhalb der Datenbank noch einmal an anderer Stelle verwendet (tblBilderZuSpiel, blau markiert), da habe ich diese "Probleme" oder Auffälligkeiten nicht. Den Code den ich bei der Doppelklickauswahl verwende sieht wie folgt aus:
Private Sub txtBildNameFlaggen_DblClick(Cancel As Integer)
    Dim dlgOpen As FileDialog
    Set dlgOpen = Application.FileDialog(msoFileDialogFilePicker)
    With dlgOpen
      'Set title of the dialog box
        .Title = "Wähle eine Datei aus"
      'Pathvar
        .InitialFileName = [u][b]Me.Parent.Parent.BilderPfad[/b][/u]
      'Add a filter that includes PNG, GIF and JPEG images and make it the first item in the list.
        .Filters.Add "Images", "*.png; *.gif; *.jpg; *.jpeg", 1
      ' Allow the user to make multiple selections in the dialog box.
        .AllowMultiSelect = False
      ' Show the dialog box. If the .Show method returns True, the user picked at least one file.
        If .Show Then _
        Me.txtBildNameFlaggen = Dir(.SelectedItems(1))
    End With
End Sub

Unterschied zum Code, den ich im Formular frmErfassungUfoBilder verwende, ist in Fett und Kursiv gehalten. Im anderen Code verwende ich lediglich einmal Parent. Kann es etwa daran liegen, oder muss ich einen requery auf das Textfeld setzen, sobald die DB geöffnet wird?
Um eure Hilfe wäre ich dankbar

Gruß Andreas
Grüße und Dank im voraus
Andreas

MaggieMay

Hallo Andreas,

wenn die Dateiauswahl an sich funktioniert und der Bilddateiname korrekt gespeichert, aber lediglich das Bild nicht angezeigt wird, ist der gezeigte Code wohl eher nicht ausschlaggebend.

Aber wie sieht es hiermit aus:
ZitatÜber das Textfeld BildNameFlaggen habe ich ein Bild gelegt, welches als Datenquelle das Textfeld BildNameFlaggen hat.
Das Datenfeld enthält doch lediglich den Dateinamen, du brauchst aber auch den Pfad zum Bild, um es anzeigen zu können.
Freundliche Grüße
MaggieMay

derilzemer

Hi Maggie,
BilderPfad ist praktisch eine Variable. Das Hauptformular (frmErfassung) basiert ja auf der Abfrage qryfrmErfassung. Dort gibt es den Eintrag BilderPfad: "W:\AccessDB\" & [Bilderordner] & "\". Bilderordner wiederrum ist in der tblVerlag hinterlegt. Wenn ich jetzt einem Spiel ein Bild zuordnen möchte, dann befindet man sich bzw. springt automatisch in den entsprechenden Verlagsordner. Deshalb habe ich diese Sache auch übernommen von dem schon existierenden Konstrukt was die Spielebilder angeht. Ich musste lediglich parent.parent machen, da ich mich 2. Unterformular befinde. Demnach kann es daran eigentlich nicht liegen, oder etwa doch? Bin aktuell unsicher was das Problem sein könnte :(.

Gruß Andreas
Grüße und Dank im voraus
Andreas

MaggieMay

Wie bereits gesagt, der oben gezeigte Code dient der Bildauswahl und das sollte nicht das Problem sein. Zumindest sollte es sich leicht feststellen lassen, ob der Suchpfad korrekt vorgegeben wird und ob in der Tabelle die richtigen Dateinamen stehen.

Interessant wird es doch erst an der Stelle wo das Bild angezeigt werden soll und wenn du schreibst, dass du das Bildsteuerelement an das neue Datenfeld gebunden hast, so ist das ein Fehler. Aber darauf bist du jetzt gar nicht eingegangen.

Man müsste sich das Formular und den zugehörigen Code mal ansehen können...
Freundliche Grüße
MaggieMay

derilzemer

Hi,
was heißt nicht darauf eingegangen. Ich habe ja geschrieben, wie der BildPfad funktioniert. Im anderen Formular muss ich auch nur den Bildnamen angeben, da der Pfad wie gesagt über das Hauptformular abgewickelt wird. Letztendlich habe ich das gleiche gemacht. Ich habe nur aus Platzgründen das Bild über das Textfeld gelegt, also nur ein Platzproblem, deswegen diese Lösung. Zumindest viel mir keine andere ein :).
Ich kann dir die DB mal schicken, da ich sie selbst komprimiert und gezipt nichtz unter 330 kb bringe :(. Das kann ich anbieten. Zum Download würde ich sie ungerne stellen, da doch viele Daten (Kosten der Spiele etc.) drin sind, die nicht jeder sehen muss.
Gruß Andreas
Grüße und Dank im voraus
Andreas

HB9876

Hallo Andreas,
am besten eine Kopie der Datenbank machen und nur ein paar relevante Testdaten belassen.
Dann komprimieren und ggf. zippen.
Das sollte dann immer passen.

Gruss

Jens'
Mit jeder Antwort komme ich weiter und lerne.<br /><br />Danke!!!

derilzemer

Hi,
jo wenn ich 20 Datensätze drin lasse, komprimieren und gezipt liegt sie bei 2Mb. accdb ist da wohl nicht mehr so schnieke wie mdb Format, da lag ich immer so um die 300-400 KB. Also die Filegröße im Forum ist meines erachtens eh etwas lächerlich, sorry. Aber sei es drum. Ich kann sie nicht hochladen, thats it.
Gruß Andreas
Grüße und Dank im voraus
Andreas

MaggieMay

Hallo,
Zitat von: derilzemer am April 09, 2015, 19:15:05Ich habe ja geschrieben, wie der BildPfad funktioniert.
darum geht es aber doch nicht, du hast geschrieben (ich zitiere es gerne noch einmal):
ZitatÜber das Textfeld BildNameFlaggen habe ich ein Bild gelegt, welches als Datenquelle das Textfeld BildNameFlaggen hat.
Das Datenfeld enthält nur den Dateinamen, zum Anzeigen des Bildes wird aber der vollständige Pfad benötigt.
ZitatIch kann dir die DB mal schicken
Das kannst du gerne machen, meine Email-Adresse hast du ja schon.
Freundliche Grüße
MaggieMay

MaggieMay

Hallo Andreas,
Zitat von: derilzemer am April 09, 2015, 01:01:54Das gleiche Verfahren wird innerhalb der Datenbank noch einmal an anderer Stelle verwendet (tblBilderZuSpiel, blau markiert)
dann schau dir doch mal an, wie du das mit dem Anzeigen des Bildes dort gelöst hast.

Da gibt es nämlich (völlig überflüssigerweise) diesbezüglichen VBA-Code im Formulareignis "Beim Anzeigen". Das resultiert wohl noch aus anfänglichen, aber inzwischen überholten Empfehlungen. In den aktuellen Access-Versionen kann man ein Bild-Steuerelement an ein Datenfeld binden, welches den vollständigen Zugriffspfad zu einer Bilddatei beinhaltet.

Es ist zwar zutreffend, dass bei dem Bild-Steuerelement in dem funktionierenden Unterformular ("frmErfassungUfoBilder") das Datenfeld mit dem Dateinamen ("BildDateiName") als Steuerelementinhalt eingetragen ist, dies wird jedoch per Zuweisung im Form_Current-Ereignis überschrieben.

Im Unterformular "frmErfassungUfoQuartUfoKarten" fehlt dieser Code.

Meine Empfehlung wäre:
1.
halte den Zugriffspfad zum Bilder-Verzeichnis variabel, indem du ihn in einer Tabelle speicherst

2.
beziehe diese Tabelle in alle Abfragen ein, wo die Bilddateien eine Rolle spielen, so dass der Pfad in den Formularen verfügbar ist, ohne dass er als Konstante in Abfragen oder VBA-Prozeduren festgelegt werden muss

3.
des weiteren ist zu berücksichtigen, dass der endgültige Zugriffspfad zur Bilddatei auch noch vom Hersteller abhängig ist

Freundliche Grüße
MaggieMay

derilzemer

Hi,
zuerst mal muss ich sagen, dass ich die DB erst vor kurzem in das accdb Format konvertiert habe. Von daher hatte ich vorher nicht die Option ein Bild-Steuerelemnt an ein Datenfeld zu binden.
Dass nun von dir als "überflüssig" bezeichneter Code vorhanden ist, kann ich aufgrund fehlendem Verständnis leider nicht komplett nachvollziehen :(. Ich denke mal es geht nur um die Zeile Forms!frmErfassung!frmErfassungUfoBilder.Form!lstBmWahl.Requery
Habe ich durch einen wie du sagst variabel gehaltenen Bildpfad nicht mehr Aufwand? Ich muss den immer neu eingeben, oder etwa nicht? Noch dazu muss ich dann eben die Verlagsabhängigkeit berücksichtigen, welche aktuell mit Bilderordner in in tblVerlag doch gar nicht sooo schlecht gelöst ist, oder? Sorry, das ist keine ketzerische Frage, sondern eher weil ich es nicht wirklich raffe :(.

Gruß Andreas
Grüße und Dank im voraus
Andreas

MaggieMay

ZitatIch denke mal es geht nur um die Zeile
Nein, es geht um die Zuweisung des Bildpfades an die Picture-Eigenschaft des Bild-Steuerelements. Hiermit hast du dich schließlich selbst ausgetrickst, da du zusätzlich den Namen des Bildes an das Bild-Steuerelement gebunden und geglaubt hast, dass es so funktionieren würde. Momentan wird der Code zwar gebraucht, weil er die korrekte Zuweisung des vollständigen Pfades enthält, aber das kannst du ebensogut über den Steuerelementinhalt lösen.

Die Speicherung des Pfades in einer Tabelle halte ich für einen großen Vorteil.
1. hast du keine Konstante im Code mehr, brauchst also keine Programmänderung vorzunehmen, wenn der Pfad sich ändert
2. kannst du den Pfad direkt in die Abfragen einbinden und somit alle benötigten Informationen an die Formulare liefern
Dann setzt sich der Zugriffspfad halt aus drei Teilen zusammen, Pfad + Verlagsordner + Dateiname.

Ich hoffe, nun siehst du etwas klarer.
Freundliche Grüße
MaggieMay

derilzemer

Hi,
ich habe das mal abgeändert, in der Tabelle tblQuKarten habe ich das Feld BildNameFlagge gelöscht und das Feld LandFlagge, Typ Anlage angelegt. Im Formular eingebunden und gut. Aktuell geht jetzt immer der FileDialog auf, wo ich das Bild auswählen muss. Wie kann ich ihm aber den Pfad vorgeben bzw. vor definieren? Geht das nur über den Weg mit Pfad in Tabelle? Wenn ich ehrlich bin würde ich den aktuell genutzten Weg gerne übernehmen was den BilderPfad angeht (bin ich zu stur?). Dazu müsste ich dann wohl aber Code verwenden, richtig?

Gruß Andreas
Grüße und Dank im voraus
Andreas

MaggieMay

Hi,

das halte ich jetzt für keine gute Entscheidung, auf Anlagen umzusteigen. Das bringt wiederum neue Probleme mit sich und bläht die (eh schon recht fette) DB nur unnötig auf.

Wie kommt es nur, dass meine Ratschläge bei dir alle nicht ankommen und sich im Zweifelsfall ins Gegenteil umkehren?
ZitatAktuell geht jetzt immer der FileDialog auf, wo ich das Bild auswählen muss.
Wieso kommt das jetzt ohne dass du es willst? Da stimmt doch wieder etwas nicht.
ZitatWie kann ich ihm aber den Pfad vorgeben bzw. vor definieren?
Wozu brauchst du einen Pfad, wenn du die Bilder als Anlagen gespeichert hast?
ZitatDazu müsste ich dann wohl aber Code verwenden, richtig?
Nein, alles was du brauchst ist ein sinnvolles Tabellenkonzept, dazu Abfragen und Formulare.

Freundliche Grüße
MaggieMay

derilzemer

Hi,
ZitatWie kommt es nur, dass meine Ratschläge bei dir alle nicht ankommen und sich im Zweifelsfall ins Gegenteil umkehren?
Das liegt daran, dass ich dich schlicht und einfach falsch verstehe, mehr ist das nicht.
ZitatWieso kommt das jetzt ohne dass du es willst? Da stimmt doch wieder etwas nicht.
Das kommt nicht einfach so. Ich habe FileDialog gesagt, meinte aber das Anlagen Fenster wo man dann das Bild hinzufügen kannn, sorry. Das ist bei Anlage ja normal.
ZitatWozu brauchst du einen Pfad, wenn du die Bilder als Anlagen gespeichert hast?
Naja, wenn das Anlagenfenster aufgeht, dann steht er im Windows User Verzeichnis, deswewgen. Aber das ist ja eh hinfällig, da ich ja eh falsch unterwegs bin :(.
ZitatNein, alles was du brauchst ist ein sinnvolles Tabellenkonzept, dazu Abfragen und Formulare.
Du willst mir damit sagen, dass ich das Tabellenkonzept generell überdenken sollte?

Gruß Andreas
Grüße und Dank im voraus
Andreas

derilzemer

Hi,
ich habe das mal komplett so umgesetzt wie du meinst, also Bildsteuerelement, Pfad in Tabelle. Alles gut, geht. Aber ich will diese Lösung mit dem Pfad in der Tabelle irgendwie nicht. Das ist aus meiner Sicht eben nicht "zentral" genug. Und wenn man dann ändern muss aus welchem Grund auch immer habe ich mehr Aufwand das in der TAbelle zu ändern, als wenn ich den zentralen BildPfad ändern müsste. Aber Danke für deinen Invest und sorry wenn ich mich mal wieder extrem Begriffsstutzig oder wie auch immer angestellt habe. Das ist keine Absicht euch bzw. dich zu nerven.

Gruß Andreas
Grüße und Dank im voraus
Andreas