Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abfrage in Abhängigkeit eines Werts in einem Kombinationsfeld

Begonnen von Mezcalero, Oktober 06, 2019, 13:08:58

⏪ vorheriges - nächstes ⏩

Mezcalero

Hallo zusammen,

ich bin leider noch sehr grün was Access angeht und auch meine VBA Kenntnisse beschränken sich im wesentlichen auf das Plotten von Graphen. Nun möchte ich eine Datenbank rund um meinen 3D-Drucker erstellen und bin gleich zu Beginn auf ein (für mich unlösbares) Problem gestoßen. Alleine komme ich leider nicht weiter, aber vielleicht kann mir ja hier jemand helfen.

Es gibt zwei Tabellen, wobei die erste tblLieferantCharge heißt, die zweite tblEigeneCharge. tblLieferantCharge besteht nur aus zwei Feldern: IDLieferant (Autowert) und lngLieferantCharge (langer-Text). Die Tabelle tblEigeneCharge besitzt die Felder IDEigeneCharge (Auto), lngEigeneCharge (langer-Text) und intIDLieferant.
Die zwei Tabellen sind außerdem über eine 1:n Beziehung (1: IDLieferant zu n:intIDLieferant) miteinander verknüpft.

Nun möchte ich eine Eigene Charge eingeben (gebundenes Textfeld zu lngEigeneCharge ist vorhanden), die dazu passende lngLieferantCharge aus dem Kombinationsfeld (Werte kommen von lngLieferantCharge) wählen und bei betätigen eines Buttons (z.B. speichern) soll der neue Wert lngEigeneCharge in die Tabelle tblEigeneCharge eingetragen werden. Außerdem soll nun eine Abfrage mit dem Wert aus dem Kombinationsfeld gestartet werden und die IDLieferant an eine Variable übergeben werden, die dem ausgewählten Wert des Kombinationsfeld entspricht. Diese Variable (ist ja erst einmal ein String?) soll dann in eine Integer umgewandelt werden und im Feld intIDLieferant neben dem neu eingetragenen Wert lngEigeneCharge eingetragen werden.

Ich würde so anfangen:

Sub intIDLieferant_eintragen_Klick()

Dim WertKombiFeld As String
Dim AbfrageLieferantCharge As String

WertKombiFeld = Me.NameMeinesKombiFeldes.Column(0)               'Syntax!?
AbfrageLieferantCharge = "SELECT * FROM tblLieferantCharge" _&  'Syntax!?
"WHERE tblLieferantCharge.IDlLieferant = WertKombiFeld"              'Syntax!?
...

'hier muss ja dann der String noch in eine Integer umgewandelt und mit INSERT (?) in das Feld intIDLieferant der tblEigeneCharge eingetragen werden

End Sub

Vielen Dank für eure Mühe
Felix



DF6GL

Hallo Felix,


gleich am Anfang: Du denkst vermutlich zu kompliziert ...


ZitatNun möchte ich eine Eigene Charge eingeben (gebundenes Textfeld zu lngEigeneCharge ist vorhanden), die dazu passende lngLieferantCharge aus dem Kombinationsfeld (Werte kommen von lngLieferantCharge) wählen und bei betätigen eines Buttons (z.B. speichern) soll der neue Wert lngEigeneCharge in die Tabelle tblEigeneCharge eingetragen werden. Außerdem soll nun eine Abfrage mit dem Wert aus dem Kombinationsfeld gestartet werden und die IDLieferant an eine Variable übergeben werden, die dem ausgewählten Wert des Kombinationsfeld entspricht. Diese Variable (ist ja erst einmal ein String?) soll dann in eine Integer umgewandelt werden und im Feld intIDLieferant neben dem neu eingetragenen Wert lngEigeneCharge eingetragen werden

vermutlich möchtest Du aus "tblLieferantCharge"   einen DS   mittels Kombifeld auswählen und einem neuen DS in "tblEigeneCharge" zuordnen.

Dazu ist kein VBA und auch keine Datentyp-Konvertierung (absolut ein NoGo in einer DB bei Tabellenfeldern!)  erforderlich.

Grundsätzlich:  Lege für jede Tabelle ein separates Formular an.

"frmLieferantCharge" enthält die Felder aus "tblLieferantCharge", "frmEigeneCharge" die Felder aus " tblEigeneCharge".

In "frmEigeneCharge" ist ein an "intIDLieferant" gebundenes Kombifeld vorhanden mit

Datensatzherkunft:  Select IDLieferant , Left(lngLieferantCharge,100) as Charge   from tblLieferantCharge   
Gebunden Spalte : 1
Spaltenanzahl: 2
Spaltenbreiten: 0cm;10cm


Mit diesem Kombi kann eine Lieferanten-Charge ausgewählt werden, deren ID in "tblEigeneCharge" abgelegt wird.



Um alle eigenen Chargen anzuzeigen, die zu einer Lieferanten-Charge zugeordnet sind, kann eine Haupt-/Unterformular-Konstruktion verwendet werden:

Ziehe in frmLieferantenCharge das (Endlos-)Form "frmEigeneCharge" an passende Stelle im Detailbereich. Die Verknüpfungsfelder (Schlüsselfelder) werden automatisch gesetzt, wenn die Beziehungen definiert sind.

Das UFO zeigt sodann alle einem Lieferanten zugeordneten eigene Chargen an.


Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Mezcalero

Tatsächlich, das funktioniert einwandfrei!

Allerdings bin ich mir noch nicht sicher ob ich das zu 100% verstanden habe.

ZitatSelect IDLieferant , Left(lngLieferantCharge,100) as Charge   from tblLieferantCharge

Left(lngLieferantCharge,100): schreibt die Daten aus lngLieferantCharge in die linke Spalte einer 2-spaltigen Tabelle (deshalb fällt das Right vor IDLieferant weg?, da ja eindeutig bestimmt) mit der Zeilenbreite 10 cm. IDLieferant fällt unter den Tisch, da es in der rechten Spalte steht und im Kombinationsfeld nur die erste Spalte angezeigt wird?
Außerdem steht hier nach dem "As" "Charge". Das dient als Suchwort und würde theoretisch alle Felder mit dem Begriff "Charge" im Namen berücksichtigen (da hier nur ein Feld mit *"Charge"* vorhanden...)?

Das Eintragen des Werts intIDLieferant wird durch die Bindung an dieses Feld erzwungen. Nun ist hier ja ein String und ein Integer vorhanden (2-spaltige Tabelle). Wird dann durch die Definition des Feldtyps (Integer) der String vernachlässigt?   

Vielen herzlichen Dank für die Hilfe sowie viele Grüße aus Mainz
Felix

DF6GL

Hallo,

mhmm, da ist Einiges verkehrt...

Die Kombifeldliste ist zweispaltig, wobei die erste (linke) wegen der Spaltenbreite von 0cm ausgeblendet ist, aber trotzdem den Primärschlüsselwert enthält. Die zweite Spalte (scheinbar als "erste" Spalte sichtbar) wird mit 100 Zeichen (willkürlich gewählt) gefüllt, deshalb , weil es sich um ein Tabellen-Memofeld (Langer Text) handelt. In einer Kombilistenspalte stehen  eh nur 255 Zeichen zur Verfügung. Die Zeilen(Spalten)breite ist beliebig anpassbar und mit 10 cm willkürlich gewählt.

Dadurch, dass die erste (ausgeblendete) Spalte die gebundene ist, wird in das Fremdschlüsselfeld in "tblEigeneCharge" der ID-Wert der ausgewählten Lieferanten-Charge eingetragen.


ZitatAußerdem steht hier nach dem "As" "Charge". Das dient als Suchwort und würde theoretisch alle Felder mit dem Begriff "Charge" im Namen berücksichtigen (da hier nur ein Feld mit *"Charge"* vorhanden...)?

"Charge" ist lediglich ein Aliasname für das LangText-Feld und kommt nur im Listenfeld zum Tragen. Es würde angezeigt, wenn in den  Kombifeld-Eigenschaften "Überschrift anzeigen" eingestellt ist.

Mit Such-Vorgängen hat das nichts zu tun.


ZitatNun ist hier ja ein String und ein Integer vorhanden (2-spaltige Tabelle). Wird dann durch die Definition des Feldtyps (Integer) der String vernachlässigt?   

??  Das ID-Feld muss ein Autowert und damit den Datentyp LONG besitzen, desgleichen das Fremdschlüsselfeld in "tblEigeneCharge".

Hier wird nichts vernachlässigt, sondern die Datentypen konsequent verwendet.

Die Strings (die "Chargentexte") werden nirgendwo hin kopiert, sie werden lediglich durch die jeweiligen ID-Werte definiert.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Mezcalero

Na da war ich ja total auf dem Holzweg  ;D

Vielen Dank, jetzt ist alles nachvollziehbar!

Viele Grüße
Felix