Dlookup-Abfrage bei Access

Hallo Leute!

Ich hoffe ihr könnt mir helfen. Ich kenne mich mit Access leider noch nicht so sehr aus.

Ich habe ein Listenfeld, indem ich einen Wert auswählen kann, welcher dann per Button gedruckt wird. Ich bekomme meine Daten auch in den Bericht. Nur hier kommt mein Problem:
Es gibt einen Wert (Aufgetaut Ja/ Nein) den ich nicht im Bericht habe sondern stattdessen nur ein E oder ein A haben möchte. Dies wollte ich mit visible= true/false machen. Also mit If und ELSE (Wenn aufgetaut dann A sichtbar sonst E sichtbar) Nur leider weiß ich nicht wie ich das Listenfeld in die Funktion einbauen muss.

Ich hoffe mir kann jemand helfen

Hier der Code für meine Variante als ich noch kein Listenfeld hatte

Private Sub Report_Open(Cancel As Integer)

Dim aufgetaut As Boolean

aufgetaut = DLookup("[aufgetaut]", „[tbl_abschnitte]“, "[beleg_id] = " & Form_tbl_abschnitte.[beleg_id])

If (aufgetaut = False) Then
Me.auftaudatum.Visible = False
Me.auftaudatum_bez.Visible = False
Me.einfrierdatum.Visible = True
Me.einfrierdatum_bez.Visible = True
Me.tf_aufgetaut_a.Visible = False
Me.tf_aufgetaut_e.Visible = True
Else
Me.auftaudatum.Visible = True
Me.auftaudatum_bez.Visible = True
Me.einfrierdatum.Visible = False
Me.einfrierdatum_bez.Visible = False
Me.tf_aufgetaut_a.Visible = True
Me.tf_aufgetaut_e.Visible = False
End If

End Sub

Gruß

Kann Dir leider nicht helfen. Digby

Hallo Leeesummer
Im Report ein Bezeichnungsfeld (Wert ist egal, wird ja im Bericht gesetzt) einfügen, ich habe es mal txtAufgetaut benennt.

Im entsprechenden Bereich (wahrscheinlich Detailbereich) bei „beim Formatieren“ diesen Code eingeben: (ich habe den Dlookup Verweis zum Testen etwas gekürzt)

Dim aufgetaut As Boolean
aufgetaut = DLookup("[aufgetaut]", „[tbl_abschnitte]“, „[Beleg_ID] = 1“)
If aufgetaut = True Then
Me.txtAufgetaut.Caption = „E“
Else
Me.txtAufgetaut.Caption = „A“
End If

Vorsicht mit den Dlookup Befehl, er kann die Ausführung erheblich ausbremsen.

Gruss
Fonti46

Hört sich schon gut an. Danke! Aber wenn ich eine 1 angebe im Befehl bezieht er sich ja immer auf die 1 und vergleicht den ausgewählten Wert ja nicht mit allen in meiner Tabelle. Also da sind ja welche bei die aufgetaut sind und einige nicht. Und einige Taue ich dann auf. Gibt es eine Alternative zu Dlookup, wenn es das so sehr bremst?

die Beleg_ID = 1 gilt nur für meinen Testbericht, du gibst natürlich & Form_tbl_abschnitte.[beleg_id]) an. Da ich deine Datenstruktur nicht kenne, ist es schwierig eine Alternative zum Dlookup zu empfehlen. Ist „aufgetaut“ eine Eigenschaft des Artikels? Dann könnte die Abfrage zum Report damit ergänzt (und als Basis für den „beim Formatieren“ eingegebenen Code verwendet werden). Ist es eine Selektion aus dem Formular in dem der Bericht aufgerufen wird? Dann könntest du dich direkt auf das Formularfeld beziehen.

Ob dlookup ausbremst kommt auf die Anzahl Datensätze an die aufgerufen werden. Der Befehl entspricht etwa einer Query die bei jedem Datensatz aufgerufen wird. Ausprobieren schadet nichts.

Gruss und schönen Abend
fonti46

Danke für deine Bemühungen.
Ja ich habe eine Datenbank an Gegenständen. In einem Formular mit einem ungebundenen Listenfeld sind diese dann alle aufgelistet. Dort will ich dann einen Gegenstand auswählen und dann ein Etikett mit den Daten drucken. Nur ich komme mit dem listenfeld nicht klar. Ich weiß leider nicht wie ich die Info in den Befehl bekomme.

Sehr geehrter Unbekannter

Dazu wird einfach ein ungebundenes Textfeld eingesetzt,
dessen Inhalt Sie abhaengig vom Ja-/Nein-Feld individuell
fuellen und so entweder einfach gar nichts oder ein
einfaches „X“ als Status „Angekreuzt“ ausgeben koennen:

  1. Fuegen Sie im Bericht an der gewuenschten Stelle ein
    Textfeld ein und stellen Sie die Eigenschaften
    „Hintergrundart“ und „Rahmenart“ auf „Transparent“ ein.

  2. Geben Sie in der Eigenschaft „Steuerelementeinhalt“
    folgende Formel ein:

=Wenn([JaNeinFeld]=-1;„E“;„A“)

  1. „JaNeinFeld“ ersetzen Sie dabei durch den Namen des
    Ja/Nein-Feldes, dessen Status ausgegeben werden soll. Die
    Formel sorgt dafuer, dass bei Status „Aktiviert“ (Wert=
    „-1“) ein „E“ und bei Status „Deaktiviert“ das „A“
    im Textfeld erscheint.
    Viele Grüsse und alles Gute beim Ausprobieren
    Gleichzeitig möchte ich Sie aufmerksam machen auf die Access Tips von SmartTool, die Sie per wöchentlichem Newsletter erhalten können

Hallo leeesumer,

sorry, kann dir nicht helfen, im moment auch keinen kopf dafür. wähle bitte noch jemanden anderen aus.

viel erfolg, ilex

Hallo,
so wie ich das sehe muss mann zunächst den Wert des Feldes Me.tf_aufgetaut auf E bzw. A setzen mit:
Me.tf_aufgetaut = „E“
Visible muss dann nicht geändert werden, da das Feld auf jeden Fall angezeigt werden soll.

Gruss

Wenn Du es so kompliziert haben möchtest (ich würde es mit einem Optionsfeld machen, Punkt/Haken gesetzt oder nicht):
Lege das Listenfeld so an, dass nur ein Eintrag sichtbar wird mit Bezug auf 1.Spalte (A/E) und 2. Spalte mit Aufgetaut/Eingefroren (für den Nutzer). Für die Anzeige des Listenfeldes setzt Du die Spalten dann auf 0; 5. Weil nur eine Zeile sichtbar ist wird dafür dann rechts davon der Aufklapp-Pfeil sichtbar.
Darüber legst Du dann das alte Textfeld (voll überlagernd, ohne den Pfeil zu verdecken), das sich aus dem Listenfeld die Daten holt.
Man sieht nur A oder E.
Klickt man auf den Pfeil, wird das Listenfeld für die Auswahl sichtbar.

Guten Morgen Leeesummer

Da sieht’s ja schon viel klarer aus. Wieso eigentlich ein ungebundenes Listenfeld? Ich würde die Artikeltabelle dranhängen, 1. Feld den Primärschlüssel (muss nicht sichtbar sein) 2. Feld z.B. die Artikelbezeichnung. Für den Bericht machst Du eine Abfrage mit den Artikelfeldern, auf den Primärschlüssel setzt Du in den Kriterien den Verweis auf das Listenfeld (z.B. „= forms!frm???!lstArtikel“). Ich nehme an die weiteren Angaben wie aufgetaut oder Auftaudatum sind dann ungebunden im Formular. Da beziehst du dich im „beim Formatieren“ in gleicher Weise auch auf das Formular. Da es sich um eine einzelne Etikette handelt wäre Dlookup kein Problem für die Performance, aber meine Version ist eleganter und zukunftsträchtiger.

Gruss und schönen Tag

Fonti46

ebenso Hallo,

  1. versuchen Sie die Abfrage
    If (aufgetaut = False) Then in
    If [aufgetaut] = -1 Then zu ändern
  2. nehme ich an, daß die Felder
    Me.tf_aufgetaut_e und
    Me.tf_aufgetaut_a
    2 getrennte Bezeichnungsfelder in der Liste sind
  3. wenn es nur ein Textfeld sein soll mit
    einem neutralen
    Namen z.B. „aufgetaut_j_n“, dann lautet die Abfrage
    If [aufgetaut] = -1 Then
    [aufgetaut_j_n] = „a“
    Else
    [aufgetaut_j_n] = „e“
    End If

mfG Günter

Läuft alles. Aufgetaut ist in meiner Tabelle ein auswahlfeld. Habe es hinbekommen. Stelle den Code nachher nochmal online für Leute die ähnliche Probleme haben.

Eine andere Frage noch:
Ich möchte eine Unterabfrage in einen SQL-Befehl einbauen.
Hier die Situation:
Ich habe eine zweite Tabelle in der zusatzbezeichnungen sind. In meiner standarttabelle sind die Artikel mit material_nr gekennzeichnet. Die material_nr ist gleich der werkstoff_id in der zusatztabelle. Und mit der werkstoff_id will ich die Daten auswählen.
Letzteres ist ja eine einfache SQL-Abfrage. Nur muss ich ja noch die Material_nr rausbekommen, die ich in der liste ausgewählt habe.

Ich hoffe das ist nicht zu umständlich beschrieben.

Hallo LEEESUMER,

Führe eine neue Variable ein:

Dim aufgetaut_neu As String
If aufgetaut = False Then
aufgetaut_neu = „E“
Else
aufgetaut_neu = „A“
End If

Gruß
Horst Müller

Hallo,
in der Abfrage sind die beiden Tabellen vorzusehen
und dann ist eine Verknüpfung herzustellen
Standardtabelle Zusatztabelle
MaterialNr werkstoff_id
anschließend können Inhalte von der Standardtabelle
in die Abfrage hinzugefügt werden
Wenn es von mir falsch verstanden wurde, bitte etwas besser formulieren !
mfG Günter

Tut mir leid, kann im Moment
nicht weiterhelfen.
Gruß Peter