März 03, 2021, 05:49:24

Neuigkeiten:

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


Abfrage auf Column(1)

Begonnen von DonJohnson, Februar 18, 2021, 15:44:36

⏪ vorheriges - nächstes ⏩

DonJohnson

Hallo liebe Leute, ::)

ich hätte da mal ein Problem:

Es gibt eine Haupttabelle, die über ein Formular gefüllt wird.

Ein Feld der Haupttabelle/Formular wird über ein Kombinationsfeld abgefragt, welches wiederum die Werte aus einer Abfrage zieht, welche auf eine separate kleine Tabelle mit drei Spalten zugreift.

Im Kombinationsfeld werden auch die 3 Spalten (Columns) aus der kleinen Tabelle angezeigt. Der erste ausgewählte Wert (Spalte 1) aus der kleinen Tabelle/Abfrage wird in der Haupttabelle gespeichert/eingetragen.


Die drei Spalten der kleinen Tabelle sind z.B. Zeile 1 100.000 EUR, 50.000 EUR, 5.000 EUR, die nächste Zeile 100.000 EUR, 75.000 EUR, 6.000 EUR, die nächste Zeile 200.000 EUR, 50.000 EUR, 9.000 EUR

Die Haupttabelle und die separate Tabelle haben bisher keine Beziehung.

Nun möchte ich über eine Abfrage die Anzahl der Datensätze der Haupttabelle ermitteln, bei denen das angesprochene Feld gefüllt ist in folgender Konstellation:

Anzahl (wie oft wurde) Spalte 1 100.000 EUR mit Spalte 2 50.000 EUR ausgewählt.
Da in Spalte 1 100.000 EUR öfters vorkommen kann, kann ich nicht die Anzahl in Spalte 1 unterscheiden zwischen denen  mit Spalte 2 50.000 oder 75.000.

Oder anders gefragt? Wie kann ich Column 1 aus dem Kombinationsfeld der Haupttabelle abfragen?

Die Abfrage, wie oft das Feld jeweils mit Column 0 gefüllt wurde, bekomme ich hin, aber die Column 1 bekomme ich nicht gezogen.

Vielen Dank vorab für Eure Unterstützung.

Ich hoffe, ich habe mich verständlich ausgedrückt.


DF6GL

Hallo,

die Krux liegt hier:
ZitatDie Haupttabelle und die separate Tabelle haben bisher keine Beziehung.

Ändere dies, indem die "kleine Tabelle" (hat die keinen Namen?) ein Autowert-Feld als Primärschlüssel erhält und speichere diesen Primärschlüsselwert als Fremdschlüssel in der Haupttabelle ab.


Zitat... aber die Column 1 bekomme ich nicht gezogen.

Das geht auch nicht in einer Abfrage.

crystal

Hallo,
da du wohl nur den Wert der Spalte A aus deiner Hilfstabelle speicherst, in der EIN Wert mehrfach vorkommen kann, ist es im Nachhinein NICHT mehr möglich herauszufinden, aus welcher Zeile der Kombobox dieser Wert stammt.

Hier lediglich eine Beziehung anzulegen, ist nicht entscheidend. Entscheidend ist vielmehr, JEDER Zeile der Hilfstabelle einen eindeutigen Schlüssel zu geben (Autowert, wie von Franz empfohlen) und diesen als Referenz in der Haupttabelle zu speichern.

Das geht ganz einfach, indem du z. B. als Recordsource der Kombobox
Select TabId, SpalteA, SpalteB, SpalteC From Hilfstabelle
angibst UND als Spaltenbreiten einstellst:
0cm;4cm;4cm;4cm
Die erste Spalte ist somit unsichtbar, ihr Wert wird dennoch gespeichert (gebundene Spalte: 1).
In VBA hat diese Spalte den Index 0 (Null): KomboBox.Column(0), Spalte A enstspr. KomboBox.Column(1) usw.

Willst du jetzt wissen, bei welchen Haupt-DS ein Hilfswert ausgewählt wurde, in dessen Spalte B der Wert 50.000€ steht, musst du so vorgehen (mal Prosa):
Gebe mir alle Haupt-DS, in deren ReferenzFeld ein Wert steht, der auf einen Hilfs-Tabellen-DS zeigt, in dessen Spalte B der Wert "50.000€" steht.

Bsp:
In der Hilfs-Tabelle existieren - neben anderen - die Zeilen:
TabId SpalteA SpalteB SpalteC
16     70.000  35.000  17.500
17    100.000  50.000  25.000
29    120.000  50.000  27.000

In der Haupt-Tabelle würde als Referenz also 17 bzw. 29 gespeichert werden, wenn du eine Zeile mit "50.000" in SpalteB gewählt hast.
Du müsstest also auswählen:
Select * from Haupttabelle where ReferenzFeld IN (17, 29);

Das jetzt an der Oberfläche dem Benutzer anzubieten, ist etwas aufwändig. Du könntest dazu z. B. ein Listenfeld  mit Mehrfach-Auswahl anbieten und das Suchkriterium, also den Inhalt zwischen den runden Klammern, anhand der ausgewählten Listbox-Zeilen (unsichtbare Spalte 0 mit der TabId) zusammenbauen. Dazu müsstest du alle Listbox-Zeilen abfragen, ob sie selektiert sind, etwa so (als Code in einem Button "Jetzt suchen"):
For i = 0 to Listbox.Items.count -1
  if Listbox.items(i).selected = true then
      strIN = strIN & Listbox.column(0, i) & ","
  endif
next
if strIN > "" then
  strSelect = "Select * from HauptTabelle where ReferenzFeld In (" & strIN & ");"
else
  strSelect = "Select * from HauptTabelle;"
endif

Anm. 1: das "überflüssige" Komma nach der letzten Zahl schadet nicht.
Anm. 2: vermeintlich einfacher wäre es, wenn genau EIN Wert ausgewählt wird, weil du dann suchen kannst:
  strSelect = "Select * from HauptTabelle where ReferenzFeld = Left(strIN),len(strIN)-1));"
  "Select * from HauptTabelle where ReferenzFeld in (17,);" würde m. E. aber auch funktionieren, so dass sich eine
  Prüfung, ob EIN oder MEHRERE Werte ausgewählt wurden, erübrigt.

Komplizierter wird es dann, wenn du nach SpalteA, oder SpalteB oder SpalteC suchen willst...

Dies ist zwar nur Luftcode, sollte so aber ungefähr funktionieren. Ich hoffe, das gibt die ein paar Anregungen und Ideen.

Gruß,
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

Beaker s.a.

@crystal
if Listbox.items(i).selected = true thenNa, - dazu besitzt das Listbox-Control doch die Eigenschaft (Auflistung)
.ItemsSelectedVergessen?

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.