Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: gcniva am Februar 09, 2019, 14:42:57

Titel: DomWert...
Beitrag von: gcniva am Februar 09, 2019, 14:42:57
Hallo

Ja ich weis  ist schon tausend mal gefragt worden, komme aber mit keiner Antwort weiter...

Mein Problem:
Ich habe ein Formular mit dem Namen frmPlan
In diesem wird per VBA ein Klalender erzeugt.
Das Datum steht dann in einem Bezeichnungsfeld "cptItem5" (kein Textfeld)

Jetzt möchte ich aus einer Tabelle (tbl_Kalender) die nicht mit dem Formular (frmPlan) verknüpft ist, einen ZahlenWert holen...

Im Steuerelementinhalt der Bezeichnungsfeld (cptSchi5) steht dieses...

=DomWert("[C_Schicht]";"tbl_Kalender";"[Datum]='" & [cptItem5] & "'")

Ergebniss ist "'Fehler"

Wer weiß rat ?

Gruß Gerd
Titel: Re: DomWert...
Beitrag von: PhilS am Februar 09, 2019, 15:15:05
Zitat von: gcniva am Februar 09, 2019, 14:42:57Das Datum steht dann in einem Bezeichnungsfeld "cptItem5" (kein Textfeld)
[...]
Im Steuerelementinhalt der Bezeichnungsfeld (cptSchi5) steht dieses...

=DomWert("[C_Schicht]";"tbl_Kalender";"[Datum]='" & [cptItem5] & "'")

Ergebniss ist "'Fehler"
Im Detail ergibt deine Beschreibung keinen Sinn. - Ein Bezeichnungsfeld hat keine Eigenschaft Steuerelementinhalt! Der Anzeigetext eines Bezeichnungsfeldes wird über die Eigenschaft Caption (Beschriftung?) festgelegt. In dieser Eigenschaft sind aber keine Ausdrücke möglich.
Außerdem kann ein Bezeichnungsfeld nicht in einem Ausdruck referenziert werden.

1.) Du musst cptItem5 zu einem Textfeld machen. Das kannst du ja in seinen Eigenschaften so einstellen, dass es optisch nicht von einem Bezeichnungsfeld zu unterscheiden ist.
2.) Wenn du Datumswerte als Kriteren in SQL-Abfragen einbaust, müssen diese in # eingeschlossen werden und im US- oder ISO-Format sein.
Es sollte in diesem Fall auch funktionieren, wenn du direkt das Steuerlement in dem Kriterium referenzierst. Dann sollte der Jet-Expression-Service selbst mit der übergabe des Datumwertes zurechkommen.
=DomWert("[C_Schicht]";"tbl_Kalender";"[Datum]=[cptItem5]")
Titel: Re: DomWert...
Beitrag von: DF6GL am Februar 09, 2019, 15:20:33
Hallo,

abgesehen von der Sinnlosigkeit, ein (variables) Datum in einem Bezeichnungsfeld darzustellen, wäre ein solcher Steuerelementinhalt denkbar:


=DomWert("[C_Schicht]";"tbl_Kalender";"[Datum]=" & Format([Bezeichnungsfeld1].[Caption];"\#jjjj-mm-tt\#"))

Wobei das Tabellenfeld "Datum" (ungünstiger Name!)  den Datentyp Datum/Uhrzeit aufweisen muss.
Titel: Re: DomWert...
Beitrag von: gcniva am Februar 10, 2019, 00:20:46
Hi

Sorry cptSchi5 ist ein Textfeld...

@DF6GL
Danke so geht's...
=DomWert("[C_Schicht]";"tbl_Kalender";"[Datum]=" & Format([Bezeichnungsfeld1].[Caption];"\#jjjj-mm-tt\#"))

Gruß Gerd
Titel: Re: DomWert...
Beitrag von: gcniva am Februar 10, 2019, 14:59:40
Hallo noch mal...

Wegen der Sinnlosigkeit lässt sich doch immer gerne streiten  ;)

Wollte das ganze in VBA lösen, doch wie immer geht das nicht so wie ich es will.
Hier mein Code:

Anzeige nix , Fehlermeldung keine...

Private Sub varX_AfterUpdate()
   
    On Error GoTo myError
   
    'Schichten eintragen
    varX = DomWert("[C]", "abf_Kalender", "[Datum] =" & Format([cptItem2].[Beschriftung], "\#jjjj-mm-tt\#"))


myError:
    Select Case Err.Number
        Case 9999
            'spezifische Fehler behandeln
        Case Else
            MsgBox "Ausnahme Nr. " & Err.Number & ". " & Err.Description
            Resume myExit
End Sub

Gruß Gerd
Titel: Re: DomWert...
Beitrag von: gcniva am Februar 10, 2019, 15:04:49
Hab mal ein Bild angehängt wie das ganze bis jetzt ausschaut...
Titel: Re: DomWert...
Beitrag von: DF6GL am Februar 10, 2019, 15:24:51
Hallo,

und, was genau willst Du machen?

Wenn "cptItem2" ein Textfeld-Steuerelement ist, muss "[Beschreibung]" im Ausdruck weggelassen werden.

Welchen Sinn hat die Prozedur?

Sobald nach einem Eintrag in Feld "varX"  (was ist das für ein Steuerelement und wo befindet es sich im Bild?) das Feld verlassen oder auch Return gedrückt wird, wird diesem Feld  der Wert aus dem Tabellenfeld "C" beim dem Kriterium entspr. Datensatz zugewiesen und der vorherige Eintrag überschrieben.

Irgendwie nicht nachvollziehbar.
Titel: Re: DomWert...
Beitrag von: gcniva am Februar 10, 2019, 16:19:48
Hi Franz

Glaue ich kann das ganze nicht erklären was ich meine.
Deswegen habe ich dir mal das ganze angehängt...

Gruß Gerd

PS. Ich sehe das Bild
Titel: Re: DomWert...
Beitrag von: gcniva am Februar 13, 2019, 15:00:17
Hallo

Kann man den "Ausdruck" dei domWert aus einen Textfeld im Formular ziehen?

DomWert( Ausdruck; Domäne ; [Kriterien] )

=DomWert("[Schi]";"abf_Kalender";"[Datum]=" & Format([cptItem2].[Beschriftung];"\#jjjj-mm-tt\#"))

Gruß Gerd
Titel: Re: DomWert...
Beitrag von: DF6GL am Februar 13, 2019, 20:06:01
Hallo,

vielleicht meinst Du dies:

=DomWert(" & [Schi] & ";"abf_Kalender";"[Datum]=" & Format([cptItem2].[Beschriftung];"\#jjjj-mm-tt\#"))

Titel: Re: DomWert...
Beitrag von: gcniva am Februar 14, 2019, 14:10:44
Hallo Franz

Vielleicht...

Geht aber nicht kommt #Fehler

Gruß
Titel: Re: DomWert...
Beitrag von: gcniva am Februar 14, 2019, 15:39:45
Noch mal...

=Wenn([Schi]="A";DomWert("[A]";"abf_Kalender";"[Datum]=" & Format([cptItem1].[Beschriftung];"\#jjjj-mm-tt\#"));Wenn([Schi]="B";DomWert("[B]";"abf_Kalender";"[Datum]=" & Format([cptItem1].[Beschriftung];"\#jjjj-mm-tt\#"));Wenn([Schi]="C";DomWert("[C]";"abf_Kalender";"[Datum]=" & Format([cptItem1].[Beschriftung];"\#jjjj-mm-tt\#"));Wenn([Schi]="D";DomWert("[D]";"abf_Kalender";"[Datum]=" & Format([cptItem1].[Beschriftung];"\#jjjj-mm-tt\#"));"X"))))

So gehts...
Titel: Re: DomWert...
Beitrag von: ebs17 am Februar 15, 2019, 09:48:34
ZitatSo gehts...
...aber nicht gut und nachhaltig.

Solche Wenn-Dann-Orgien kann man sich regelmäßig ersparen, wenn man auf geeignete Tabellen und Tabellenverknüpfungen zurückgreift. Dann lassen sich zusätzlich auch problemlos Erweiterungen vornehmen, bspw. wenn die Abfrage nicht nur aus A-D gerichtet ist sondern auf K oder Z zu erweitern wäre.
Titel: Re: DomWert...
Beitrag von: gcniva am Februar 15, 2019, 16:26:14
Hi Eberhart

Geb dir recht das wird natürlich schwer..
Wollte das ganze mal als VBA machen aber dann kommt der Fehler 428

Sub schiFill()
    'Trägt die Schichten ein
   
    On Error GoTo myError
   
  If Schi = "A" Then
  Me!cptSchi3 = DLookup("[A]", "abf_Kalender", "[Datum]=" & Format([cptItem3].[Beschriftung], "\#jjjj-mm-tt\#"))
  End If

myExit:
    Exit Sub

myError:
    Select Case Err.Number
        Case 9999
            'spezifische Fehler behandeln
        Case Else
            MsgBox "Ausnahme Nr. " & Err.Number & ". " & Err.Description
            Resume myExit
    End Select
   
         End Sub


Gruß Gerd
Titel: Re: DomWert...
Beitrag von: PhilS am Februar 15, 2019, 16:39:35
Ich weiß nicht, ob es die Ursache für den konkrete Fehler ist, aber VBA kommt mit dem Format jjjj-mm-tt nicht zurecht. Verwende das englische Format yyyy-mm-dd stattdessen.
Titel: Re: DomWert...
Beitrag von: gcniva am Februar 15, 2019, 16:42:20
Hi PhilS

Ne kommt der gleiche fehler

Gruß Gerd
Titel: Re: DomWert...
Beitrag von: DF6GL am Februar 15, 2019, 16:54:39
Hallo,

die Syntax muss so lauteten:


.
.
Me!cptSchi3 = DLookup("A", "abf_Kalender", "[Datum]=" & Format(Me![cptItem3].[Caption], "\#yyyy-mm-dd\#"))
.
.



(Das Textfeld "cptSchi3"  wird mit dem Wert aus Feld "A" der Abfrage "abf_Kalender" gefüllt, der in demjenigen Datensatz steht, bei dem das Datum dem "Wert" aus der Beschriftung des  Bezeichnungsfelds "cptItem3" entspricht.)

Titel: Re: DomWert...
Beitrag von: PhilS am Februar 15, 2019, 17:10:18
Zitat von: gcniva am Februar 15, 2019, 16:42:20Ne kommt der gleiche fehler
Du hast aber schon den Ausdruck aus der Steuerelementinhalt-Eigenschaft entfernt, oder? - Ansonsten ist das Feld an den Ausdruck gebunden und schreibgeschützt.
Titel: Re: DomWert...
Beitrag von: gcniva am Februar 16, 2019, 13:02:53
Hi Franz

Ja das klappt super..
Steuerelementinhalt-Eigenschaft  wurde zuvor gelöscht.

Doch leider kann ich es nicht benutzen, denn wenn ich den Kalender einen Monat weiter klicke, bleibt der wert drin stehen. und holt sich nicht den neuen..

Gruß
Titel: Re: DomWert...
Beitrag von: DF6GL am Februar 16, 2019, 16:43:30
Hallo,

ja, und warum sollte das passieren?

Wenn Du weiter klickst, dann muss der neue Wert (müssen die neuen Werte) halt erneut zugewiesen werden, am besten bei dem Ereignis, das den neuen Monat anzeigen soll.

Titel: Re: DomWert...
Beitrag von: gcniva am Februar 17, 2019, 14:34:01
Hi Franz

Sorry mein fehler, klar muss natürlich in auch in AfterUpdate() rein  8)

Aber schon das nächste problem...
hier erst mal was ich gemacht habe.

Sub schiFill()
    Dim i As Long, lngColor As Long, lngLeft As Long, lngWidth As Long
    'Trägt die Schichten ein beim öffnen
   
    On Error GoTo myError
     
   
  If Schi = "A" Then
  For i = 1 To 31
  Me("cptSchi" & i) = DLookup("A", "abf_Kalender", "Datum =" & Format(Me("cptItem" & i).[Caption], "\#yyyy-mm-dd\#"))
  Next i
  End If
 
  If Schi = "B" Then
  For i = 1 To 31
  Me("cptSchi" & i) = DLookup("B", "abf_Kalender", "[Datum]=" & Format(Me("cptItem" & i).[Caption], "\#yyyy-mm-dd\#"))
  Next i
  End If
 
  If Schi = "C" Then
  For i = 1 To 31
  Me("cptSchi" & i) = DLookup("C", "abf_Kalender", "[Datum]=" & Format(Me("cptItem" & i).[Caption], "\#yyyy-mm-dd\#"))
  Next i
  End If
 
  If Schi = "D" Then
  For i = 1 To 31
  Me("cptSchi" & i) = DLookup("D", "abf_Kalender", "[Datum]=" & Format(Me("cptItem" & i).[Caption], "\#yyyy-mm-dd\#"))
  Next i
  End If
 
 

myExit:
    Exit Sub

myError:
    Select Case Err.Number
        Case 9999
            'spezifische Fehler behandeln
        Case Else
            MsgBox "Ausnahme Nr. " & Err.Number & ". " & Err.Description
            Resume myExit
    End Select
   
         End Sub


Das geht auch , nur kommt die Meldung "Fehlender Oparator [Datum]="
Schreibt aber trotzdem die Schichten rein

Gruß Gerd
Titel: Re: DomWert...
Beitrag von: DF6GL am Februar 17, 2019, 16:48:04
Hallo,

mal abgesehen davon, ob das alles konzeptionell so optimal ist, könnte der Code so gekürzt werden, wobei unklar ist, was "Schi" denn ist. Falls es sich hierbei um ein Steuerelement handelt, dann etwa so:



Sub schiFill()
    Dim i As Long, strSchi as String
    'Trägt die Schichten ein beim öffnen
   
    On Error GoTo myError

   strSchi = Me!Schi

  For i = 1 To 31
  Me("cptSchi" & i) = DLookup("[" & strSchi & "], "abf_Kalender", "[Datum] =" & Format(Me("cptItem" & i).[Caption], "\#yyyy-mm-dd\#"))
  Next i
  End If
   

myExit:
    Exit Sub

myError:
    Select Case Err.Number
        Case 9999
            'spezifische Fehler behandeln
        Case Else
            MsgBox "Ausnahme Nr. " & Err.Number & ". " & Err.Description
            Resume myExit
    End Select
   
         End Sub



Der Fehler könnte daher rühren, dass in einem Bezeichnungsfeld kein gültig (geschriebenes) Datum drinsteht.


btw:  der Name "Datum" ist ein "gefährliches" (reserviertes) Wort, weil es für die Date()-Funktion steht und mitunter Probleme aufwirft.  Deshalb diesen Namen unbedingt in Eckklammern setzen.
Titel: Re: DomWert...
Beitrag von: gcniva am Februar 21, 2019, 20:30:02
Hi

Ne geht auch nicht...

Glaube aber den Fehler gefunden zu haben,
Wenn sich der Kalender aufbaut blendet er die Tage die nicht zu dem Monat gehören aus.

Soll heißen hat der Monat nur 28 Tage bekomme ich auch nur 28 Tage angezeigt.

Der VBA Code will aber 31 Tage füllen  :-\

Gruß Gerd
Titel: Re: DomWert...
Beitrag von: Maxel am Februar 21, 2019, 22:01:24
ZitatFor i = 1 To 31
Setze statt 31 den Tag des monatsletzten Datums ein.