Neuigkeiten:

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

Mobiles Hauptmenü

Inhalt eines Textfeld im Formular Auswerten

Begonnen von stenu41, Juli 17, 2014, 11:51:13

⏪ vorheriges - nächstes ⏩

stenu41

Hallo zusammen,
ich habe folgenden Ausgangssituation:
In einem Eingabeformular wir in ein Textfeld eine festgelegte Kombination geschrieben.
Bsp.: 1/2/3/4*5/1*11/3*6 oder A10/5*S1/B11/2*F2

Jede Zahl ist einmalig und entspricht den festgelegten Werten aus einer Tabelle
Tabelle1:
1 = 1€
2 = 2€
usw........

jetzt brauche ich eine Funktion, die auf Knopfdruck prüft, wie das Ergebnis des Textinhaltes in € ist.
Dieser Wert soll dann in die Tabelle geschrieben werden.

Ich habe versucht, das Textfeld auszuwerten komme aber nicht weiter.
Vom Prinzip muss die Funktion prüfen welche Zahl ist enthalten, die mit 5* zusätzlich noch Multiplzieren und dann aus der Tabelle die festgelegten Preise zusammenzählen.

Theorie soweit aber ich bekomme es einfach nicht hin........

Hoffe hier kann mir jemand den entscheidenden Tip geben.

Danke schon mal

Grüsse aus HD

MaggieMay

Hallo,

ich verstehe nur "Bahnhof" und vermute, dass ich damit nicht allein dastehe.
Vielleicht könntest du die Sache noch einmal etwas präziser und weniger konfus formulieren?
Freundliche Grüße
MaggieMay

stenu41

Ich versuch mal licht ins dunkle zu bringen: 8)
Ich habe eine Tabelle in der in einem Textfeld folgender Inhalt steht:
1/3/5/1*7/60*6/
Das muss leider so sein und kann nicht anders eingegeben werden, bzw. wird so vorgegeben.
jetzt muss ich folgendes Berechnen
Es gibt eine weitere Tabelle in der definiert ist was den Zahlen zwischen den // entspricht.
1=100
3=50
5=10
7=15
6=1

1* oder 60* ist der Multiplikator.
Steht kein Multiplikatior ist immer ein mal.

Jetzt möchte ich aus dem String oben die Summe errechnen (nur bei bedarf)

Das wären nach dem Beispiel oben 235.........

Ich hoffe das war jetzt einfacher......

Gruß aus HD

MaggieMay

Sorry, aber das ist für mich immer noch nicht nachvollziehbar.
ZitatDas wären nach dem Beispiel oben 235
Kannst du das bitte anhand eines konkreten Beispiels schrittweise erläutern?
Freundliche Grüße
MaggieMay

bahasu

Servus

MaggieMay

Sorry, aber jetzt verstehe ich dein Problem ehrlich gesagt überhaut nicht mehr.
Zitatjetzt brauche ich eine Funktion...
Die ist ja offensichtlich bereits vorhanden.
ZitatDieser Wert soll dann in die Tabelle geschrieben werden.
Warum? Dieser Wert kann doch jederzeit aktuell berechnet werden.


Freundliche Grüße
MaggieMay

stenu41

Hallo zusammen,
erst mal danke für die Antworten, leider ist das nicht das was ich brauche.
Ich habe schnell ein Beispiel zusammengeklckt um es besser zu beschreiben.

Tabelle1: Hier gibt es eine Spalte (LP) mit Zahlenkombinationen
Tabelle2: Hier wird definiert welcher Betrag zu jeder Zahl zugeordnet wird.

Jetzt soll die im Formular befindliche Schaltfläche folgendes machen:
Schauen welche Zahlen zwischen den / vorhanden ist
die Zahlen einzeln zwischenspeichern
Aus der Tabelle 2 den Betrag zu den Zahlen holen
Ergebnis Anzeigen (Im ungebundenen Feld)

Gruß Stefan

bahasu

Hi,

jetzt kann ich Dein Unverständnis nicht verstehen.  :-[

In meinem Beispiel gibt es eine Tabelle mit einem Feld, das Zahlenkombinationen - wie im Anfangsbeitrag vorgegeben - enthalten kann.

Weiterhin gibt es eine Tabelle, die eine Übersetzung in der Art 6=1 auflistet.

Dann gibt es eine Abfrage, die eine Public-Function aufruft, die das Zahlen-Kauderwelsch in eine Summe überführt.

Was hindert Dich daran, in einem Formular einen Button zu haben, bei dem diese Public Function mit Übergabe des aktuellen Datensatzes (bzw. Teile davon) aufgerufen wird?

Das Speichern in einer Tabelle hatte ich in meinem Beispiel bewußt nicht gemacht, da es (meistens) nicht ratsam ist, berechnete Werte (in diesem Fall deine Summe) redundant zu speichern.

Harald

Nachtrag:
Die Aufgabe "die Zahlen einzeln zwischenspeichern" ist jetzt neu hinzugekommen, gell? ;D
Servus

stenu41

Hallo bahasu,

sorry, aber ich war heute morgen wohl noch nicht bei der sache :)
das ist natürlich genau der Ansatz den ich brauche...........
Ich sehe nur nicht wo du die "Preise" herholst aber sonst ist das schon genau der weg den ich suche :)

Danke schon mal jetzt verusche ich das mal zum laufen zu bringen.......


gruß Stefan

MzKlMu

Hallo,
Du hast zwar oben geschrieben, dass es so vorgeben wird, aber trotzdem der Hinweis, dass das in eine Datenbank so nicht gemacht wird. Hier sollten für jeden Eintrag ein Feld verwendet werden in dem man auch die Schlüsselzahlen speichert. Das zerpflücken des Feldes entfällt dann.
Der jetzige Aufbau verstößt bereits gegen die 1.Normalform (=atomare Inhalte).

Nur noch als Hinweis.
Gruß Klaus

bahasu

Hi,

das "Zahlenkauderwelsch" steht in meinem Beispiel in der Tabelle "Zahlen" im Feld "Zahlen_Text".

Vermutlich bist Du aber eher an der Abfrage in meinem Beispiel interessiert: Dort wird die Public Function aufgerufen und es wird das "Zahlenkauderwelsch" als Parameter übergeben.
Wenn Du in eine Abfrage oder in einem Steuerelement eines Formulars diese Funktion einträgst und Deine "Preise" (?) übergibst, sollte es hinkommen.

Allerdings müssen in der Public Function die Datenquelle und die Namen an Deine "Umwandlungstabelle" (das ist wo 6=1 steht ;D) angepasst werden (das ist da, wo "dlookup" steht  ;D).

Harald
Servus

stenu41

@MzKlMu

Ich gebe dir vollkommen recht, muss aber mit dem arbeiten was mir aus einem anderen Programm vorgegeben wird.

@bahasu

Danke für den Ansatz. Das war genau was ich brauche, jedoch möchte ich keine durchgehende berechnung sondern nur nach bedarf.
So wie n meinem Beispiel: Erst wenn ich den Button Berechnen betätige soll er mir das Ergebnis in in ein ungebundenes Formularfeld eintragen.
Jetzt leider noch ein weiteres Problem. Es kann zukünftig auch vorkommen, das an Stelle 1/2/ usw. A10/B20 genutzt wird.
Dazu kann man die Tabelle Umwandlung (alt) auf Textfeld ändern, jetzt bekomme ich aber eine Fehlermeldung in der Schleife
If InStr(TeilString, "*") = 0 Then
                ZwischenSumme = ZwischenSumme + DLookup("Neu", "Umwandlung", "Alt=" & Val(TeilString))

Danke noch mal für die Hilfe


Gruß Stefan

bahasu

Hi,

Knackpunkt ist wohl: val (A10)

Public Function fSumme(Eingabe As String) As Integer            'Eingabe = 1/3/5/1*7/60*6/
    Dim ZwischenSumme As Long
    Dim TeilString As String
    Dim RestString As String


    If Nz(Eingabe, "") > "" And InStr(Eingabe, "/") > 0 Then
        ZwischenSumme = 0
        RestString = Eingabe
       
        Do Until RestString = ""
            TeilString = Left(RestString, InStr(RestString, "/") - 1)
           
            If InStr(TeilString, "*") = 0 Then
                ZwischenSumme = ZwischenSumme + DLookup("Neu", "Umwandlung", "Alt='" & TeilString & "'")
            Else
                ZwischenSumme = ZwischenSumme + Val(Left(TeilString, InStr(TeilString, "*") - 1)) * DLookup("Neu", "Umwandlung", "Alt = '" & Mid(TeilString, InStrRev(TeilString, "*") + 1) & "'")
            End If
           
            RestString = Mid(RestString, InStr(RestString, "/") + 1)
        Loop
       
        fSumme = ZwischenSumme
    End If
End Function


Habe bei den ehemaligen val-Stellen einige Hochkomma spendiert.
Ohne Gewähr, da ich keine Zeit zum Testen habe.
Wäre leichter gewesen, wenn von Anfang an die möglichen Konstellationen bekannt gewesen wären. >:(

Harald
Servus

stenu41

Hallo Harald,

erst noch mal vielen Dank, das funktioniert alles super, auch mit (A10).
Hatte das aber in meinem ersten Post auch beschrieben :)

Jetzt habe ich nur noch ein kleine Problem, das ich noch lösen möchte.
Derzeit ist es ein public funktion und wird also immer durchgeführt.
Ich möchte das aber als Private Sub Befehlxx_Click() ausführen und das ergebnis in einem ungebundenen Textfeld im Formular anzeigen.
Kannst du mir da noch den entscheidenden hinweis geben wie ich das umsetzen kann.

Danke schon mal vorab.

Gruß Stefan

bahasu

Hi,

freut mich.
Kannst Du eine abgespeckte Version mit wenigen Spieldaten im access 2003-Format als zip-Datei zur Verfügung stellen?
Hätte den Vorteil, dass ich Deine Konstellation besser sehe.

Harald
Servus