Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: derilzemer am September 20, 2017, 15:51:50

Titel: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: derilzemer am September 20, 2017, 15:51:50
Hallo,
ich wollte eine schon funktionale Routine in einem anderen Bereich anwenden und bekomme den Laufzeitfehler 2447
Ein .-(Punkt) oder !-Operator wird auf ungültige Weise verwendet, oder es liegt ein ungültiges Klammernpaar vor.
Das debuggen springt dann zur neuen Zeile im VBA Editor. Also was habe ich gemacht.
Ich habe ein Suchformular, in dem ich zu jedem Datensatz eine thumb anzeigen lasse. Jetzt wollte ich mit einem Doppelklick das thumb größer anzeigen lassen. Dies mache ich schon in einem anderen Formular so, wo dieser Ablauf auch funktioniert.
Die VBA Anweisung sieht so aus:
Private Sub imgDeckblattThumb_DblClick(Cancel As Integer)
   DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.BilderPfad & Me.BildDateiName
End Sub

Der einzige Unterschied zum funktionierenden liegt im Namen und dass ich dort parent nutzen muss, weil es in einem Ufo ist
'Private Sub imgBild_DblClick(Cancel As Integer)
'    DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.Parent.BilderPfad & Me.BildDateiName
'End Sub


Kann mir da jemand sagen, welcher Operator dort nicht passen soll?? Danke für eventuelle Hilfe.

mfG
Andreas
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: Lachtaube am September 20, 2017, 16:01:32
Es handelt sich wohl eher um einen Fehler im SQL-Abfragetext.
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: derilzemer am September 20, 2017, 16:28:50
Hi,
hmmm in der Tat, das Bild was aktuell angezeigt wird und vergrößert werden soll, hat als Steuerelementinhalt folgenden Eintrag:
=DomWert("BilderPfad";"tblBildPfad") & [BilderOrdner] & "\" & [Verzeichnisname] & "\" & [BildDateiName]
Das bedeutet  im VBA muss der String anders zusammengesetzt werden :(. Okay, das weiss ich nicht, wie man das jetzt im VBA umsetzt. Da muss ich diesen Gimmick sein lassen.

Gruß Andreas

Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: Beaker s.a. am September 20, 2017, 16:45:55
Hallo Andreas,
ZitatDas bedeutet  im VBA muss der String anders zusammengesetzt werden
Nee, das bedeutet, das der genauso zusammengesetzt werden muss ( "\" ).
Hast du die Möglichkeiten von Debug.Print immer noch nicht erkannt?  ;)
gruss ekkehard
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: derilzemer am September 20, 2017, 17:12:41
Hi Ekkehard,
Zitat von: Beaker s.a. am September 20, 2017, 16:45:55
ZitatDas bedeutet  im VBA muss der String anders zusammengesetzt werden
Nee, das bedeutet, das der genauso zusammengesetzt werden muss ( "\" ).
Ja das hört sich doch für mich mal wieder einfach an.
Zitat von: Beaker s.a. am September 20, 2017, 16:45:55
Hast du die Möglichkeiten von Debug.Print immer noch nicht erkannt?  ;)
gruss ekkehard
Selbst wenn ich das jetzt mal in der aktuellen Konfiguration aktiviere, so komme ich gar nicht zur Ausgabe von debug.print. da ich ja schon vorher hänge bleibe weil er Me.BilderPfad nicht findet.
Private Sub imgDeckblattThumb_DblClick(Cancel As Integer)
   DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.BilderPfad & Me.BildDateiName
      Debug.Print
End Sub


BilderPfad ist ja eine Feld in tblBildPfad. Auch mit Me.Parent.Bilderpfad komme ich da natürlich nicht hin. Sprich ich weiss nicht wie ich den Verweis auf die tblBildPfad.BilderPfad hinbekomme.

Gruß Andreas
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: Lachtaube am September 20, 2017, 17:52:00
Leg' Dir doch eine eigene Eigenbnschaft in der DB an, die anschließend wie jede andere Eigenschaft auch beschrieben und ausgelesen werden kann.
Option Compare Database
Option Explicit

'in einem allgemeinen Modul

' von Allen Browne
Function SetPropertyDAO(obj As Object, strPropertyName As String, intType As Integer, _
                        varValue As Variant, Optional strErrMsg As String) As Boolean
   On Error GoTo ErrHandler
   'Purpose:   Set a property for an object, creating if necessary.
   'Arguments: obj = the object whose property should be set.
   '           strPropertyName = the name of the property to set.
   '           intType = the type of property (needed for creating)
   '           varValue = the value to set this property to.
   '           strErrMsg = string to append any error message to.

   If HasProperty(obj, strPropertyName) Then
      obj.Properties(strPropertyName) = varValue
   Else
      obj.Properties.Append obj.CreateProperty(strPropertyName, intType, varValue)
   End If
   SetPropertyDAO = True

ExitHandler:
   Exit Function

ErrHandler:
   strErrMsg = strErrMsg & obj.Name & "." & strPropertyName & " not set to " & varValue & _
               ". Error " & Err.Number & " - " & Err.Description & vbCrLf
   Resume ExitHandler
End Function

Function HasProperty(obj As Object, strPropName As String) As Boolean
   'Purpose:   Return true if the object has the property.
   Dim varDummy As Variant

   On Error Resume Next
   varDummy = obj.Properties(strPropName)
   HasProperty = (Err.Number = 0)
End Function

Beispiel zur Nutzung im VBA-Direktbereich.'Test - Bilderpfad noch nie verwendet
'
?CurrentDb.Properties("Bilderpfad")
' Laufzeitfehler: 3270

'Eigenschaft anlegen und gleich bestücken
?SetPropertyDAO(CurrentDb, "Bilderpfad", dbText, "C:\MeineBilder\Karten\Deckblaetter\")
Wahr

'Jetzt benötigt man die Funktionen nicht mehr

?CurrentDb.Properties("Bilderpfad")
C:\MeineBilder\Karten\Deckblaetter\

'korrigieren
CurrentDb.Properties("Bilderpfad") = "D:\NeuerBildpfad\"

?CurrentDb.Properties("Bilderpfad")
D:\NeuerBildpfad\

Die Eigenschaft und ihr Wert bleibt natürlich auch nach dem Schließen der DB erhalten.
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: derilzemer am September 20, 2017, 18:54:16
Hallo Lachtaube,
ich habe mir mal das Allgemeine Modul angelegt (Name Allgemein_SetProperty), den oberen Teil eingefügt. Dann habe ich auch im VBA-DB das Ergebnis mit dem Laufzeitfehler erhalten. Soweit habe ich es verstanden, jedoch kann ich jetzt nicht wie in deinem Beispiel den kompletten Pfad einfügen, da die "Deckblätter" bzw Spiele ja von unterschiedlichen Verlagen strammen und somit der Verlag und auch das Spielverzeichnis wechseln können.
=DomWert("BilderPfad";"tblBildPfad") & [BilderOrdner] & "\" & [Verzeichnisname] & "\" & [BildDateiName]
Der Bilderpfad ist in tblBildPfad, der Bilderordner in tblVerlag und der Verzeichnisname in tblSpiele als Feld definiert. Im Verzeichnis findet sich letztendlich der Bilddateiname. Das Problem ist wie gesagt, dass der Pfad mehr oder weniger dynamisch ist bzw. der Pfad sich ständig ändern kann. Das kann ich ja mit der SetProperty Variante so nicht fixen, oder sehe ich das falsch?

Gruß Andreas
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: Lachtaube am September 20, 2017, 20:14:06
Dann steht wohl in Verzeichnisname etwas, was da nict hingehört. Nur, woher bezieht Verzeichnisname seinen Wert?
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: derilzemer am September 20, 2017, 20:35:41
Hi,
Zitat von: Lachtaube am September 20, 2017, 20:14:06
Dann steht wohl in Verzeichnisname etwas, was da nicht hingehört. Nur, woher bezieht Verzeichnisname seinen Wert?
wie schon in #6 erwähnt,
Zitat=DomWert("BilderPfad";"tblBildPfad") & [BilderOrdner] & "\" & [Verzeichnisname] & "\" & [BildDateiName]
Der Bilderpfad ist in tblBildPfad, der Bilderordner in tblVerlag und der Verzeichnisname in tblSpiele als Feld definiert. Im Verzeichnis findet sich letztendlich der Bilddateiname. Das Problem ist wie gesagt, dass der Pfad mehr oder weniger dynamisch ist bzw. der Pfad sich ständig ändern kann. Das kann ich ja mit der SetProperty Variante so nicht fixen, oder sehe ich das falsch?
Das verhält sich ja so. Der Bildpfad wird global festgelegt, ist also statisch. Das Verzeichnis eines Verlages ist dann schon dynamisch, wird in tblVerlag festgelegt. Ebenso ist es mit dem Verzeichnisname des Spieles, welches z.B. vom Verlag Ass kommt. Das wird dann in tblSpiele mit z.b 3200_1971 definiert, ist unique. Der Pfad setzte sich dann also so zusammen
W:\quartette\bilder\ass\3200_1971\ und wie erwähnt ab Ass dynamisch.

Gruß Andreas
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: Lachtaube am September 20, 2017, 20:50:09
Ja, das ist mir schon klar. Du solltest ergründen, woher das Steuerelement oder Feld Verzeichnisname seinen Inhalt bezieht. Ist da VBA involviert?
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: derilzemer am September 20, 2017, 21:18:55
Zitat von: Lachtaube am September 20, 2017, 20:50:09
....... Du solltest ergründen, woher das Steuerelement oder Feld Verzeichnisname seinen Inhalt bezieht. Ist da VBA involviert?
Für das Feld Verzeichnisname in tblSpiele gibt es keinen VBA. Ich schreibe da lediglich den Verzeichnisnamen des Spieles rein, wenn ich ein neues Spiel erfasse.

Gruß Andreas
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: DF6GL am September 21, 2017, 08:06:45
Hallo,

ohne weiter einzusteigen und wenn dies in einem (Haupt)Form funktioniert:



ZitatPrivate Sub imgDeckblattThumb_DblClick(Cancel As Integer)
   DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.BilderPfad & Me.BildDateiName
End Sub

dann sollte es bei einem in diesem HFO liegenden UFO so lauten:

ZitatPrivate Sub imgBild_DblClick(Cancel As Integer)
    DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.Parent!BilderPfad & Me.Parent!BildDateiName
End Sub

Wobei in "Me.Parent!BilderPfad"  ein abschließender Backslash stehen muss.



Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: derilzemer am September 21, 2017, 16:28:55
Hi Franz,
Zitat von: DF6GL am September 21, 2017, 08:06:45
wenn dies in einem (Haupt)Form funktioniert:
ZitatPrivate Sub imgDeckblattThumb_DblClick(Cancel As Integer)
   DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.BilderPfad & Me.BildDateiName
End Sub
dann sollte es bei einem in diesem HFO liegenden UFO so lauten:
ZitatPrivate Sub imgBild_DblClick(Cancel As Integer)
    DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.Parent!BilderPfad & Me.Parent!BildDateiName
End Sub
Wobei in "Me.Parent!BilderPfad"  ein abschließender Backslash stehen muss.
ich verstehe nicht wirklich, wieso das nicht geht :(. Ich will diese Funktion ja in der frmQuartettSuche. Das Thumb welches ich gerne mit Doppelklick größer darstellen will wird ja schon angezeigt :-\. Was genau bewirkt, dass es angezeigt wird?
In der Query für frmQuartettSuche sind alle erforderlichen Felder und Tabellen hinterlegt. Das Thumb wird über ein Bildelement dargestellt, welcher als Steuerelementinhalt diesen Eintrag hat:
=DomWert("BilderPfad";"tblBildPfad") & [BilderOrdner] & "\" & [Verzeichnisname] & "\" & [BildDateiName].
Meinem Verständnis nach, ist in dem String alles drin, was den Pfad angeht, sonst würde er ja das Thumb nicht anzeigen. Jetzt müsste doch auch meinem Verständnis nach über die Eigenschaften des Bildelement unter Ereignis mit Doppelklicken eine Ereignisprozedur hinterlegt werden können. Man muss dann wohl nur den Pfad anpassen, dachte ich ja auch.
Ich habe dann jetzt im VBA noch einmal umgestellt:
DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.Verlag & Me.BilderOrdner & Me.BildDateiName
siehe da, er meckert Laufzeitfehler 2220, QuartettDB von Andreas Müller kann die Datei Berlinerberl6316737_1974_db.png nicht öffnen.
Berlinerberl6316737_1974_db.png = Berliner=Verlag | berl=BilderOrdner | 6316737_1974_db.png=BildDateiName.
Ergo ist er nah dran, ich muss noch die Backslashes mit reinmachen, aber wie :( Ich dachte einfach & "\" aber das geht nicht, auch nicht mit Asterix. Wie mache ich das?

Gruß Andreas
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: Beaker s.a. am September 21, 2017, 16:36:06
ZitatWie mache ich das?
Na, genauso wie beim DomWert, - oder nicht. -> siehe #3
gruss ekkehard
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: DF6GL am September 21, 2017, 19:38:21
Hallo,

das solltest Du aber jetzt wirklich interpretieren und abstellen können...

Offensichtlich fehlen die Backslashes...



Zitatich verstehe nicht wirklich, wieso das nicht geht :(. Ich will diese Funktion ja in der frmQuartettSuche. Das Thumb welches ich gerne mit Doppelklick größer darstellen will wird ja schon angezeigt :-\. Was genau bewirkt, dass es angezeigt wird?

Ich verstehe es so, dass das "Thumb" in einem Bild-Steuerelement angezeigt wird, dessen Steuerelement den (kompletten) Pfad-Dateinamen des Bildes zugewiesen erhalten hat.

Beim Öffnen des frmDeckblatt wird der (komplette) Bild-Pfaddateiname als Openargs-Parameter übergeben.   Im Open- oder Load-Ereignis des frmDeckblatt muss Code stehen, der das Openargs-Argument auswertet und damit den Bild-Pfaddateinamen dem Steuerelement-Inhalt eines Bild-St.-El. zuweist.  Alternativ kann der Dateiname auch der Picture-Eigenschaft des Buld-St. El. zugewiesen werden.


Mit diesen Infos und ein bisschen Debuggen (mit einem Haltepunkt und/oder der Ausgabe mit Debug.Print ins Direktfenster ) solltest Du das Ganze nun aber selber hinbekommen.
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: derilzemer am September 21, 2017, 19:43:01
Hi,
dachte ich ja auch, aber es geht so einfach nicht :-(. Wenn ich den kompletten String aus dem Steuerelementinhalt des Bildes nehme =DomWert("BilderPfad";"tblBildPfad") & [BilderOrdner] & "\" & [Verzeichnisname] & "\" & [BildDateiName] und im VBA angepasst eingebe DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.BilderPfad & Me.BilderOrdner & "\" & Me.Verzeichnisname & "\" & Me.BildDateiName, kompiliere, dann meckert er weil er BildPfad nicht findet.
Dann habe ich mal "gefummelt". ich habe den DomWert kopiert und leicht angepasst im Detailbereich sichtbar eingefügt. Dann habe ich zumindest mal gesehen, dass alle Pfade passen. Sichtbar auf nein umgestellt, VBA angepasst
DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.BilderPfad & "\" & Me.BildDateiName
Siehe da, er öffnet ein Bild!
Aber wenn ich dann das nächste Bild doppelklicke, dann macht er wieder das selbe Bild auf, verwendet als wieder den gleichen Pfad wie vom vorherigen Bild. Markiere ich über den Datensatzmarkierer einen anderen Datensatz, dann macht er ein neues Bild auf. Was ist das jetzt für eine Eigenschaft?? Ich will natürlich nicht ständig den Datensatz markieren, damit er das andere Bild öffnet.

Gruß und Danke für die Unterstützung
Andreas
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: derilzemer am September 21, 2017, 19:45:46
Hi Franz,
hab ich ja jetzt. Aus meiner Sicht mit "getrickse" und noch mit einer Einschränkung die ich beschrieben habe. Da weiss ich nun wieder nicht, ob ich da in den Eigenschaften was einstellen muss oder einen Refresh setzen muss etc. :(.

Gruß Andreas
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: DF6GL am September 22, 2017, 08:58:35
Hallo,

also, ich versteh Deine Ausführungen nicht richtig...

Zitathab ich ja jetzt

WAS hast Du jetzt?

ZitatDa weiss ich nun wieder nicht, ob ich da in den Eigenschaften was einstellen muss oder einen Refresh setzen muss etc.

Vermutlich denkst Du zu kompliziert und ich blicke bei deiner Formularkonstellation nicht durch.

WO steht  das und funktioniert das auch?:
Zitat=DomWert("BilderPfad";"tblBildPfad") & [BilderOrdner] & "\" & [Verzeichnisname] & "\" & [BildDateiName]

Wobei Folgendes etwas anderes ist :

ZitatDoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.BilderPfad & Me.BilderOrdner & "\" & Me.Verzeichnisname & "\" & Me.BildDateiName

Hier wird der Bild-Pfaddateiname aus 4 Form-Textfeldern zusammengesetzt,  im ersten Fall wird

der "BilderPfad"  mit DomWert aus der Tabelle "tblBilderpfad" aus irgendeinem Datensatz ausgelesen (Kriterium fehlt bei DomWert (Dlookup))

Du musst Dir endlich im Klaren werden, WOHER die Werte kommen sollen/müssen.

Zudem solltest du das schon öfters vorgeschlagene Mittel mit Debug.Print umsetzen, damit man den realen Inhalt der zusammengesetzten Strings sehen kann.

Im VBA-Editor das Direktfenster öffnen.

1) Im Code von Form-Ereignisprozedur "Beim Anzeigen" eingeben:

Debug.Print DomWert("BilderPfad";"tblBildPfad") & [BilderOrdner] & "\" & [Verzeichnisname] & "\" & [BildDateiName]

2) Vor der Zeile  Docmd.Openform "frmDeckblatt"   eingeben:

Debug.Print Me.BilderPfad & Me.BilderOrdner & "\" & Me.Verzeichnisname & "\" & Me.BildDateiName

und

Debug.Print Me.BilderPfad & "\" & Me.BildDateiName


3)  einen Haltepunkt an die Stelle
Private Sub imgDeckblattThumb_DblClick(Cancel As Integer)
setzen.   Dazu auf den Balken links des Schreibbereiches an die Stelle neben der Codezeile klicken. Es erscheint dort ein dicker brauner Punkt.


ZitatAber wenn ich dann das nächste Bild doppelklicke

WO befindet sich das Bild-Steuerelement?  Wovon gehst Du aus, dass beim Doppelklick auf das (nächste?)Bild sich der Datensatz ändern sollte? Das  passiert nur, wenn das Bild-St.-El.  sich im Endlosform im Detailbereich befindet und an ein Tabellenfeld gebunden wäre.
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: derilzemer am September 22, 2017, 12:46:23
Hallo Franz,
Ich verstehe ja deine Kritik und es fällt mir ja auch schwer das alles so "geordnet" zu erklären, damit ihr was damit anfangen könnt.
Zitat von: DF6GL am September 22, 2017, 08:58:35
WO steht  das und funktioniert das auch?:
Zitat=DomWert("BilderPfad";"tblBildPfad") & [BilderOrdner] & "\" & [Verzeichnisname] & "\" & [BildDateiName]

Dieser Eintrag steht im Such Formular frmQuartettSuche in den Eigenschaften des Bildes im Steuerelementinhalt. Es funktioniert in soweit, dass beim Aufruf des Formulares die Bilder dadurch direkt angezeigt werden --> bild1. Ich poste heute mal das eine oder andere Bild zwecks Visualisierung.

Zitat von: DF6GL am September 22, 2017, 08:58:35
Wobei Folgendes etwas anderes ist :
ZitatDoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.BilderPfad & Me.BilderOrdner & "\" & Me.Verzeichnisname & "\" & Me.BildDateiName
Hier wird der Bild-Pfaddateiname aus 4 Form-Textfeldern zusammengesetzt,  im ersten Fall wird
der "BilderPfad"  mit DomWert aus der Tabelle "tblBilderpfad" aus irgendeinem Datensatz ausgelesen (Kriterium fehlt bei DomWert (Dlookup)). Du musst Dir endlich im Klaren werden, WOHER die Werte kommen sollen/müssen.
Will ich ja auch, aber es ist wohl zu "kompliziert". (Kriterium fehlt bei DomWert (Dlookup)) was genau meinst du damit? DLookup anstatt DomWert? Sorry wegen meiner Begriffsstutzigkeit :(.

Zitat von: DF6GL am September 22, 2017, 08:58:35
Zudem solltest du das schon öfters vorgeschlagene Mittel mit Debug.Print umsetzen, damit man den realen Inhalt der zusammengesetzten Strings sehen kann.
Im VBA-Editor das Direktfenster öffnen.
1) Im Code von Form-Ereignisprozedur "Beim Anzeigen" eingeben:
Debug.Print DomWert("BilderPfad";"tblBildPfad") & [BilderOrdner] & "\" & [Verzeichnisname] & "\" & [BildDateiName]
Private Sub Form_Current()
    Debug.Print "BilderPfad"; "tblBildPfad" & [BilderOrdner] & "\" & [Verzeichnisname] & "\" & [BildDateiName]
End Sub

DomWert musste ich weglassen, da er sagt dass die Variable nicht definiert sei. Weiß ich nicht wie ich das machen muss.

Zitat von: DF6GL am September 22, 2017, 08:58:35
2) Vor der Zeile  Docmd.Openform "frmDeckblatt"   eingeben:
Debug.Print Me.BilderPfad & Me.BilderOrdner & "\" & Me.Verzeichnisname & "\" & Me.BildDateiName
und
Debug.Print Me.BilderPfad & "\" & Me.BildDateiName
3)  einen Haltepunkt an die Stelle
Private Sub imgDeckblattThumb_DblClick(Cancel As Integer)
setzen.   Dazu auf den Balken links des Schreibbereiches an die Stelle neben der Codezeile klicken. Es erscheint dort ein dicker brauner Punkt.
Habe ich gemacht
Private Sub imgDeckblattThumb_DblClick(Cancel As Integer)
    Debug.Print Me.Parent.BilderPfad & Me.BilderOrdner & "\" & Me.Verzeichnisname & "\" & Me.BildDateiName
    Debug.Print Me.Parent.BilderPfad & "\" & Me.BildDateiName
    DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.Parent.BilderPfad & "\" & Me.BilderOrdner & "\" & Me.Verzeichnisname & "\" & Me.BildDateiName
End Sub


Ich kann das ausführen, aber im Direktbereich kommt nichts, aber im Lokal. Er meckert wegen dem DoCmd, da stört er sich an dem Ausdruck Parent. Laufzeitfehler 2452. Der von ihnen eingegeben Ausdruck enthält einen ungültigen Verweis auf die Hauptobjekt-Eigenschaft.

Und jetzt komme ich noch mal auf das "getrickse" zu sprechen.
Ich füge im Detailbereich des Endlosformular frmQuartettSuche das Textfeld hinzu =DomWert("BilderPfad";"tblBildPfad")
Die Ereignisprozedur beim Doppelklicken des Bildes sieht sieht so aus:
    DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Me.BilderPfad & "\" & Me.BilderOrdner & "\" & Me.Verzeichnisname & "\" & Me.BildDateiName
Wenn ich jetzt doppelklicke, dann geht es bis auf das erwähnte Thema, dass immer das gleiche Bild kommt :(. siehe bild2.
Ja, ich verstehe jetzt aber immer noch nicht, wieso es da mit dem Bildpfad klappt.

Zitat von: DF6GL am September 22, 2017, 08:58:35
ZitatAber wenn ich dann das nächste Bild doppelklicke
WO befindet sich das Bild-Steuerelement?  Wovon gehst Du aus, dass beim Doppelklick auf das (nächste?)Bild sich der Datensatz ändern sollte? Das  passiert nur, wenn das Bild-St.-El.  sich im Endlosform im Detailbereich befindet und an ein Tabellenfeld gebunden wäre.
Wie oben erwähnt, befindet sich das Bild-Steuerelement im Endlosformular im Detailbereich. Wie in bild1 zu sehen ist, gehe ich wirklich davon aus, dass wenn ich ein anderes Bild doppelklicke, dass dann auch ein anderer Datensatz den "Focus" bekommt und sich somit auch das Bild öffnet und nicht das zuvor aufgerufene, oder denke ich da auch falsch? Muss ich das via VBA deklarieren?

Gruß Andreas
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: Lachtaube am September 22, 2017, 12:53:22
Ich kann auch nur raten, vermute aber, dass der Ausdruck im Formular in einem Textfeld steht. Das Problem dabei ist, dass für den Anwender keine Möglichkeit besteht, festzustellen, bzw. eine Reihenfolge festgelegt werden kann, wann der Inhalt des Ausdrucks ausgewertet wurde bzw. wird. Man kann allerhöchstens im Code-Ablauf ein Recalc auf das Formular absetzen, welches das Textfeld mit dem Ausdruck beherbergt, um den ausgewerteten Wert sicher zu ermitteln.
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: derilzemer am September 22, 2017, 13:18:19
Hallo,
Zitat von: Lachtaube am September 22, 2017, 12:53:22
.....Man kann allerhöchstens im Code-Ablauf ein Recalc auf das Formular absetzen, welches das Textfeld mit dem Ausdruck beherbergt, um den ausgewerteten Wert sicher zu ermitteln.
mit einem Recalc im Code-Ablauf meinst du, den im Private Sub Form_Current() oder in der Doppelklickaktion Private Sub imgDeckblattThumb_DblClick(Cancel As Integer) unterbringen?

Gruß Andreas
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: DF6GL am September 22, 2017, 13:28:32
Hallo,

ZitatDomwert weglassen

Ok, da hab ich die Anpassung "versäumt" (und Code im UFO)

Debug.Print DLookup("BilderPfad","tblBildPfad") & Me![BilderOrdner] & "\" & Me![Verzeichnisname] & "\" & Me![BildDateiName]
Zitat



Ich kann das ausführen, aber im Direktbereich kommt nichts, aber im Lokal. Er meckert wegen dem DoCmd, da stört er sich an dem Ausdruck Parent.


Dann ist das Formular kein UFO , d. h. das Endlosform (in dem sich der Code befindet,) wird nicht in einem UFO-Steuerelement angezeigt.


=DomWert("BilderPfad";"tblBildPfad")
Die Ereignisprozedur beim Doppelklicken des Bildes sieht sieht so aus:



ZitatDoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, Dlookup("BilderPfad";"tblBildPfad")  & "\" & Me.BilderOrdner & "\" & Me.Verzeichnisname & "\" & Me.BildDateiName

Wenn ich jetzt doppelklicke, dann geht es bis auf das erwähnte Thema, dass immer das gleiche Bild kommt.

Ja, ich verstehe jetzt aber immer noch nicht, wieso es da mit dem Bildpfad klappt.



Ist ja normal... Der Steuerelementinhalt des Bild-Steuerelementes ändert sich ja auch nicht (m. M. nach..)  .

Ändere den Aufruf so ab wie oben in Rot dargestellt.

Oder gibt es diesen Code im frmDeckblatt:


Sub Form_Load_()

If not IsNull(Me.Openargs) Then
Me!BildSteuerelement.Controlsource = "=" & Me.Openargs
End If

End Sub


oder auch

Sub Form_Load_()

If not IsNull(Me.Openargs) Then
'Me!BildSteuerelement.ControlSource =""   'evtl. erforderlich
Me!BildSteuerelement.Picture =  Me.Openargs
End If
End Sub



ZitatIch kann das ausführen, aber im Direktbereich kommt nichts,

Das kann gar nicht sein...  Scroll mal im Direktfenster rauf und runter....

Kannst Du den Haltepunkt setzen?

Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: derilzemer am September 22, 2017, 14:48:33
Hallo Franz,
Zitat von: DF6GL am September 22, 2017, 13:28:32
ZitatDomwert weglassen
Ok, da hab ich die Anpassung "versäumt" (und Code im UFO)
Debug.Print DLookup("BilderPfad","tblBildPfad") & Me![BilderOrdner] & "\" & Me![Verzeichnisname] & "\" & Me![BildDateiName]

Es ist ja kein UFO, sondern ein normales, eigenständiges Formular.

Zitat
Dann ist das Formular kein UFO , d. h. das Endlosform (in dem sich der Code befindet,) wird nicht in einem UFO-Steuerelement angezeigt.
Jo, hatte ich aber mehrfach erwähnt. Dass ich dann Parent doch verwendet habe ist das Thema, dass man alles versucht auch wenn es jeglicher Logik entsagt :(.

ZitatÄndere den Aufruf so ab wie oben in Rot dargestellt.
Oder gibt es diesen Code im frmDeckblatt:
Sub Form_Load_()
If not IsNull(Me.Openargs) Then
Me!BildSteuerelement.Controlsource = "=" & Me.Openargs
End If
End Sub


oder auch

Sub Form_Load_()
If not IsNull(Me.Openargs) Then
'Me!BildSteuerelement.ControlSource =""   'evtl. erforderlich
Me!BildSteuerelement.Picture =  Me.Openargs
End If
End Sub
Nein gibt es nicht diese Codezusätze. Wenn ich in die DoCmd Zeile mit DLookup so gleich anpasse, und den Pfadhinweis aus dem Detailbereich entferne, dann geht das jetzt mit dem Bild aufrufen. Es besteht also nur noch das Problem mit dem Bild anzeigen, wenn ich ein Bild eines anderen Datensatzes doppelklicke. Da öffnet er dann also immer das zuletzt geöffnete. Ich muss über den Datensatzmarkierer den Datensatz marken, dann öffnet er auch das dazugehörige Bild. Das muss doch auch anders gehen, oder? Ob das mit dem Hinweis mit Recalc von Lachtaube geht weiss ich nicht

Gruß Andreas
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: DF6GL am September 22, 2017, 16:33:46
Hallo,


ok, wenn kein UFO, dann auch keine Parent_Eigenschaft...

ZitatDas muss doch auch anders gehen, oder? Ob das mit dem Hinweis mit Recalc von Lachtaube geht weiss ich nicht


Solange das Steuerelement (hier das Bild-St.-El.)  nicht an ein Datensatzfeld (aus dem Form-Recordset) gebunden ist,  wird auch der Fokus nicht auf den erwarteten DS gesetzt. 

Abhilfe könnte es sein, in der zugrundeliegenden Abfrage ein berechnetes Feld einzubauen, das mit dem besagten Ausdruck den Bild-Pfaddateinamen ermittelt.

Das hätte aber zur Folge, dass das Form nicht mehr aktualisierbar (d. h. die Felder in einer DS-Zeile) wäre.


Vielleicht könnte es auch gehen, das Bild "in den Hintergrund" zu setzen und ein vorhandenes (gebundenes) Textfeld als Kopie über das Bild zu platzieren.  Wenn dieses zusätzliche Textfeld dann passend formatiert wird, kann die Ereignisprozedur dieses Textfeldes fokussieren des DS und zum Öffnen des Anzeigeforms herhalten. Eine Schaltfläche wäre auch geeignet.

Ein Recalc wird vermutlich auch nichts nutzen...


Warum wehrst Du Dich gegen den Klick auf den DS-Markierer?

Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: Lachtaube am September 22, 2017, 16:41:01
OpenArgs wird nur beim Öffnen eines Formulars neu initialisiert - deswegen heißt es vermutlich auch so. Du kannst aber, solange das Formular nicht als Dialog geöffnet wird, im Doppelklickereignis das offene Formular adressieren.Private Sub Deinsteuerelement_DblClick(Cancel As Integer)
   DoCmd.OpenForm "Formname"
   Forms("Formname").Bildsteuerelementname.Picture = DLookup(...)
End Sub
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: derilzemer am September 22, 2017, 17:50:48
Hallo Franz,
Zitat von: DF6GL am September 22, 2017, 16:33:46
Warum wehrst Du Dich gegen den Klick auf den DS-Markierer?
Ich wehre mich nur wie ein typischer User, der irgendwie immer den schnellsten Weg sucht, auch wenn es wie in diesem Fall nur ein Klick wäre :(.

Gruß Andreas
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: derilzemer am September 22, 2017, 18:04:14
Hi,
Zitat von: Lachtaube am September 22, 2017, 16:41:01
Du kannst aber, solange das Formular nicht als Dialog geöffnet wird, im Doppelklickereignis das offene Formular adressieren.Private Sub Deinsteuerelement_DblClick(Cancel As Integer)
   DoCmd.OpenForm "Formname"
   Forms("Formname").Bildsteuerelementname.Picture = DLookup(...)
End Sub

Ich habe das mal so gemacht.
Private Sub imgDeckblattThumb_DblClick(Cancel As Integer)
'     DoCmd.OpenForm "frmDeckblatt", acNormal, , , , acDialog, DLookup("BilderPfad", "tblBildPfad") & "\" & Me.BilderOrdner & "\" & Me.Verzeichnisname & "\" & Me.BildDateiName
    DoCmd.OpenForm "frmDeckblatt"
Forms("frmDeckblatt").imgDeckblattThumb.Picture = DLookup("BilderPfad", "tblBildPfad") & "\" & Me.BilderOrdner & "\" & Me.Verzeichnisname & "\" & Me.BildDateiName
End Sub


Beim ausführen des Doppelklicks, bringt er Laufzeitfehler 94: Unzulässige Verwendung von Null.
Klicke ich dann aud Debuggen, dann springt er im VB Editor zur frmDeckblatt, und markiert die ZTeile
Private Sub Form_Open(Cancel As Integer)
   [color=yellow]Me.imgqryDeckblatt.Picture = Me.OpenArgs[/color]
End Sub


Was müsste ich ändern?

Gruß Andreas
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: DF6GL am September 22, 2017, 18:38:37
Hallo,

die Form-Open-Ereignisprozedur wegwerfen...   8)

Natürlich is t Me.Openargs   NULL, wenn Du gar nichts als Parameter übergibst.... ;)
Titel: Re: Laufzeitfehler 2447 beim Doppelklick
Beitrag von: derilzemer am September 22, 2017, 18:50:51
Hi,
Zitat von: DF6GL am September 22, 2017, 18:38:37
die Form-Open-Ereignisprozedur wegwerfen...   8)
:-[ dann öffnet er zwar das frmDeckblatt, aber er zeigt auch kein Bild an. Im übrigen funkioniert das gleiche Feature (doppelklick auf thumb zeigt großes Bild an) aus einem Ufo heraus bestens (hatte ich ja mal im Thread erwähnt). Von daher würde ich da wohl eher nichts ändern. Dann beiss ich in den sauren Apfel und nutze das eben über den DS Markierer oder baue das Suchformular nach dem Muster des Bilderfeature aus dem Ufo, damit es genauso funktioniert :(. Aber jetzt erst mal so.

Gruß Andreas