August 13, 2022, 19:44:15

Neuigkeiten:

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


Wert eines Textfeldes in einer Abfrage verwenden

Begonnen von Ratoncito, August 01, 2022, 15:22:07

⏪ vorheriges - nächstes ⏩

Ratoncito

Hallo,

normalerweise werden in einer Abfrage Werte aus Tabellen bereitgestellt um auf einem Formular angezeigt zu werden. Geht das auch ander herum?

Auf einem Formular habe ich in einem Textfeld einen berechneten Wert, den ich beim Aufruf einer Abfrage anzeigen möchte.

Wie kann man diesen Wert an die Abfrage übergeben?

Liebe Grüße - Wolfgang

PhilS

Zitat von: Ratoncito am August 01, 2022, 15:22:07Auf einem Formular habe ich in einem Textfeld einen berechneten Wert, den ich beim Aufruf einer Abfrage anzeigen möchte.

Wie kann man diesen Wert an die Abfrage übergeben?
Genauso wie du Kriterien aus einem Formular an die Abfrage übergeben würdest.

Z.B. so:

SELECT Forms!DeinFormular!DeineTextbox FROM eine Tabelle
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Ratoncito

Hallo,

danke für die Antwort, aber als FROM müsste dann das Formular stehen, und das funktioniert nicht.

Formular: frmA
Textfeld: txtB

In txtB steht ein Wert (123,45), der aus anderen Feldern auf dem Formular berechnet wird. Diesen Wert würde ich gerne an eine Abfrage qryXY als Wert übergeben. Eventuell mit VBA?

Liebe Grüße - Wolfgang



PhilS

Zitat von: Ratoncito am August 01, 2022, 16:41:21danke für die Antwort, aber als FROM müsste dann das Formular stehen, und das funktioniert nicht.
Nein, die From-Klausel der Abfrage bleibt unverändert und enthält die Tabellen/Abfragen, deren Daten du ausser dem Formularfeld noch anzeigen willst.

Wenn es in deinem Fall gar keine weiteren Daten aus Tabellen/Abfragen in deiner Abfrage mit dem Formularfeld gibt, dann musst du dir eine Dummy-Tabelle erstellen, die genau einen Datensatz enthält, damit du damit ein gültiges SQL-Statement für deine Abfrage erstellen kannst.

Es wäre in diesem Fall aber auch sinnvoll mal die Absicht hinter der Aktion zu erläutern oder zu überdenken, weil es evtl. bessere Lösungswege gibt, ganz ohne die Abfrage.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

DF6GL

Hallo,

hast Du auch das Eingabefeld (Textbox==Textfeld) fokusmäßig verlassen, den Fokus also auf ein anders Steuerelement gesetzt (und damit das AfterUpdate-Ereignis des Textfeldes ausgelöst) und die angesprochene Voraussetzung beachtet, dass die Abfrage Datensätze liefern kann?

Ratoncito

Hallo,

vielen Dank, das funktioniert. Zumindest teilweise.

Nach dem Erstellen der Abfrage wird der Wert korrekt angezeigt. Nach dem Wechsel zur Entwurfansicht oder SQL-Ansicht werden manchmal statt dem Wert chinesische Zeichen angezeigt.
Im Feld Funktion ist Ausdruck ausgewählt. Mit Min, Max oder ErsterWert wird der korrekte Betrag angezeigt.

Das Textfeld der Herkunft auf dem Formular ist als Standardzahl formatiert.

Gibt es eine Idee wie es zu den chinesischen Zeichen 띋剼 kommt?

Liebe Grüße - Wolfgang

PhilS

Zitat von: Ratoncito am August 01, 2022, 19:15:49Gibt es eine Idee wie es zu den chinesischen Zeichen 띋剼 kommt?
Ich habe schon mehrfach von diesem Problem gehört, aber kann mich im Moment nicht an weitere Einzelheiten erinnern. - Evtl. weiß Google mehr...
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

ebs17

August 02, 2022, 12:57:17 #7 Letzte Bearbeitung: August 02, 2022, 14:11:35 von ebs17
ZitatAuf einem Formular habe ich in einem Textfeld einen berechneten Wert, den ich beim Aufruf einer Abfrage anzeigen möchte.

Wie kann man diesen Wert an die Abfrage übergeben?
Anzeige heißt sicher Verwendung im SELECT-Teil der Abfrage.

Wenn man die Formulierung Übergabe an Abfrage 1:1 nimmt, gibt es nur eine Lösung: Parameterabfrage
Die Übergabe erfolgt an eine definierte Schnittstelle, die Abfrage weiß über ihre Definition, wie der Parameter zu verwenden ist.

PARAMETERS parWert INT;
SELECT *, parWert AS Inhalt
FROM TabelleX
Inhalt ist dann einfach ein konstanter Ausdruck.

Das ist jetzt bespielhaft. Von der real verwendeten Abfragen werden ja nur Geschichten erzählt und von Wirkungen berichtet. In einer ernsthaften Anfrage würde man ja sicher die Abfrage als SQL-Anweisung, also konkret, zeigen und die zielgerichtete Verwendung des Textfeldinhalts erläutern.
Mit freundlichem Glück Auf!

Eberhard

Ratoncito

Hallo

Zitat von: ebs17 am August 02, 2022, 12:57:17Das ist jetzt bespielhaft. Von der real verwendeten Abfragen werden ja nur Geschichten erzählt und von Wirkungen berichtet. In einer ernsthaften Anfrage würde man ja sicher die Abfrage als SQL-Anweisung, also konkret, zeigen und die zielgerichtete Verwendung des Textfeldinhalts erläutern.

Benötigt wird die Abfrage zur Bereitstellung von Daten zur Renditeberechnung.

Die Berechnung soll auf einem recht komplexen Formular angezeigt werden, auf dem der Stichtag sowie das Guthaben bereits in Textfeldern angezeigt werden. Daher halte ich es für einen einfachen Weg diese Werte an die Abfrage zu übergeben.

Der SQL-Code der Abfrage:
SELECT Min(tblKonto.DatumKonto) AS Starttermin, qryRendZahlungssumme.Zahlungssumme AS Zahlungssumme, Min(Forms!frmKurs!DatumKurs) AS Stichtag, Min(Forms!frmKurs!txtSum1) AS Guthaben
FROM tblKonto, qryRendZahlungssumme
GROUP BY qryRendZahlungssumme.Zahlungssumme;

Obwohl es lediglich einen Wert in dem Textfeld gibt, kommt es, wie vorher schon beschrieben, ohne den Zusatz Min oder Max zu der Anzeige der chinesischen Zeichen.

Liebe Grüße - Wolfgang


ebs17

Zitatauf einem recht komplexen Formular
Ist das eine Entschuldigung oder eine eigene Lobpreisung?
Es ist ein Zeichen von Genialität, schwierige Dinge einfach zu machen.

ZitatAnzeige der chinesischen Zeichen
So etwas kann (eigengemacht) vorkommen bei Memofeldern in Zusammenhang mit Gruppierungen.

Zu Deiner Abfrage: Per CROSS JOIN werden Inhalte vervielfacht, um dann per Gruppierung/Aggregation wieder zurückgeführt zu werden (zwei Schritte vor und zwei zurück).
Mit entsprechenden Datenmengen ist das geeignet, sich während der Abfrageausführung eine Kaffeepause zu verschaffen.

Forms!frmKurs!DatumKursNoch einmal verdeutlicht: Mit einer Formularreferenz in einer Abfrage wird nicht ein Wert an die Abfrage übergeben, sondern die Abfrage muss sich den Wert aus dem Access-/VBA-Objekt holen.
Das ist technisch ein Unterschied mit manchmal deutlichen Folgen.
Mit freundlichem Glück Auf!

Eberhard

Ratoncito

Hallo,

Zitat von: ebs17 am August 03, 2022, 15:14:52
Zitat von: undefinedauf einem recht komplexen Formular
Ist das eine Entschuldigung oder eine eigene Lobpreisung?
Es ist ein Zeichen von Genialität, schwierige Dinge einfach zu machen.

Weder noch. Es sollte lediglich erklären, warum die Daten von der Abfrage aus dem Formular geholt werden und nicht in Tabellen oder anderen Abfragen bereitgestellt werden.

Zitat von: ebs17 am August 03, 2022, 15:14:52
Zitat von: undefinedAnzeige der chinesischen Zeichen

So etwas kann (eigengemacht) vorkommen bei Memofeldern in Zusammenhang mit Gruppierungen.

Zu Deiner Abfrage: Per CROSS JOIN werden Inhalte vervielfacht, um dann per Gruppierung/Aggregation wieder zurückgeführt zu werden (zwei Schritte vor und zwei zurück).
Mit entsprechenden Datenmengen ist das geeignet, sich während der Abfrageausführung eine Kaffeepause zu verschaffen.

Liegt so etwas hier vor?

Den Code habe ich (hoffentlich korrekt) geändert.
SELECT Min(tblKonto.DatumKonto) AS Starttermin, qryRendZahlungssumme.Zahlungssumme AS Zahlungssumme, Forms!frmKurs!DatumKurs AS Stichtag, Forms!frmKurs!txtSum1 AS Guthaben
FROM tblKonto, qryRendZahlungssumme
GROUP BY qryRendZahlungssumme.Zahlungssumme;

Ergebnis:
Stichtag ist leer
Guthaben: 띋剼

Liebe Grüße - Wolfgang

ebs17

Du erwartest jetzt hoffentlich keine vollständige Diskussion zu Deiner Abfrage.

Den Begriff CROSS JOIN, der zu einem kartesischen Produkt führt, kannst Du Dir selbst erschließen, bzw. Du bist gerade noch dabei, da es kein augenscheinliches Feedback dazu gibt.

Ergebnis ...? Ergibt sich neben der SQL-Anweisung auch aus der Abfragedefinition der verwendeten Abfrage und selbstredend aus Daten in beteiligten Tabellen und hier sogar einem Formular mit Gestaltungen. Unbekannt. Da mir mein Zauberstab aus der Hand gefallen ist, kann ich da keine Aussage treffen außer: Ich habe keine Ahnung.

Daneben wurde die Nennung einer Parameterabfrage vollständig ignoriert. Wozu schreibe ich etwas?

Aber auch: Ein DatumKurs kommt aus einer Tabelle, ein Guthaben ebenso, eine Guthabenssumme für eine Abfrage würde ich in einer Abfrage berechnen. Da auf Krampf irgendwelche Formularinhalte reinbasteln zu wollen (verschiedene Programmierwelten ohne Not zu mischen) statt eine richtige Abfrage zu schreiben käme mir nicht in den Sinn.

Mangels nicht vorhandener Praxis bei diesen besonderen Wegen kann ich also insgesamt keine Dir hilfreiche Aussage treffen, und ich kann versichern, dass ich solche Dinge auch nicht ausprobiere und irgendwelchen Gestaltungen hinterherhechele.
Mit freundlichem Glück Auf!

Eberhard

PhilS

Zitat von: Ratoncito am August 03, 2022, 14:54:49Die Berechnung soll auf einem recht komplexen Formular angezeigt werden, auf dem der Stichtag sowie das Guthaben bereits in Textfeldern angezeigt werden. Daher halte ich es für einen einfachen Weg diese Werte an die Abfrage zu übergeben.
Trotz Erklärung bleibt der Sinn der ganzen Aktion für mich eher mysteriös.
Wenn die Ergebnisse der Berechnung bereits in dem Formular dargestellt werden, warum sie dann nochmal in einer Abfrage darstellen?

Wäre es nicht besser, eine oder mehrere VBA-Funktionen zu schreiben, die die Berechnungen durchführen und diese dann wahlweise in dem Formular und/oder der Abfrage zu verwenden?
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Ratoncito

Hallo,

Zitat von: PhilS am August 04, 2022, 11:05:18Trotz Erklärung bleibt der Sinn der ganzen Aktion für mich eher mysteriös.
Wenn die Ergebnisse der Berechnung bereits in dem Formular dargestellt werden, warum sie dann nochmal in einer Abfrage darstellen?

Zur Erklärung muss ich etwas weiter ausholen.
Ich beschäftige mich mit einer DB zur Verwaltung meines Depots. Immer wieder gibt es dabei einige Änderungen und Verbesserungen, die ich gerne umsetzen möchte. Wer im Forum längere Zeit mitliest wird sich sicherlich an einige Hilferufe erinnern.

Als letzten Punkt gab es eine Beispiel-DB zur Renditeberechnung, die mich fasziniert hat. Auf einem Formular zur Anzeige von Informationen zu einzelnen Wertpapieren habe ich die Renditeberechnung integrieren können.

Interessanter als die Rendite eines einzelnen Wertpapiers ist die Rendite des gesamten Depots. Auf dem oben angesprochenen Formular kann ich ein Datum auswählen. Zu diesem Datum (und zu 6 weiteren Tagen) werden mir Bestand, Kurs und Wert jedes einzelnen Wertpapiers zum Stichtag, der Barbestand des Verrechnungskontos und das Gesamtguthaben angezeigt. Nun würde ich zu diesem Tag auch gerne die Rendite anzeigen.

Bei der Erstellung dieses Formulares bin ich immer wieder an vielen Punkten gescheitert, bis dieses Formular meinen Wünschen entsprach. Die ganzen Abfragen und Verknüpfungen kann man sicherlich einfacher gestalten, ich habe es halt leider nicht besser hinbekommen. Dabei liegt das jetzt benötigte  Guthaben nicht direkt in den verwendeten Abfragen.

Nun wieder zurück zur Renditeberechnung.
Die Original-DB benutzt eine ID zur Auswahl des zu berechnenden Kontos (Wertpapier). Für meine einzelnen Wertpapiere konnte ich dies mit ein paar kleineren Abwandlungen der Abfragen in meiner DB so verwenden.

Zur Gesamtrendite aller Konten sollte es ohne Berücksichtigung der ID funktionieren. Auch das habe ich mit ein paar Anpassungen in der Original-DB hinbekommen.

Nun möchte ich dieses in meine DB integrieren. Dabei habe ich ein großes Problem mit dem zum Stichtag vorhanden Guthaben. Dieser Wert ist auf dem Formular zu jedem ausgewählten Stichtag bereits in einem Textfeld vorhanden.
Daher kam mir der Gedanke, statt einer weiteren Berechnung diesen Wert von der Abfrage aus diesem Textfeld holen zu lassen. Und der Stichtag ist ja auch schon auf diesem Formular...

So habe ich nach und nach alle dabei verwendeten Abfragen an meine DB angepasst. Alle Werte sind in den Abfragen vorhanden. Leider gibt es bei der Berechnung einen Abbruch, dass zu wenig Prameter übergeben werden.

Ich hoffe, es wird ein wenig verständlicher.

Liebe Grüße - Wolfgang