Hallo,
ich habe ein Bild-Unterformular, welches mir beim laden immer eine bestimmte ID (bestimmte Bildtyp) anzeigen soll, da in diesem Bild-Ufo viele Arten Bilder geladen/hinterlegt werden können. Mit im Spiel sind die Tabellen tblBilderZuSpiel und tblBildmotive. Dem Ufo ist als Ereignis beim laden folgender Code hinterlegt.
Private Sub Form_Load()
Me.RecordSelectors = False
Me.Recordset.FindFirst "[BildmotivID_F] =1 or [BildmotivID_F] =5"
End Sub
ID 1 = Deckblatt (DB) und ID 5 = Schachtel-DB.
Grundsätzlich funktioniert das auch, bis auf ein paar rühmliche Ausnahmen, was ich jetzt nicht wirklich nachvollziehen kann, warum das so ist. Die Ausnahme ist immer dann der Fall, wenn ich ID8 = Box/Schachtel auswähle. Wenn man dann einen Solchen Datensatz aufruft, dann zeigt er grundsätzlich genau das Bild (ID8) an, obwohl ID1 oder ID5 zur Auswahl steht (bild1--> Ausnahme und bild2 -->Normalfall) :(. Es bleibt noch zu sagen, dass auf der Auswahlliste ein select gebunden ist, der das Bildmotiv sortiert. Dies dürfte doch aber das ganze nicht beeinflussen, oder?
SELECT tblBilderZuSpiel.BildmotivID_F, tblBildmotive.Bildmotiv
FROM tblBildmotive INNER JOIN tblBilderZuSpiel ON tblBildmotive.BildMotivID = tblBilderZuSpiel.BildmotivID_F
WHERE (((tblBilderZuSpiel.SpielID_F)=[Formulare]![frmErfassung]![txtSpielID])) OR (((tblBilderZuSpiel.BildmotivID_F)=1))
ORDER BY tblBildmotive.Bildmotiv;
Deswegen würde ich mich über eure Ideen bzw. Hilfe freuen, damit ich das abstellen kann und das Ereignis immer funktioniert.
Ich bin aktuell nicht so angebunden was Internet angeht wie ich das gerne hätte aber auch okay ist. Ich bin in Reha wegen Rücken, da sollte I-Net 2. rangig sein. Deswegen kann ich auch nicht immer sofort antworten wie gewohnt. Eure Hilfe wäre dennoch gewünscht.
Gruß Andreas
Hallo,
hat niemand eine Idee, worin das Problem liegen könnte?
mfG
Andreas
Ich verstehe das Problem nicht.
Deine Form_Load Prozedure macht im meinen Augen keinen Sinn.
Frithjof
Hi
Zitat von: Frithjiof am November 13, 2017, 12:39:32
Ich verstehe das Problem nicht.
Deine Form_Load Prozedure macht im meinen Augen keinen Sinn.
Private Sub Form_Load()
Me.RecordSelectors = False
Me.Recordset.FindFirst "[BildmotivID_F] =1 or [BildmotivID_F] =5"
End Sub
Wie soll man es dann lösen, damit er beim Laden des UFO ID 1 oder 5 anzeigt? Was ist daran "unsinnig"? Es stimmt zwar, daß ich bei nur wenigen Datensätzen das Problem habe, dass er NICHT ID 1 oder 5 lädt, aber was wäre dann der richtige Ansatz?
Gruß Andreas
Fernanalysen der Daten sind wohl nicht möglich. Ob FindFirst erfolgreich war, lässt sich mit der Methode NoMatch des Recordsets herausfinden. Diese gibt dann False bei Erfolg und True bei Misserfolg zurück.
PS: ... und die Navigationsleiste kannst Du doch im Entwurfsmodus abstellen.
Genau, Findfirst ist eine Methode die einen Recordset durchsucht, aber nicht einschränkt(filtert).
für Deine Absicht, wenn ich Dich richtig verstehe müsstes sowas helfen:
Me.filter="[BildmotivID_F] =1 or [BildmotivID_F] =5"
Me.FilterOn =true
Folgendes solte es auch tun:
Me.RowSource= "Select xxx.[BildmotivID_F], [xxx].[zzz] from xxx where xxx.[BildmotivID_F] =1 or xxx.[BildmotivID_F] =5;"
Hi,
Zitat von: Frithjiof am November 13, 2017, 15:54:18
Genau, Findfirst ist eine Methode die einen Recordset durchsucht, aber nicht einschränkt(filtert).
für Deine Absicht, wenn ich Dich richtig verstehe müsstes sowas helfen:
Me.filter="[BildmotivID_F] =1 or [BildmotivID_F] =5"
Me.FilterOn =true
Okay, damit setzt er jetzt definitiv 1 oder 5, das wäre ja okay. Aber dann kann ich mir aber auch KEIN anderes Bild mehr aus der Liste anschauen. Ich kann es zwar anwählen, aber er bleibt hart auf ID 1 oder 5, eben wegen dem Filter denke ich mal, oder?
Gruß Andreas
Hi,
Zitat von: Lachtaube am November 13, 2017, 15:40:47
Fernanalysen der Daten sind wohl nicht möglich. Ob FindFirst erfolgreich war, lässt sich mit der Methode NoMatch des Recordsets herausfinden. Diese gibt dann False bei Erfolg und True bei Misserfolg zurück.
Die Codeänderung von Frithjiof hilft bedingt weiter, beseitigt die Auffälligkeit, aber schafft ein anderes Problem, nämlich dass ich nicht mehr in den Bildern hin und her switchen kann wenn nötig.
ZitatPS: ... und die Navigationsleiste kannst Du doch im Entwurfsmodus abstellen.
Wollte ich eine Navigationsleiste abstellen, oder meinst du die Liste Links zum auswählen? Die will ich natürlich nicht abstellen. Ich will ja nur, dass wenn man in einen Datensatz springt, generell das Deckblatt des Spieles angezeigt wird. Es muss aber weiterhin die Möglichkeit bestehen, dass ich aus der Liste mir auch noch ein anderes Bild auswählen und anschauen kann.
Gruß Andreas
Hallo Andreas,
Zitatdass er NICHT ID 1 oder 5 lädt
Dann würde ich vermuten, dass es diese bei dem gewählten Spiel nicht gibt.
Prüfe also, wie angeregt,
Me.Recordset.FindFirst "[BildmotivID_F] =1 or [BildmotivID_F] =5"
If Me.Recordset.NoMatch Then ...
gruss ekkehard
Zitat von: derilzemer am November 13, 2017, 16:31:28
Die Codeänderung von Frithjiof hilft bedingt weiter, beseitigt die Auffälligkeit, aber schafft ein anderes Problem, nämlich dass ich nicht mehr in den Bildern hin und her switchen kann wenn nötig.
Um hin und her zu switchen muss der Filter angepasst werden.
Me.filter="[BildmotivID_F] =" & XXX
Me.FilterOn =trueDie (m.E. bessere) Variante, die ich in der Regel bevorzuge ist die Aktualisierung des Sql-Statements:
Me.RowSource= "Select xxx.[BildmotivID_F], [xxx].[zzz] from xxx where xxx.[BildmotivID_F] =" & neue_ID & ";"Frithjof
Hi Ekkehard,
Zitat von: Beaker s.a. am November 13, 2017, 17:14:27
Zitatdass er NICHT ID 1 oder 5 lädt
Dann würde ich vermuten, dass es diese bei dem gewählten Spiel nicht gibt.
Ist definitiv da, ist auch richtig benamst etc. und wie man im Bild im Einstiegsthread sieht ist Schachtel-DB (ID 5) ja hinzugefügt.
Gruß Andreas
Hi Frithjiof,
Zitat von: Frithjiof am November 14, 2017, 01:49:14
Um hin und her zu switchen muss der Filter angepasst werden.
Me.filter="[BildmotivID_F] =" & XXX
Me.FilterOn =true
Dir habe ich es ja noch nicht gesagt, aber VBA und SQL technisch bin ich ziemlich mau bestückt, aber das ist dir sicherlich schon aufgefallen :(. Bedeutet das, dass ich hier feste ID's im Filter dazu schreiben müsste?
Zitat
Die (m.E. bessere) Variante, die ich in der Regel bevorzuge ist die Aktualisierung des Sql-Statements:
Me.RowSource= "Select xxx.[BildmotivID_F], [xxx].[zzz] from xxx where xxx.[BildmotivID_F] =" & neue_ID & ";"
Du würdest das im VBA präferieren gegenüber der Filtervariante, welche du mir vorgeschlagen hattest.
Me.RowSource= "Select tbl.BilderZuSpiel[BildmotivID_F] from tblBilderZuSpiel where tbl.BilderZuSpiel.[BildmotivID_F] =" & neue_ID & ";"Hier verstehe ich im letzten Teil nicht
(=" & neue_ID & ";"), wie er 1 und 5 primär setzt und wie man dennoch switchen kann :(. Sorry
Gruß Andreas
Hallo Andreas.
Vorweg, ich habe mich nochmal mit dem, mir auf dem ersten Blick suspekt erscheinenden, Befehl
Me.Recordset.FindFirst "[BildmotivID_F] =1 or [BildmotivID_F] =5"beschäftigt.
Prinzipiell sollte er funktionieren allerdings schreibt Microsoft hier (https://msdn.microsoft.com/de-de/VBA/access-vba/articles/form-recordsetclone-property-access) dass die Methode auf Formularebene nicht funktioniert.
Richtig müsst es so lauten
Me.Recordsetclone.FindFirst "[BildmotivID_F] =1 or [BildmotivID_F] =5"
Me.Bookmark = Me.RecordsetClone.Bookmark
Ist es unsicher, ob [BildmotivID_F] =1 oder [BildmotivID_F] =5 überhaupt im Recordset enthalten sind, solltest Du, wie bereits von Lachtaube und Ekkehard angeregt mit "NoMatch" erstmal prüfen.
Me.Recordsetclone.FindFirst "[BildmotivID_F] =1 or [BildmotivID_F] =5"
If Me.Recordsetclone.NoMatch Then
msgbox "Was mach ich jetzt?"
else
Me.Bookmark = Me.RecordsetClone.Bookmark
endif
Zitat von: derilzemer am November 14, 2017, 21:38:04
Me.RowSource= "Select tbl.BilderZuSpiel[BildmotivID_F] from tblBilderZuSpiel where tbl.BilderZuSpiel.[BildmotivID_F] =" & neue_ID & ";"
Hier verstehe ich im letzten Teil nicht (=" & neue_ID & ";"), wie er 1 und 5 primär setzt und wie man dennoch switchen kann :(. Sorry
<
Me.RecordSource> kann während der Laufzeit geändert werden.
(sorry, nicht
Me.RowSource >> so heisst das nur in Kombinations- und Listenfeldern.)
Egal welche Methode (Filter, Bookmark, SQL) Du zum ,,switchen" wählst, irgendwoher muss ja eine <neue_ID> kommen.
In Deinem Formular klickt der Benutzer auf einen Eintrag in der Liste <Bildmotiv> und dann wird das Bild angezeigt. Die ,,neue_ID" wäre vermutlich (kommt auf die Rowsource des Listenfeldes an) der aktuelle Wert aus der Liste <Bildmotiv>.
Sub Bildmotiv_AfterUpdate() ' oder beim Klicken oder ...
if nz(me.bildmotiv,0)>0 then
Me.RecordSource= "Select tbl.BilderZuSpiel[BildmotivID_F] from tblBilderZuSpiel where tbl.BilderZuSpiel.[BildmotivID_F] =" & me.bildmotiv & ";"
else
'irgendwas oder nichts tun
endif
end sub
oder
Sub Bildmotiv_AfterUpdate() ' oder beim Klicken oder ...
if nz(me.bildmotiv,0)>0 then
Me.Recordsetclone.FindFirst "[BildmotivID_F] =" & me.bildmotiv
Me.Bookmark = Me.RecordsetClone.Bookmark
endif
end sub
Frithjof
Hi Frithjiof,
Danke wegen der Recherche. Also ich habe mal folgendes gemacht.
Private Sub Form_Load()
Me.RecordsetClone.FindFirst "[BildmotivID_F] =1 or [BildmotivID_F] =5"
If Me.RecordsetClone.NoMatch Then
MsgBox "Was mach ich jetzt?"
Else
Me.Bookmark = Me.RecordsetClone.Bookmark
End If
End Sub
Mit dieser Einstellung ändert sich erst mal nichts. In meinem Beispieldatensatz wählt er weiterhin die falsche ID (Box/Schachtel) und nicht Schachtel-DB. Er meckert aber auch nicht, dass es die 5 nicht gibt. Die NoMatch Prüfung schlägt auch nicht an, ergo ist die ID da. Ich habe dann nochmal deinen 1. Vorschlag genommen mit dem Filter, das ging dann am Beispieldatensatz aber ich kann dann eben nicht switchen, auch wenn ich das AfterUpdate Ereignis integriere, was du mir zum Schluss gezeigt hast.
Private Sub Bildmotiv_AfterUpdate() ' oder beim Klicken oder ...
If Nz(Me.BildmotivID_F, 0) > 0 Then
Me.RecordsetClone.FindFirst "[BildmotivID_F] =" & Me.BildmotivID_F
Me.Bookmark = Me.RecordsetClone.Bookmark
End If
' Me.lstBmWahl.Requery
' Me.Recalc
End SubDass es mit dem Filter zum Teil geht zeigt ja nur, dass die Sourcen bzw. die ID's da sind.
Zitat von: derilzemer am November 14, 2017, 21:38:04
Egal welche Methode (Filter, Bookmark, SQL) Du zum ,,switchen" wählst, irgendwoher muss ja eine <neue_ID> kommen.
In Deinem Formular klickt der Benutzer auf einen Eintrag in der Liste <Bildmotiv> und dann wird das Bild angezeigt. Die ,,neue_ID" wäre vermutlich (kommt auf die Rowsource des Listenfeldes an) der aktuelle Wert aus der Liste <Bildmotiv>.
Dem Listenfeld liegt diese Abfrage zugrunde:
SELECT tblBilderZuSpiel.BildmotivID_F, tblBildmotive.Bildmotiv
FROM tblBildmotive INNER JOIN tblBilderZuSpiel ON tblBildmotive.BildMotivID = tblBilderZuSpiel.BildmotivID_F
WHERE (((tblBilderZuSpiel.SpielID_F)=[Formulare]![frmErfassung]![txtSpielID]))
ORDER BY tblBildmotive.Bildmotiv;
Zitat von: Frithjiof am November 15, 2017, 11:18:49
Sub Bildmotiv_AfterUpdate() ' oder beim Klicken oder ...
if nz(me.bildmotiv,0)>0 then
Me.Recordsetclone.FindFirst "[BildmotivID_F] =" & me.bildmotiv
Me.Bookmark = Me.RecordsetClone.Bookmark
endif
end sub
Den habe ich zwar wie gesagt integriert, aber es geht eben nicht. Ich bekomme auch keinen Fehler als Meldung :(. Ich bin mal wieder ratlos und denke, dass ich mal wieder irgendwo Mist baue :(. Aber dann meine ich sollte ich doch eine Fehlermeldung bekommen, oder?
Also zusammenfassend habe ich jetzt folgende Konfiguration:
Private Sub Form_Load()
Me.RecordsetClone.FindFirst "[BildmotivID_F] =1 or [BildmotivID_F] =5"
If Me.RecordsetClone.NoMatch Then
MsgBox "Was mach ich jetzt?"
Else
Me.Bookmark = Me.RecordsetClone.Bookmark
End If
End SubPrivate Sub Bildmotiv_AfterUpdate() ' oder beim Klicken oder ...
If Nz(Me.BildmotivID_F, 0) > 0 Then
Me.RecordsetClone.FindFirst "[BildmotivID_F] =" & Me.BildmotivID_F
Me.Bookmark = Me.RecordsetClone.Bookmark
End If
End SubIch habe im VBA Teil für frmErfassungUfoBilder noch folgenden Passus gefunden und weiss nicht, ob das konträr arbeitet:
Private Sub lstBmWahl_AfterUpdate()
' Den mit dem Steuerelement übereinstimmenden Datensatz suchen.
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[BildmotivID_F] = " & str(Nz(Me![lstBmWahl], 0))
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End SubGruß vom leicht verwirrten
Andreas
Zitat von: derilzemer am November 15, 2017, 19:37:24
Mit dieser Einstellung ändert sich erst mal nichts. In meinem Beispieldatensatz wählt er weiterhin die falsche ID (Box/Schachtel) und nicht Schachtel-DB. Er meckert aber auch nicht, dass es die 5 nicht gibt. Die NoMatch Prüfung schlägt auch nicht an, ergo ist die ID da.
Die Bedingung "[BildmotivID_F] =1 or [BildmotivID_F] =5" lässt 2 Bilder zu. Welches anfangs angezeigt wird hängt ab vom gegenwärtigen Zustand des Recordsets.
Wenn immer Bild Nr. 5 angezeigt werden soll, dann darf da nur "[BildmotivID_F] =5 " stehen.
Private Sub Form_Load()
Me.FilterOn =false 'fals Filter gesetzt sind
Me.Filter="" 'Filter löschen falls welche gespeichert wurden
Me.RecordsetClone.FindFirst "[BildmotivID_F] =5"
If Me.RecordsetClone.NoMatch Then
MsgBox "Was mach ich jetzt?"
Else
Me.Bookmark = Me.RecordsetClone.Bookmark
End If
End Sub
Deine Bilder-Auswahlliste heißt offensichtlich <lstBmWahl> (nicht wie in meinem Beispiel <Bildmotiv>)
also lautet die Ereignissprozedur:
Private Sub lstBmWahl_AfterUpdate()
if nz(me.lstBmWahl,0)>0 then
Me.Recordsetclone.FindFirst "[BildmotivID_F] =" & me.lstBmWahl
Me.Bookmark = Me.RecordsetClone.Bookmark
endif
end sub
So müsste es gehn.
Hi,
Zitat von: Frithjiof am November 15, 2017, 21:12:28
Die Bedingung "[BildmotivID_F] =1 or [BildmotivID_F] =5" lässt 2 Bilder zu. Welches anfangs angezeigt wird hängt ab vom gegenwärtigen Zustand des Recordsets.
Wenn immer Bild Nr. 5 angezeigt werden soll, dann darf da nur "[BildmotivID_F] =5 " stehen.
Nein, es muss bei
Me.RecordsetClone.FindFirst "[BildmotivID_F] =1 or [BildmotivID_F] =5" bleiben. Da ich 2550 Datensätze habe, habe ich mal ID1 oder 5, eben ganz unterschiedlich. Egal welchen Datensatz ich aufrufe, es soll/muss dann auf alle Fälle die 1 oder 5 angezeigt werden, das hängt dann vom Spiel ab.
'Private Sub Bildmotiv_AfterUpdate() habe ich jetzt komplett deaktiviert und folgende Konfig habe ich jetzt im VBA hinterlegt:
Private Sub Form_Load()
Me.RecordsetClone.FindFirst "[BildmotivID_F] =1 or [BildmotivID_F] =5"
Me.FilterOn = False 'falls Filter gesetzt sind
Me.Filter = "" 'Filter löschen falls welche gespeichert wurden
Me.RecordsetClone.FindFirst "[BildmotivID_F] =1 or [BildmotivID_F] =5"
If Me.RecordsetClone.NoMatch Then
MsgBox "Was mach ich jetzt?"
Else
Me.Bookmark = Me.RecordsetClone.Bookmark
End If
End SubPrivate Sub lstBmWahl_AfterUpdate()
If Nz(Me.lstBmWahl, 0) > 0 Then
Me.RecordsetClone.FindFirst "[BildmotivID_F] =" & Me.lstBmWahl
Me.Bookmark = Me.RecordsetClone.Bookmark
End If
End Sub
Im Beispieldatensatz zeigt er mir jetzt weiterhin die ID8 an, Box/Schachtel (siehe bild1).
Im UFO habe ich unter Eigenschaften unter Daten
[BildmotivID_F] =1 or [BildmotivID_F] =5 stehen, das passt ja alles soweit. Das ist die Query fürs UFO:
SELECT tblBilderZuSpiel.BildZuSpielID, tblBilderZuSpiel.BildmotivID_F, tblBilderZuSpiel.SpielID_F, tblBilderZuSpiel.BildDateiName, tblBilderZuSpiel.AnmerkungenBild, tblBilderZuSpiel.Format
FROM tblBilderZuSpiel
ORDER BY tblBilderZuSpiel.SpielID_F;
Ich muss jetzt mal alle Datensätze "durchforsten", wo ich noch solche Beispiel habe. Das ist ja unfassbar.
Gruß Andreas
Hallo Andreas
Zitat von: derilzemer am November 15, 2017, 21:43:34
Nein, es muss bei Me.RecordsetClone.FindFirst "[BildmotivID_F] =1 or [BildmotivID_F] =5" bleiben. Da ich 2550 Datensätze habe, habe ich mal ID1 oder 5, eben ganz unterschiedlich. Egal welchen Datensatz ich aufrufe, es soll/muss dann auf alle Fälle die 1 oder 5 angezeigt werden, das hängt dann vom Spiel ab.
Eine Abhängigkeit vom Spiel ist bis jetzt nirgendwo definiert oder ändert sich irgendwo noch die Recordsource des Formulars? Beim Laden des Formulars wird einfach der erste Datensatz mit BildNr 1 oder 5 ausgewählt.
Zitat von: derilzemer am November 15, 2017, 21:43:34
'Private Sub Bildmotiv_AfterUpdate() habe ich jetzt komplett deaktiviert und folgende Konfig habe ich jetzt im VBA hinterlegt:
Was eine Ereignisprozedur ist, ist dir aber klar?
Zitat von: derilzemer am November 15, 2017, 21:43:34
Private Sub Form_Load()
Me.RecordsetClone.FindFirst "[BildmotivID_F] =1 or [BildmotivID_F] =5"
Me.FilterOn = False 'falls Filter gesetzt sind
Me.Filter = "" 'Filter löschen falls welche gespeichert wurden
Me.RecordsetClone.FindFirst "[BildmotivID_F] =1 or [BildmotivID_F] =5"
If Me.RecordsetClone.NoMatch Then
MsgBox "Was mach ich jetzt?"
Else
Me.Bookmark = Me.RecordsetClone.Bookmark
End If
End Sub
Also, damit dieser Code abgearbeitet wird muss im Eigenschaftsblatt des Formulars das Ereignis <beim Laden> auf [Ereignisprozedur] gesetzt sein.
Zitat von: derilzemer am November 15, 2017, 21:43:34
Im Beispieldatensatz zeigt er mir jetzt weiterhin die ID8 an, Box/Schachtel (siehe bild1).
Wer oder was ist der Beispieldatensatz? Die Ereignisprozedur "Beim Laden" legt doch den ersten Datensatz fest.
Zitat von: derilzemer am November 15, 2017, 21:43:34
Im UFO habe ich unter Eigenschaften unter Daten [BildmotivID_F] =1 or [BildmotivID_F] =5 stehen, das passt ja alles soweit.
Unter <Daten> <Filter> oder wo? Von einem Unterformular war bisher auch noch nirgends nicht die Rede.
Vielleicht kannst du das mal hochladen. Wäre sicher einfacher, denn langsam tappe ich ins immer Dunklere.
Frithjof
Hi,
Zitat von: Frithjiof am November 15, 2017, 22:48:22
Eine Abhängigkeit vom Spiel ist bis jetzt nirgendwo definiert oder ändert sich irgendwo noch die Recordsource des Formulars? Beim Laden des Formulars wird einfach der erste Datensatz mit BildNr 1 oder 5 ausgewählt.
Mit Abhängigkeit vom Spiel mein ich so, dass es eben auf das Spiel ankommt, ob ich ID1 (Deckblatt-DB) oder ID5 (Schachtel-DB) als Bild hinzugefügt habe. Bei einem Spiel habe ich also entweder 1 oder 5 (siehe bild1=Spiel mit Deckblatt-DB +bild2=Spiel mit Schachtel-DB). Wenn ich ja den Datensatz anlege, dann füge ich eben entsprechend das Bild hinzu. Und das ist ja mein ansinnen. Egal welchen Datensatz ich jetzt aufrufe, er soll ja nur immer das Deckblatt anzeigen (ID1 oder ID5), da ich auch Spiele habe, wo ich eben mehrere Bilder hinzugefügt habe, bild3, das ist auch der Datensatz wo es z.B. NICHT funktioniert, obwohl das Schachtel-DB, ID5 definiert ist! Bei dem Datensatz zeigt er aber ID8 an, Box/Schachtel.
Zitat
Was eine Ereignisprozedur ist, ist dir aber klar?
Ja das ist es. Ich habe nur Probleme mit VBA oder sql selbst, der Rest vom Handling was Access angeht ist mir
durchaus klar, wobei es immer Sachen gibt die man so nicht wusste.
Zitat
Also, damit dieser Code abgearbeitet wird muss im Eigenschaftsblatt des Formulars das Ereignis <beim Laden> auf [Ereignisprozedur] gesetzt sein.
Dieser ist für das Formular frmErfassungUfoBilder unter Ereignis --> beim Laden gesetzt
Private Sub Form_Load()
Me.RecordsetClone.FindFirst "[BildmotivID_F] =1 or [BildmotivID_F] =5"
Me.FilterOn = False 'falls Filter gesetzt sind
Me.Filter = "" 'Filter löschen falls welche gespeichert wurden
Me.RecordsetClone.FindFirst "[BildmotivID_F] =1 or [BildmotivID_F] =5"
If Me.RecordsetClone.NoMatch Then
MsgBox "Was mach ich jetzt?"
Else
Me.Bookmark = Me.RecordsetClone.Bookmark
End If
End Sub
und dieser VBA Teil ist für die Liste (lstBmWahl) im Ufo unter Ereignis --> Nach Aktualisierung gesetzt
Private Sub lstBmWahl_AfterUpdate()
If Nz(Me.lstBmWahl, 0) > 0 Then
Me.RecordsetClone.FindFirst "[BildmotivID_F] =" & Me.lstBmWahl
Me.Bookmark = Me.RecordsetClone.Bookmark
End If
End SubZitat von: derilzemer am November 15, 2017, 21:43:34
Im Beispieldatensatz zeigt er mir jetzt weiterhin die ID8 an, Box/Schachtel (siehe bild1).
Siehe oben ....
Zitat von: derilzemer am November 15, 2017, 21:43:34
Im UFO habe ich unter Eigenschaften unter Daten [BildmotivID_F] =1 or [BildmotivID_F] =5 stehen, das passt ja alles soweit.
Zitat
Unter <Daten> <Filter> oder wo? Von einem Unterformular war bisher auch noch nirgends nicht die Rede.
Vielleicht kannst du das mal hochladen. Wäre sicher einfacher, denn langsam tappe ich ins immer Dunklere.
Wenn ich jetzt den Datensatz aufrufe, wo er mir das falsche Bild anzeigt (bild3) und ich dann in die Entwurfsansicht gehe und frmErfassungUfoBilder markiere, dann habe ich im Eigenschaftenblatt unter Daten
--> Filter
[BildmotivID_F] =1 or [BildmotivID_F] =5 stehen. Das ist ja auch i.O. Ich meinte ja nur, warum er dann das Bild (ID5) nicht anzeigt obwohl es da ist.
Ich kann dir natürlich die DB hochladen, muss ich nur vorbereiten, Datensätze raus etc. (ca 3 MB). Wenn es so einfacher wäre, kann ich schon machen. In der Vergangenheit war es nur so, dass es dann doch nichts gebracht hat.
Gruß Andreas
Hallo Andreas.
Zitatob ich ID1 (Deckblatt-DB) oder ID5 (Schachtel-DB) als Bild hinzugefügt habe.
1.
Sind die Bilder kategorisiert? Es geht also nicht um die Bildnummer sondern um die Bildkategorie?
Wenn ich allerdings diesen SQL string anschaue (Bildmotiv-Liste) versehe ich überhaupt nix mehr.
SELECT tblBilderZuSpiel.BildmotivID_F, tblBildmotive.Bildmotiv
FROM tblBildmotive INNER JOIN tblBilderZuSpiel ON tblBildmotive.BildMotivID = tblBilderZuSpiel.BildmotivID_F
WHERE (((tblBilderZuSpiel.SpielID_F)=[Formulare]![frmErfassung]![txtSpielID]))
ORDER BY tblBildmotive.Bildmotiv;In welcher Tabelle steht ob es sich bei dem Bild um Schachtel, Deckblatt, Rückseite usw. handelt? Speicherst du diese Info zu jedem Bild ab? Das sieht jedenfalls so aus.
Leider gibt es dann nur ein einziges Bild mit der BildMotivID=1 und ein anderes mit BildMotivID=5. Und die sind dann einem bestimmten Spiel zugeordnet.
Um "Schachtel-DB" oder "Deckblatt" zu suchen müsstest es so lauten:
Me.RecordsetClone.FindFirst "[Bildmotiv] ='Schachtel-DB' or [Bildmotiv] ='Deckblatt(DB)'"2.
Wo wählst du den Datensatz.
Das "Beim Laden"-Ereignis (Sub Form_Load() ) ist vermutlich nicht die beste Wahl um Filter zu setzen.
Frithjof
Hi,
Zitat von: Frithjiof am November 16, 2017, 19:47:15
Sind die Bilder kategorisiert? Es geht also nicht um die Bildnummer sondern um die Bildkategorie?
Zumindest habe ich eine Namenskonvention was die Bilder angeht. Als Beispiel Spiel 3200_1970_db.png, 3200_1970_id.png, 3200_1970_rs.png, 3200_1970_1a.png, 3200_1970_wk.png, 3200_1970_rk.png usw.
_db.png=Deckblatt, _id.png=Identkarte, _rs.png=Rückseite, _1a.png=Spielkarte (1a-9d), _wk.png=Werbekarte und _rk.png=Regelkarte.
ZitatIn welcher Tabelle steht ob es sich bei dem Bild um Schachtel, Deckblatt, Rückseite usw. handelt? Speicherst du diese Info zu jedem Bild ab? Das sieht jedenfalls so aus.
Das alleine steht in der tblBildMotive, zumindest sind da die Kartenarten definiert, insgesamt 34 Möglichkeiten bzw. Kartenarten.
Zitat
Wenn ich allerdings diesen SQL string anschaue (Bildmotiv-Liste) versehe ich überhaupt nix mehr.
SELECT tblBilderZuSpiel.BildmotivID_F, tblBildmotive.Bildmotiv
FROM tblBildmotive INNER JOIN tblBilderZuSpiel ON tblBildmotive.BildMotivID = tblBilderZuSpiel.BildmotivID_F
WHERE (((tblBilderZuSpiel.SpielID_F)=[Formulare]![frmErfassung]![txtSpielID]))
ORDER BY tblBildmotive.Bildmotiv;
Und womit genau hast du das Problem?
ZitatUm "Schachtel-DB" oder "Deckblatt" zu suchen müsstest es so lauten:
Me.RecordsetClone.FindFirst "[Bildmotiv] ='Schachtel-DB' or [Bildmotiv] ='Deckblatt(DB)'"
Ist da die ID nicht eindeutiger bzw. die richtige Wahl?
ZitatWo wählst du den Datensatz.
Das "Beim Laden"-Ereignis (Sub Form_Load() ) ist vermutlich nicht die beste Wahl um Filter zu setzen.
Wenn ich ein neues Spiel bekomme, dann füge ich dem Spiel über frmErfassungUfoBilder ein Bild hinzu, eben das Deckblatt (das immer) und eventuell noch andere Karten wie Rückseiten etc. Dazu gehe ich über ein CMD-Button Bild hinzufügen, das mir die Liste der Bildmotive öffnet in der ich den Bildtyp auswähle wie eben Deckblatt (DB) oder Identkarte etc., und dann wähle ich das Bild via Doppelklick im Ufo auf dem Laufwerk aus. Das wars schon. Mehr oder weniger ist dass nur eine Verknüpfung die ich da herstelle, da die Bilder natürlich nicht in der DB gespeichert werden.
Beim Deckblatt unterscheide ich deshalb, weil es zum einen Spiele gibt, wo du ein Deckblatt dabei hast als lose Karte, da wähle ich Deckblatt (DB) aus. Früher (um 1900-1965) gab es die Spiele in Kartons, welche auf dem Karton das Deckblatt aufgeklebt hatten. Habe ich solch ein Spiel, dann wähle ich Schachtel-DB aus.
Wegen dem Filter, der ist ja nur später von Nöten, wenn ich mir eben einen Datensatz anschaue. Habe ich da ein Datensatz wie z.B. bild3 im Thread #17, welcher mehrere Bilder beinhaltet, dann soll er ja eben zwingend erst das Deckblatt (DB) oder wenn es ein Schachtel Spiel ist Schachtel-DB anzeigen! Wenn ich solche einen Datensatz aufrufe, dann bekomme ich immer schon ein Bild angezeigt (bild1), ich muss da nicht mehr erneut ein Bild hinzufügen, verstehst du?
Ich hoffe es ist jetzt ein wenig verständlicher.
Gruß Andreas
Ich hab das Thema nur überflogen, würde aber zwei Rückfragen stellen:
- Zeigst Du immer vollständige Codes? Ein Requery nach einem FindFirst würde wieder den ersten Datensatz auswählen gemäß Sortierung der Datenquelle, egal was man vorher angestellt hat. Je nach Gestaltung können dann auch solche Aktionen in einem Hauptformular die Anzeige im Unterformular beeinflussen.
- Mir ist jetzt nicht bewusst, wie die Datenquelle des Formulars sortiert ist und wie wichtig diese für Dich ist.
Es ist aber so, dass bei einem Laden des Formulars der Fokus des Datensatzzeigers auf dem ersten Datensatz liegt. Wenn man also so sortiert, dass das Gebrauchte gleich oben liegt, kann man sich den ganzen VBA-Kram sparen:
...
ORDER BY
BildmotivID_F = 1,
BildmotivID_F = 5,
BildmotivID_F
@Eberhard,
Wusste ich gar nicht dass das geht. Habe ich gleich mal getestet und festgestellt: bei Accesstabellen geht's bei ODBC-Verknüpften (Zu MS-SQLServer-DB) anscheinend nicht.
@Andreas
Leider helfen Deine Screenshots und Deine Beschreibungen nicht wirklich weiter.
Also: Jedes Spiel, ob in Schachtel oder nicht, hat ein anderes Deckblatt.
<tblBildmotive> enthält die Daten aller Bilder von allen Spielen. Der Primärschlüssel, die ID ist tblBildmotive.BildMotivID.
Wenn es so ist, dann kann
Select tblBildmotive.bBildMotivID from tblBildmotive where tblBildmotive.bBildMotivID= 1;
maximal nur ein einziges Bild zurückgeben. Also nicht ein Bild pro Spiel, sondern nur ein Bild pro Tabelle.
Um alle Schachteldeckblätter zu filtern müsste es so heißen.
Select tblBildmotive.bBildMotivID from tblBildmotive where tblBildmotive.XXX= 'Schachtel-DB';
Wobei für XXX der Name des Feldes (vermutlich <Bildmotiv>) einzutragen wäre in dem die Bild-Kategorie erfasst wird.
Wie gesagt ich tappe im Dunkeln und kann hier auch nur spekulieren.
Mit der von Eberhard vorgeschlagenen Sortierung müsstest der SQL-String der Bilderauswahlliste wie folgt lauten:
SELECT tblBilderZuSpiel.BildmotivID_F, tblBildmotive.Bildmotiv
FROM tblBildmotive INNER JOIN tblBilderZuSpiel ON tblBildmotive.BildMotivID = tblBilderZuSpiel.BildmotivID_F
WHERE(tblBilderZuSpiel.SpielID_F=[Formulare]![frmErfassung]![txtSpielID])
ORDER BY tblBildmotive.Bildmotiv ='Deckblatt(DB)',
tblBildmotive.Bildmotiv ='Schachtel-DB',
tblBildmotive.Bildmotiv;
Frithjof
Hallo Frithjof,
Kannst du mir erklären, warum du nicht das ID-Feld (wie von Eberhard
gezeigt) sondern das Bezeichnungsfeld aus der Tabelle verwendest?
gruss ekkehard
Hallo ekkehard
Zitat von: Beaker s.a. am November 18, 2017, 14:08:20
Kannst du mir erklären, warum du nicht das ID-Feld (wie von Eberhard
gezeigt) sondern das Bezeichnungsfeld aus der Tabelle verwendest?
Die Erklärung findet sich eigentlich im Beitrag. Aber gerne nochmal.
Die (Bild) ID bezieht sich auf ein bestimmtes Bild, z.B. das Deckblatt von Spiel X.
Das Deckblatt von Spiel Y hat aber eine andere (Bild) ID.
Gemeinsam ist beiden der Eintrag im Feld <Bildmotiv> z.B. "Deckblatt(DB)" (siehe sql-string der Bilderliste)
Wenn also das Spiel Y ausgewählt wird und ein Filter auf die Bild-ID des Deckblatts von Spiel X gesetzt wird, kann kein Ergebnis rauskommen weil die zum jeweiligen Spiel gehörenden Bilder in der Tabelle <tblBilderZuSpiel> duch <SpielID_F> <BildmotivID_F> festgelegt sind.
Durch:
WHERE(tblBilderZuSpiel.SpielID_F=[Formulare]![frmErfassung]![txtSpielID])werden die zum Spiel gehörenden Bilder gefiltert.
Ohne diesen Filter würde bei jedem Spiel das Deckblatt (BildID=1) vom Spiel X angezeigt.
Aber, wie gesagt, alles eher Spekulatius weil ja keine Datenstruktur vorliegt.
Frithjof
Hallo Frithjiof,
zuerst einmal danke für deine Gedanken und die Hilfe. Ja, ich hab das schön des öfteren gesagt bekommen, dass Screenies oftmals nicht helfen, leider. Man versucht eben mit dem kleineren Aufwand vorwärts zukommen. Aber andererseits ist meine DB historisch gewachsen und auch von den Kollegen Klaus, Anne etc. sehr gut aufgebaut was die Datenstruktur angeht. Ich bin dann immer hin und her gerissen, wenn es heißt das macht ja gar keinen Sinn :(. Aber sei es mal drum. Ich habe ja gesagt, dass ich schaue, wie viele der Datensätze nicht reagieren wie sie sollten. Es sind 3, mehr nicht. In einer Kopie der DB habe ich genau diese 3 Datensätze neu angelegt und siehe da, das Problem ist dort nicht vorhanden.
Ich habe jetzt alle Daten was die Bilder angeht gelöscht in den 3 Datensätzen gelöscht, die DB geschlossen und neu geöffnet. Erneut angelegt und jetzt funktionieren sie wie die anderen 2550 Datensätze der Speile auch. Ergo kann ich aktuell nur zu allen Beteiligten sorry sagen, wegen dem Aufwand den ich generiert habe. Ich werde jetzt NICHT den Code anpassen, da er funktioniert. Warum ich diesen Effekt hatte kann ich nicht beurteilen bzw. bewerten :(.
Sollte ich wieder ein Problem haben, dann werde ich gleich eine abgespeckte DB hochladen und gut. Dann sind das eben mal 130 MB (beinhaltet 10 komplette Datensätze mit Bildern), aber das ist ja heute kein Problem mehr wenn man solch einen Download tätigen muss.
Gruß und schönen Sonntag
Andreas
ZitatMan versucht eben mit dem kleineren Aufwand vorwärts zukommen ...
Dann sind das eben mal 130 MB
Damit man es sich einfach macht, lässt man die anderen etwas mehr tun. Auch so kann man Höflichkeit ausdrücken. Wenn man das als Hilfesuchender seinen Helfern zumutet, zeigt das, dass man Aufwand, Zeit und Ressourcen anderer nicht achtet - was dann die Hilfsbereitschaft unheimlich "fördert".
Für eine Demo des Problems wäre das Formular und zugehörige Abfragen und Tabellen mit wenigen Datensätzen ausreichend. Da braucht es dann auch keine Bedienungsanleitung, um des betroffene Formular zu finden. MegaByte-Bilder braucht man für das Wirken eines FindFirst auch nicht.
Komprimiert und gezippt ergibt das deutlich weniger als 100 KB.
Hi Eberhard,
Zitat von: ebs17 am November 19, 2017, 12:11:41
ZitatMan versucht eben mit dem kleineren Aufwand vorwärts zukommen ...
Dann sind das eben mal 130 MB
Damit man es sich einfach macht, lässt man die anderen etwas mehr tun. Auch so kann man Höflichkeit ausdrücken. Wenn man das als Hilfesuchender seinen Helfern zumutet, zeigt das, dass man Aufwand, Zeit und Ressourcen anderer nicht achtet - was dann die Hilfsbereitschaft unheimlich "fördert".
Sorry dass ich mich ehrlich entschuldigt habe....
Zitat
Für eine Demo des Problems wäre das Formular und zugehörige Abfragen und Tabellen mit wenigen Datensätzen ausreichend. Da braucht es dann auch keine Bedienungsanleitung, um des betroffene Formular zu finden. MegaByte-Bilder braucht man für das Wirken eines FindFirst auch nicht.
Komprimiert und gezippt ergibt das deutlich weniger als 100 KB.
Das sagst du jetzt. Da haben andere eben wieder eine andere Meinung und das ist auch eine Vergangenheitserfahrung.
Gruß Andreas
Zitatehrlich
Mich beschleicht immer so ein ... Gefühl, wenn Aussagen so gekennzeichnet werden.
Zitat
Da haben andere eben wieder eine andere Meinung
... die sie so geäußert haben? Im Zweifelsfall kann man andere darauf gezielt rückfragen.
Vor allem hilft aber das Identifizieren und Herauslösen des Problems in Zusammenhang mit den aktuellen Bedingungen zur Erstellung einer nur dafür geschaffenen Demo, die das Problem auch reproduzierbar macht, dass man da selber gründlicher analysieren und formulieren muss. Das sind bereits Elemente für eine Selbsthilfe, die durchaus dazu führen können, dass man dabei ein Problem durch Erkennen und Formulieren selber in Lösung bringt.
ZitatAber, wie gesagt, alles eher Spekulatius
Wenn so eine Aussage des Meisthelfers auch am Ende steht, stimmt mich das nachdenklich.
Hi Eberhard,
Zitat von: ebs17 am November 19, 2017, 13:34:27
ehrlich
Mich beschleicht immer so ein ... Gefühl, wenn Aussagen so gekennzeichnet werden.
Die Meinung und das Gefühl hast du dann exklusiv für dich.
ZitatVor allem hilft aber das Identifizieren und Herauslösen des Problems in Zusammenhang mit den aktuellen Bedingungen zur Erstellung einer nur dafür geschaffenen Demo, die das Problem auch reproduzierbar macht, dass man da selber gründlicher analysieren und formulieren muss. Das sind bereits Elemente für eine Selbsthilfe, die durchaus dazu führen können, dass man dabei ein Problem durch Erkennen und Formulieren selber in Lösung bringt.
Hab ich ja angedeutet mit der Demo, auch wenn sie kein 100k klein ist. Aber ja, da stimme ich dir ohne weiteres zu. Aber ich denke man kann und sollte durchaus unterscheiden, was ein jeder beruflich mit den Dingen zu tun hat. Es ist NICHT jedem möglich, dass er sich dann so "reinfuchsen" kann in komplexere Abläufe und es dann auch versteht, das ist einfach so. Zu solchen zähle ich mich leider. Dann ist es auch schwer, etwas "korrekt und verständlich zu erklären. Dann kommen manche Aussagen oder Erklärungen einfach nur Beschissen rüber oder verursachen nur Kopfschütteln, oder bist du da anderer Meinung?
ZitatAber, wie gesagt, alles eher Spekulatius
Wenn so eine Aussage des Meisthelfers auch am Ende steht, stimmt mich das nachdenklich.
Bedenklich ist vielleicht komisch formuliert, aber ja, dann verstehe ich das schon als Wink mit dem Zaunpfahl, dass ich da anders agieren muss, sprich eine Demo hochladen etc, weil ich es falsch erkläre oder eben nicht verständlich. Hätte ich ja jetzt auch gemacht, aber das "Problem" hat sich jetzt eben noch anders lösen lassen. Zukünftig werde ich da eben doch anders agieren. Deswegen war das "ehrlich" auch ehrlich gemeint.
Gruß Andreas
Hallo Andreas,
ZitatEs sind 3, mehr nicht. In einer Kopie der DB habe ich genau diese 3 Datensätze neu angelegt und siehe da, das Problem ist dort nicht vorhanden.
Hab' ich doch gleich gesagt; - siehe #8.
gruss ekkehard
Hi,
Zitat von: Beaker s.a. am November 19, 2017, 14:38:23
ZitatEs sind 3, mehr nicht. In einer Kopie der DB habe ich genau diese 3 Datensätze neu angelegt und siehe da, das Problem ist dort nicht vorhanden.
Hab' ich doch gleich gesagt; - siehe #8.
Ganz so ist es nicht Ekkehard. Die Bilder etc. waren alle da, sonst hätte ich sie ja ehemals nicht hinzufügen können. Wenn ich ja in den beschriebenen 3 Datensätzen auf Schachtel-DB geklickt habe, dann hat er es ja angezeigt. Also es ist nicht immer so wie es scheint, kann man das so sagen?
Gruß Andreas
Hallo Andreas,
Die Bilder sind wohl da, aber die Zuordnung (FK) zum Motiv hat gefehlt
oder war falsch.
Ich vermute, die drei DS sind Inkonsistenzleichen, die während der
Entwicklung entstanden sind.
gruss ekkehard
Hi,
das mag wohl wahr und richtig sein. Hab ja erwähnt, dass es mir wegen der erzeugten Aufwände Leid tut und ich das ganze gleich im 1. Step hätte machen sollen. Ich hoffe es ist mir eine Lehre.
Gruß Andreas