Neuigkeiten:

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

Mobiles Hauptmenü

Bei Kombinationsfeld nicht die Textauswahl sonder ID weitergeben

Begonnen von MrB, Oktober 01, 2018, 14:21:28

⏪ vorheriges - nächstes ⏩

MrB

Hallo
habe wieder eine Frage
Ich habe ein Kombinationsfeld erstellt und wollte, das dies nach Auswahl seinen Inhalt an eine Abfrage übergibt.
In die Abfrage habe ich
[Formulare]![frm_Listenerstellung]![Text22]
in die Kriterien eingefügt.
Was aber nach einigem Probieren ja nicht gehen kann, da hier die ID_WS (also eine Zahl) benötigt wird.
Außerdem würde ich gerne mehr wie eine ID_WS eingeben.
Habe dazu ein Textfeld erstellt, in das die Zahlen eingefügt werden können (Textausgabe klappt [=[Kombinationsfeld6]] nur Die ID nicht).
Frage jetzt muss ich hier völlig anders vorgehen oder kann man das mit einfachen Mittel nach meiner Idee umsetzen ?

Cord

DF6GL

#1
Hallo,

ZitatWas aber nach einigem Probieren ja nicht gehen kann, da hier die ID_WS (also eine Zahl) benötigt wird.

das wäre an sich schon richtig.  Was hast Du probiert?

Vermutlich ist das Kombi (wieso heißt das "Text22" ?)  falsch aufgebaut und dessen Eigenschaften sollten sinngemäß so befüllt sein:

Datensatzherkunft:  Select ID, Feld2, Feld3 from tblDeineTabelle order by Feld2
gebundene Spalte: 1
Spaltenanzahl: 3
Spaltenbreiten:  0cm;4cm;4cm


"Mehrfachwahl" geht nur mit einem Listenfeld mit entspr. Einstellung und Zusammenbau der Where-Condition mittels VBA.

Ein Auflisten von Zahlen in einem Textfeld allein funktioniert nicht, weil die Trennzeichen (hier Kommata als Teil der SQL-Syntax) nicht automatisch aus dem Textfeldinhalt (z. B.:  "1,3,4,6") erkannt werden können.

MrB

Hallo Franz
TEXT22, weil ich das Textfeld erstellt habe und die Ausgabe des Kombinationsfeldes dorthin übergeben habe.
Das umschreiben des Kombifeldes habe ich probiert funktioniert sehr gut. Werde ich mir merken.  ;) für später.

Listenfeld habe ich erstellt und auch kann auch mehrere Auswählen, in die Abfrage habe ich 
[Formulare]![frm_Listenerstellung]![ListenFeldWorkshopBezeichnung]
eingefügt. Funktioniert aber leider nicht egal ob ich einen oder mehrere Anwähle.
Cord



DF6GL

Hallo,

lies meinen vorherigen Post nochmal genau....

Zitat"Mehrfachwahl" geht nur mit einem Listenfeld mit entspr. Einstellung und Zusammenbau der Where-Condition mittels VBA.

MrB

Gibt es denn irgendwo Anleitungen wo das tatsächlich erklärt wird ?
Habe leider nirgends mehr gefunden als die Erstellung.

Cord
Habe was gefunden
Private Sub ListenFeldWorkshopBezeichnung_AfterUpdate()

    Dim var As Variant

    Dim str

    For Each var In Me.ListenFeldWorkshopBezeichnung.ItemsSelected

        str = str & ";" & var

    Next var

    Me!Text34 = Mid(str, 2)

End Sub

Habe das ausprobiert und wird wunderbar an das Textfeld weitergegeben, aber ich musste feststellen, das die ID die im textfeld erscheint nicht die aus der tblWorkshops ist sondern eine die das Feld wohl selber vergibt. 

DF6GL

Hallo,

erklärende Stellen gibt es viele, auch hier im Forum..


ZitatPrivate Sub ListenFeldWorkshopBezeichnung_AfterUpdate()

    Dim var As Variant

    Dim strStr as String

    For Each var In Me.ListenFeldWorkshopBezeichnung.ItemsSelected

        strStr = strStr & "," & Me.ListenFeldWorkshopBezeichnung.Column(0,var)

    Next var
If Len(strStr) Then
    strStr = Mid(strStr, 2)
End If

' ab hier strStr für eine Where-Condition verwenden oder für die Eigenschaft "Filter" eines Forms zur Filterung:

Me.Filter = "ID_WS in (" & strStr & ")
Me.FilterOn =true
End Sub

MrB

Danke nochmal für die Info.
Erklärungen habe ich versucht hier zu finden bin aber gescheitert.

Gibt es irgendwo eine Liste mit möglichen Befehlen für VBA und wie die Syntax sein muss ?
Auch für Sondergeschichten, wie das ich für meine Abfrage nicht nur ein Kriterium einfügen kann sondern Mehrere über die Auswahl im Listenfeld.
Die Ausgabe klappt super ins Textfeld aber jetzt muss das in die Abfrage über where wie du geschrieben hast.
Toll wäre wirklich sowas wie eine Liste falls es das gibt.
Inzwischen habe ich mir gedacht wäre es besser, die Abfrage über einen Button OK zu starten.
Muss ich die Übertragung dann erst machen oder soll die lieber im Combifeld sein ?

So viele Fragen für die ich keine Antworten finde, weil ich wahrscheinlich falsch frage  :(
Im Object Browser habe ich den Befehl where nicht einmal gefunden

Cord


DF6GL

Hallo,

eine Liste so, wie Du Dir es vorstellst oder wünscht, gibt es nicht. 

Zunächst musst Du auch unterscheiden zwischen SQL-Statements und deren Syntax (z. B. im Abfrageentwurf/Ansicht/SQL-Ansicht)  und VBA-Code mit dessen Syntax, (z. B. im VBE, Aufruf mit <Strg><F11> aus Access heraus).


Für VBA kannst Du die Hilfe(taste) (F1)  im VBA-Editor (VBE) bemühen.


Grundsätzlich wäre es aber angebracht, sich mit den Grundlagen von Access (einschließlich VBA)  mittels Buch oder Tutorials und Beispiel-DBs zu beschäftigen. 


Googlen hilft dabei...

http://www.vba-wissen.de/

Grundlegende Kenntnisse in (allgemeiner) Programmierung sind dabei eigentlich auch Voraussetzung, derweil Access eher eine Programmierumgebung darstellt, bzw. bereitstellt.


Einfach nur mit der Copy&Paste-Methode zu arbeiten, wird nicht zielführend sein.



MrB

Leider fehlt mir die Grundlage zum Programmieren.
Ich werde versuchen mich weiterzubilden und die Ozeane zwischen den Wissensinseln zu verkleinern.
Trotz allem sind viele Dinge mir nicht klar woher das Wissen kommt, wenn es nirgends eine DB für alle möglichen Befehle existiert.

Um die strStr in die Abfrage zu bekommen habe ich gesucht und das hier https://support.microsoft.com/de-de/help/509116 gefunden. Habe das auch ausprobiert, aber kein Erfolg.

ZitatEinfach nur mit der Copy&Paste-Methode zu arbeiten, wird nicht zielführend sein.
Ist natürlich keine echte Lösung da muss ich dir leider Recht geben

Cord
Ps hatte geglaubt mit den Assistenten zum Ziel zu kommen weit gefehlt


DF6GL

Hallo,

na, dann zeig doch mal Deinen Versuch...

angepasste Ereignisprozedur, um eine Mehrfachauswahl für die Datenherkunft eines Kombifeldes zu benutzen:

ZitatPrivate Sub ListenFeldWorkshopBezeichnung_AfterUpdate()

    Dim var As Variant
    Dim strSQL as String
    Dim strStr as String
    Dim strKrit as String

    For Each var In Me.ListenFeldWorkshopBezeichnung.ItemsSelected

        strStr = strStr & "," & Me.ListenFeldWorkshopBezeichnung.Column(0,var)

    Next var
If Len(strStr) Then
    strStr = Mid(strStr, 2)
End If


strKrit = " Where ID_WS in (" & strStr & ")  Order By Feld1"   'Where-Condition und mit Sortierung auf Feld1

strSQL = " Select ID, Feld1, Feld2 from tblDeineTabelle "    'SQL-String als Abfrage

strSQL = strSQL & strKrit   SQL-String mit Kriterium erweitern

Me!Kombi2.Rowsource = strSQL

End Sub



Wohlgemerkt, dies ist nur eine von mehreren Methoden, Parameter als Where-Condition an eine Abfrage zu übergeben und soll zeigen, wie SQL und VBA gemischt werden kann.

Ziel ist es, an die Datensatzherkunft eines Kombis einen mit dynamischen Kriteriumswerten versehenen SQL-String (Abfrage) zuzuweisen.


Beaker s.a.

Hallo Franz,
If Len(strStr) Then
Das finde ich nicht schön.
Gerade für Anfänger können solche "Verkürzungen" eher verwirrend sein.
Len gibt einen Longwert zurück, wie er in der OH nachlesen kann, und du
verwendest es als Boolean. Auch wenn's am Ergebnis nichts ändert würde
ich es immer so schreiben
If Len(strStr) > 0 Then
oder ganz ohne Len
If strStr <> vbNullString Then

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

DF6GL

Hallo,

prinzipiell hast Du Recht, aber diese Konvertierungen begegnen einem in VBA auf Schritt und Tritt, auch an solchen Stellen, an denen es nicht bemerkt wird. Am schlimmsten (für Anfänger) zu verstehen, ist m. M. nach die Variant-Geschichte  ("NULL", Sub-Datentypen)

True ist definiert als <> 0
False ist definiert als =0

Solange der Wertebereich (Long, Integer, Boolean) nicht überschritten/verletzt wird, ist es (bis auf die Tiefen des Maschinencodes (Assembler) ) egal, ob man Long-0 mit Boolean-0 (False) vergleicht. 

?True gibt -1 zurück.  Welchen Datentyp hat dann dieses "-1" ? Oder ?False entspr.?

IMHO ist es gerade für einen Anfänger eine gute Stelle, sich Gedanken über Vergleiche (eigentlich Ausdrücke) zu machen  ;)

Aber : es ist nur  meine Meinung ..

MrB

Jetzt bin ich wirklich durch.
Ich beantrage erstmal Bücher und fange an zu lesen. Ich hoffe solche Dinge sind da auch beschrieben.

@Franz Wenn ich den Code einfüge den du gepostet hast fragt er nach dem Kombi2 muss ich das erstellen? und wenn wofür ?

Ich werde das erstmal "zu Fuß" machen und nur die nötigen Abfragen erstellen und händisch starten, sodass ich das erstmal so nutze.
Genau wie ein Formular zur Erstellung oder Bearbeitung der einzelnen Teile trage ich dann erstmal so ein.

Wird wohl ein langer Weg, hatte meinem Chef gesagt ich möchte einen Kurs Access aber naja wie das denn so ist ....

Cord
Ps Danke an dich Franz und auch an Ekkehard

DF6GL

Hallo,

"Kombi2"  ist der Name des Kombis (den ich jetzt nicht kenne) , das die gefilterten Datensätze anzeigen soll.

Den Namen musst Du natürlich an Deine Gegebenheiten anpassen. 


Oder für was brauchst Du denn die Abfrage?




MrB

Sollte in die Kriterien einer Abfrage eingefügt werden, sodass ich über das Listenfeld aussuchen kann ob ich einen oder mehrere Workshops in einer Abfrage zusammenfasse.
Z.B. ich brauche nicht nur Klassenräume sonder auch Adminsection und Copiecentre

Cord
Ps Buch wollte ich dies bestellen https://www.amazon.de/gp/product/3836219417?pf_rd_p=9cadea0c-55f1-4f08-936d-e9b2b65b7197&pf_rd_r=S6R737EAHP9XW440AQY3