Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: SP am Januar 20, 2011, 01:19:57

Titel: Listenfeld filtern und andere Probleme
Beitrag von: SP am Januar 20, 2011, 01:19:57
Hallo zusammen

Ich habe mir mal wieder ein kleines Accessprojekt vorgenommen um nicht einzurosten und um mein Wissen um Access zu vertiefen.

Um dem gleich vorweg zu greifen ich bin eher Laie auf dem Accesssektor.

Ok nun zu meinen Problemen.

1. Ich habe eine Tabelle welche ich teilweise über Kombifelder fülle (Nachschlageassistent)In meiner Tabelle werden die Werte auch korrekt abgelegt.

In einem Formular zeige ich den Inhalt der Tabelle mit Hilfe eines Listenfeldes an.
da werden mir aber anstelle meiner Werte die dazugehörigen ID´s angezeigt.
Was habe ich falsch gemacht?

2. Das Listenfeld filter ich mit hilfe eines ungebunden Textfeldes
In der SQL Anweisung: Abfrage Generator steht dann folgendes: Wie "*" & [Formulare]![frm_Buchungsliste]![meinTextfeld].[Text] & "*"
Die filterung klappt wunderbar, solange es kein Datum ist.
Was muss ich ändern um auch nach einem Datum Filtern zu können?

3. Und weil es so schön ist hab ich gleich noch ein drittes Problem.
Und zwar lasse ich mir in dem Formular in dem das Listenfeld ist werte aus der Liste berechnen.
Das mache ich auch nur nach Bedarf und gebe diese in ungebunden Textfeldern aus.
Es gibt die Felder Brutto, Steuer, und Netto.

mein VBA code zum Textfeld Brutto zB. sieht folgendermaßen aus:

Dim I As Long
Me.Text_Brutto = 0
For I = 0 To Me.List_Buchungsliste.ListCount - 1
Me.Text_Brutto = Format(CDbl(Nz(Me.Text_Brutto)) + CDbl(Me.List_Buchungsliste.Column(14, I)), "Standard")
Next I

komischerweise hat der Code kurz mal funktioniert wüsste aber nicht das ich etwas geändert hätte. ich seh aber auch den Fehler nicht.

Access gibt dazu den Laufzeitfehler 13 aus Typen unverträglich.

Ok gleich drei Wünsche auf einmal aber ich versuche jetzt schon seit fast drei Tagen die Fehler zu lösen und bekomme es alleine einfach nicht hin.

Ich hoffe ihr wisst Rat

Sebastian
Titel: Re: Listenfeld filtern und andere Probleme
Beitrag von: database am Januar 20, 2011, 07:26:29
Hallo und guten Morgen,

so beginnt der Tag gleich ordentlich saftig ...   ;D

1.   Lass bitte die Finger von Nachschlagefeldern, die bereiten früher oder später Kopfschmerzen.
     Nachschlagefelder verwischen den Blick auf die richtige Konstellation von Tabellen und Beziehungen.
     Lass die Nachschlagefelder als Zahlenfeld Long Integer stehen und übergib diesem im Formular aus einem geeigneten Kombifeld den Primärschlüssel deiner Nachschlagetabelle.

2.   Ändere   Wie "*" & [Formulare]![frm_Buchungsliste]![meinTextfeld].[Text] & "*" zum Einen und überlege dir wonach du Filtern willst - du kannst nicht in ein und dem selben
     Feld nach Text, Zahlen und Datum filtern - das Ergebnis kennst du inzwischen.

3.   Me.Text_Brutto = Format(CDbl(Nz(Me.Text_Brutto)) + CDbl(Me.List_Buchungsliste.Column(14, I)), "Standard")
     Wenn "Standard" übergeben wird krachts!
     Format(CDbl(   ....  Wenn Text zu Double konvertiert werden soll kann's nur einen Fehler ( Laufzeitfehler 13 ) geben!

HTH
Titel: Re: Listenfeld filtern und andere Probleme
Beitrag von: SP am Januar 20, 2011, 19:18:27
Ok vielen dank für deine Mühe.

Leider hat mir deine Antwort nur Bedingt geholfen und die Probleme konnte ich leider noch nicht beheben.

Ich verstehe ja das du mir die Lösungen nicht auf einem Silbertablett präsentieren willst aber ich könnte ein wenig mehr Hilfe gebrauchen.

Dem einen oder anderen Guru hier fällts villeicht wie Schuppen von den Augen aber bei mir klemmts immer noch.

Deinen Hinweis zu den Nachschlagefeldern werde ich bei Gelegenheit Berücksichtigen aber ich verstehe trotzdem nich warum Access in meinem Fall so vorgeht und wie ich das beheben kann.

Bei der SQL Anweisung bin ich ebenfalls Ratlos. Wiss halt nicht wie ich es ändern muss.

Zum Laufzeitfehler 13:
Das CDbl den Fehler verursacht habe ich mir fast gedacht. Nur handelt es sich ja nicht um ein Feld mit der Eigenschaft Text sondern Währung.
Mit Val funktioniert das Ganze wunderbar aber ich will ja auch die Nachkommastellen verrechnen.
Mit dem € Zeichen sollte CDbl doch keine Probleme haben.
Also an der Stelle weiss ich auch nicht weiter.
Titel: Re: Listenfeld filtern und andere Probleme
Beitrag von: DF6GL am Januar 20, 2011, 19:40:50
Hallo,

Du musst halt die Vorschläge umsetzen und nicht ignorieren...

1) machen (bzgl. Nachschlagefelder)

Falsch:  Tabelle als Datensatzerkunft des Listenfeldes. Dort ist eine Abfrage erforderlich  , die beide Tabellen verknüpft und in ihrer Select-Liste (Abfragespalten) die benötigten Tabellefelder aufweist.


2) zur Kenntnis nehmen und Deine Suchfuntion überdenken, bzw. die Bedeutung und Werteinhalt der Tabellenspalten korrigieren.
Wie dazu erwähnt, ist ein Datum kein Text, und somit kann man nicht mit Like und Textvergleich filtern.

3)   Me!Text_Brutto =val(Nz(Me!Text_Brutto,0)) + val(nz(Me!List_Buchungsliste.Column(14, I),0) )
und stell die Eigenschaft "Format" des Textfeldes "Text_Brutto" auf "Standardzahl" ein.
Titel: Re: Listenfeld filtern und andere Probleme
Beitrag von: SP am Januar 20, 2011, 20:36:05
1. Keine Angst ich beherzige eure Ratschläge schon.

Bin auch gerade dabei meinen Aufbau zu ändern. Möchte halt nur alles verstehen.

2.

Das ich meine Suchfunktion ändern muss war mir klar. und wo der fehler liegt habe ich auch geahnt aber ich kenne halt noch nicht alle Befehle und wenn ich sie kenne scheitert es oft an der richtigen Syntax.

Wie gesagt bin Anfänger...motivert aber eben Anfänger.

Schreibe auch nur hier rein wenn ich wirklich nicht mehr weiter komme. Und da benötige ich dann halt eher Hilfestellung für ganz BLÖDE.

3. Da wären wir wieder bei der Syntax

Ich gehe davon aus das dein Code stimmt aber die Syntax ist falsch.
Und wie oben geschrieben bekomme ich sie auch in diesem Fall nicht korigiert.





Titel: Re: Listenfeld filtern und andere Probleme
Beitrag von: SP am Januar 20, 2011, 20:41:22
Aber um dem ganzen vorweg zu greifen warum Val?
Da bleiben doch die Nachkommastellen auf der Strecke oder macht dein Code noch irgendwas was ich nicht erkennen kann?
Titel: Re: Listenfeld filtern und andere Probleme
Beitrag von: DF6GL am Januar 20, 2011, 21:32:22
Hallo,


es fehlte noch eine Klammer...

eigentlich braucht man kein val

  Me!Text_Brutto= nz(Me!Text_Brutto,0) +nz(Me!List_Buchungsliste.Column(14, I),0)
Titel: Re: Listenfeld filtern und andere Probleme
Beitrag von: SP am Januar 20, 2011, 21:46:12
Ok danke hab verstanden.

Habe zwar um Hilfe gebeten werde aber nicht betteln.

Um aber anderen die mal auf ein ähnliches Problem stoßen zu helfen.

Der folgende Code ist nicht die Lösung des Problems, da die Nachkommastellen nicht berechnet werden und das Ergebnis die summe gerundeter Einzelwerte darstellt.

Das heisst je mehr Werte ihr Verrechnet umso größer eure Abweichung.

Wem das aber reicht hier der korigierte Code von DF6GL:

Dim I As Long
Me.Text_Brutto = 0
For I = 0 To Me.List_Buchungsliste.ListCount - 1
Me!Text_Brutto = (Val(Nz(Me!Text_Brutto, 0)) + Val(Nz(Me!List_Buchungsliste.Column(15, I), 0)))
Next I

Wie aber bereits zuvor erwähnt habe ich das schon selber ausprobiert und zwar mit diesem Code:

Me.Text_Brutto = 0
For I = 0 To Me.List_Buchungsliste.ListCount - 1
Me.Text_Brutto = Format(CDbl(Nz(Me.Text_Brutto)) + CDbl(Me.List_Buchungsliste.Column(15, I)), "Standard")
Next I

Liefert gleiches Ergebnis.

Titel: Re: Listenfeld filtern und andere Probleme
Beitrag von: DF6GL am Januar 20, 2011, 21:59:43
Hallo


"Habe zwar um Hilfe gebeten werde aber nicht betteln."

Was willst Du eigentlich? Du bekommst doch Hilfe....   ::)  ???




Wenn Du Val verwendest, brauchst Du noch die STR-Funktion, um das Komma  in einen Punkt zu wandeln.


Ohne Val und Str und Berücksichtigung evtl.  leerer Spalten (Spaltenwert =""):


Me!Text_Brutto = Nz(Me!Text_Brutto , 0) + IIf(Len(Nz(Me!List_Buchungsliste.Column(0, itm), "")) > 0, Me!List_Buchungsliste.Column(15, i), 0)


PS: diese permanente Umkonvertierung bei Deinem Versuch von Variant nach Double nach String in unsinnig.
Titel: Re: Listenfeld filtern und andere Probleme
Beitrag von: SP am Januar 20, 2011, 22:59:13
Tja und das sehe ich halt anders.

Fragen die mir bei der Lösungsfindung helfen würden werden einfach übergangen.
Stattdessen werden mir Codeschnipsel (und wenns sein muss halt ein fehlerhafter Code) um die Ohren gehauen obwohl ich bereits geschrieben habe das ich Anfänger bin und ich verstehe nunmal nicht alles oder es fehlen noch gewisse Hintergründe um dein Fachchinesisch zu verstehen.

Ich habe noch nie gebacken und möchte einen Schokokuchen machen, könnt ihr mir Helfen?

Deine Antwort: Nimm einfach Schokolade!

Wo ist da die besagte Hilfe?

Fragen die mir beim Verständnis helfen würden werden einfach übergangen.

So habe geschrieben das die Funktion Val mir Werte liefert aber ohne die Nachkommastellen zu berücksichtigen.

Du postest mir einen Code mit val der genau das gleiche macht wie mein schon bestehender code. Nein er war auch noch Fehlerhaft (nicht schlimm!!! ehrlich)

Aber deine Antwort: Nimm einfach Schokolade

Du wusstest doch genau wo die Klammer hin muss!

Warum CDbl nicht Funktioniert schreibst du mir auch nicht.

Dabei würde sie nach meinem Wissen doch genau diesen Zweck erfüllen. (vor allem hat CDbl in meinem Code mir mal Werte geliefert und plötzlich nichtmehr)

Dein neuer Code bereitet mir auch Probleme

Er gibt den Laufzeitfehler 13 aus.

naja vielleicht verstehst du jetzt was ich meine.
Titel: Re: Listenfeld filtern und andere Probleme
Beitrag von: DF6GL am Januar 20, 2011, 23:35:17
in der Tat, ja..


und ich sehe es jetzt so:  Leider kann ich Dir bei Deinem eigentlichen Problem nicht helfen.
Titel: Re: Listenfeld filtern und andere Probleme
Beitrag von: SP am Januar 21, 2011, 00:10:11
Ok der offensive Rückzug.

Wollte nicht mit dir streiten sondern dir nur deutlich machen das es ein Unterschied ist ob du einem Fachman oder einem Laien etwas erklärst. Ach was solls.

Auch wenn das jetzt nach den Editierungen von DF6GL anders rüberkommt bin ich natürlich für weitere Hilfe dankbar.

Titel: Re: Listenfeld filtern und andere Probleme
Beitrag von: oma am Januar 21, 2011, 00:42:12
Hallo Sebastian,

bedenke mal, die Helfenden können nicht immer das Niveau der Fragenden genau einschätzen. Auch die eigenen Einordnung als Laie hat sich oft als sehr unterschiedlich herausgestellt.

Deshalb solltest du es so sehen: du bekommst keinen Code um die Ohren gehauen sondern einen Code angeboten.
Und wenns dann nicht das richtige Angebot war, kannst du nachfragen!

Immerhin hast du schon Hilfe bekommen u, wenns auch noch nicht so recht geklappt hat; formuliere noch einmal dein Problem u. du wirst auch weiter Hilfe bekommen!

Ansonsten: Immer ruhig und unpolemisch versuchen, das Problem zu lösen ;)

Gruß Oma
Titel: Re: Listenfeld filtern und andere Probleme
Beitrag von: SP am Januar 21, 2011, 01:27:53
Also das Problem mit der Sortierung nach Datum habe ich jetzt fürs erste gelöst.

Ich habe in meinem Formular mit dem Listenfeld ein Kombinationsfeld angelegt mit der Datensatzherkunft die auch mein Listenfeld hat. Dort lasse ich mir die Spalte Datum anzeigen.

Bei dem Ereignis nach Aktualisierung meines Kombinationsfeldes habe ich folgenden Code hinterlegt:

Me!List_Buchungsliste.RowSource = "SELECT * FROM abf_Buchungen WHERE (((abf_Buchungen.Veranstaltungsdatum) Between Forms!frm_Buchungsliste!Kombinationsfeld68 And Forms!frm_Buchungsliste!Kombinationsfeld68));"
Me!List_Buchungsliste.Requery

Wenn ich nun ein Datum in meinem Kombinationstfeld anklicke werden Laut Code alle Datensätze zwischen Datum 1 und Datum 2 angezeigt.

Da wie in dem Code zu sehen sowohl Datum 1 als auch Datum 2 dem gleichen Kombinationsfeld entnommen werden und da ja nunmal nur ein Datum angewählt ist zeigt das Listenfeld alle Datensätze mit eben diesem Datum.

Das ganze ist bestimmt eleganter zu lösen aber das funtioniert zumindest schonmal.

@OMA

Ja du hast schon Recht ich wollte die Richtung auch nicht einschlagen aber es ist nunmal wie es ist.

Trotzdem bin ich der Meinung das wenn ich sage, ich brauche eine Hilfestellung für Blöde, es klar ist das ich etwas ausführlichere Antworten brauche.

Wenn ich dann also einen Code angeboten bekomme (das sehe ich natürlich auch so) und schreibe das ich ihn nicht verstehe und er auch einen Fehler hat (Fehlermeldung) und er mir Antwortet:

Ja es fehlt eine Klammer!

und das wars, dann sehe ich das doch nicht Falsch oder?

Schließlich zog sich das so durch die ganzen Beiträge...nichts Halbes und nichts Ganzes.

Für mich wiederspricht das dem was ein Forum eigentlich bieten sollte und wofür es gedacht ist.

Natürlich hat er seine Antworten anschließend editiert und den Code beigefügt wodurch die ganzen Beiträge sich jetzt anders lesen.

Mir muss niemand Helfen aber wenn dann bitte vernünftig.

Ich bin selber in diversen Fachforen (nicht Access) unterwegs und gebe Hilfestellung und wenn ich mal keine Lust habe dann lasse ich halt mal die Finger von der Tastatur. Aber sowas ist nicht Nett.

Und wie du siehst poste ich auch nachträglich noch meine Lösungen (wahrscheinlich sehr Laienhaft Beschrieben) obwohl nur Gast hier.

Bin also nicht auf der Suche nach der schnellen Lösung und dann kommt nichts mehr.

Das Problem des berechnens besteht übrigens immernoch da wäre ich natürlich für weitere Hilfe sehr dankbar.
Titel: Re: Listenfeld filtern und andere Probleme
Beitrag von: database am Januar 21, 2011, 15:56:45
Hallo,

sicher ist das eleganter zu lösen - allerdings muss dir klar sein, dass es verschiedene Lösungswege gibt.
Ich zeige dir jetzt mal EINEN:

Nachdem du mit einem Kombifeld begonnen hast KANNST du bei der Linie bleiben.
Allerdings bedingt das Schlüsselwort  BETWEEN  in deinem SQL-Statement den Vergleich mit ZWEI unterschiedlichen Werten.
Da es nicht ganz einfach ist, 2 verschiedene Werte aus einem Kombifeld zu beziehen GÄBE es einer logischen Schlussfolgerung nach die Möglichkeit, das Ganze über ZWEI Kombifelder zu regeln.

Ich würde zu dem Zweck wärmstens empfehlen Formularfelder mit einem Namen zu versehen, aus dem der Zweck des Feldes ablesbar ist.
Das 'alte' Kombifeld benne daher 'cboVon' und dann erstelle ein 2. Feld (Kopie des ersten) und benenne dieses 'cboBis'.

Dann ändere deinen Code wie folgt:

Me!List_Buchungsliste.RowSource = "SELECT * FROM abf_Buchungen WHERE abf_Buchungen.Veranstaltungsdatum Between Forms!frm_Buchungsliste!cboVon And Forms!frm_Buchungsliste!cboBis;"
Me!List_Buchungsliste.Requery


HTH
Titel: Re: Listenfeld filtern und andere Probleme
Beitrag von: SP am Januar 21, 2011, 17:48:33
Ja du hast natürlich Recht mit der Benennung der Kombifelder.
Habe den Code nur so hier rein kopiert damit andere die ebenfalls nicht so viel Ahnung von Access haben den Code besser deuten können.
Trotzdem danke für deinen Ratschlag.

Wenn man das was ich machen wollte mal berücksichtigt war mein Code ohnehin schwachsin.

Naja es war spät und ich müde.

Da ich ja nur nach Datensätzen mit einem Datum Filtern will sieht mein Code jetzt folgendermaßen aus:

Me!List_Buchungsliste.RowSource = "SELECT * FROM abf_Buchungen WHERE (((abf_Buchungen.Veranstaltungsdatum) = Forms!frm_Buchungsliste!Kombinationsfeld1));"
Me!List_Buchungsliste.Requery

Titel: Re: Listenfeld filtern und andere Probleme
Beitrag von: database am Januar 21, 2011, 18:13:44
ZitatDa ich ja nur nach Datensätzen mit einem Datum Filtern will....
Davon bin ich nach deiner vorangegangenen Schilderung ausgegangen  ::)

Me!List_Buchungsliste.RowSource = "SELECT * FROM abf_Buchungen WHERE (((abf_Buchungen.Veranstaltungsdatum) = Forms!frm_Buchungsliste!Kombinationsfeld1));"

Dieser Codeteil liefert ins Listenfeld jene Datensätze, deren Eintrag im Feld Veranstaltungsdatum der Auswahl im Kombi entspricht.
Die Auswahl nach einem Datumsbereich ist so allerdings nicht möglich.

ZitatJa du hast natürlich Recht mit der Benennung der Kombifelder.
Hmmmm.....  :-\
Titel: Re: Listenfeld filtern und andere Probleme
Beitrag von: SP am Januar 21, 2011, 18:27:12
Ja genau das wollte ich ja ;-)

Wie gesagt Bennenung dient nur der besseren Deutung.

Mein Kombifeld heißt kfe_VD