Neuigkeiten:

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

Mobiles Hauptmenü

Datensätze im Formular anzeigen über Auswahl mit 2 Kombifeldern

Begonnen von ricog, Mai 03, 2013, 23:53:55

⏪ vorheriges - nächstes ⏩

ricog

Hallo zusammen!
Ich bin gerade am basteln eines Kassenbuches für unseren eigenen Haushalt. Da sollen also Einnahmen und Ausgaben monatl. bzw. jährlich dargestellt werden. So ähnlich wie das "Kassenbuch V7" was hier zum Download bereitsteht...

Ich habe schon bissel rumexperimentiert, aber da ich mit Codes usw. nicht sehr bewandert bin brauche ich eure Hilfe.

So, nun mal zum Thema:

ich habe eine tab_Ein_Aus mit den Feldern Datum, Buchungsart, Kategorie, Verwendung, Bezeichnung und Betrag. Dort sollen alle Eingänge und Ausgänge gespeichert werden.

In einem Endlosformular sollen jetzt Dätensätze angezeigt werden, ausgewählt nach Jahr und Monat.
Ich möchte also ein Kombifeld zur Auswahl Jahr und ein Kombifeld zur Auswahl Monat erstellen. Kombifeld erstellen ist ja kein Problem, aber die Auswahl der Daten über 2 Kombifelder (so wie im "Kassenbuch V7")... Würde mich über eure Hilfe sehr freuen...

Ach ja, zur Auswahl Kombifeld Jahr habe ich eine tab_Jahreszahlen und zur Auswahl Kombifeld Monat eine tab_Monate...

Vielen Dank...

daolix

Hallo
evtl so:

Select *, Month([Datum]) as fld_Monat,  Year([Datum]) as fld_Jahr from  tab_Ein_Aus where   Month([Datum]) = " & MonatsKombifeld & " And  Year([Datum]) =" & JahrKombifeld & ";"
Hierbei sollten deine Kombifelder die entsprechenden Nummern zurückliefern, also 3 statt März oder Mrz. Diesen SQL-String übergibst du dann deinem Urfm/Frm oder Listen - Rowsource, beim laden des Formulars, sowie bei der Aktualisierung der Kombifelder.

ricog

Ich hab das jetzt in einem Endlosformular untergebracht, die kombifelder im Formularkopf...

Bringt mir ne Fehlermeldung (Fehler beim Kompilieren -> Syntaxfehler), also geht nicht... Woran kann das liegen?

daolix

Anbei ein simples Bsp


[Anhang gelöscht durch Administrator]

ricog

Vielen Dank...
Habs hingekriegt und es funktioniert... :)

Hatte in der Abfrage fürs Formular eine Sortierung vorgenommen (Datum, Buchungsart, Kategorie, V-Zweck).
Das ist jetzt leider weg. Muss dass in den Code mit rein?

daolix

Ja, einfach dem String hinten dranhängen
GetSQLString = cSQL  & ... & " Order By Datum {Asc|Desc}, Buchungsart {Asc|Desc}, Kategorie {Asc|Desc} ,  V-Zweck {Asc|Desc}"
wobei {Asc|Desc} durch deine gewollte Sortierung zu ersetzen ist.



ricog

sieht jetzt so aus... (hab das Datum nach hinten verschoben)

Private Function GetSQLString()
    Const cSQL As String = "Select * from tab_Ein_Aus Where "
    Select Case Me.kf_monat
        Case 0
            GetSQLString = cSQL & "Month([Datum])>0 and year([Datum])=" & Me.kf_Jahr
        Case Else
            GetSQLString = cSQL & "Month([Datum])=" & Me.kf_monat & " and year([Datum])=" & Me.kf_Jahr
            GetSQLString = cSQL  & ... & " Order By Buchungsart {Asc}, Kategorie {Asc} ,  V_Zweck {Asc}, Datum {Asc} "
    End Select
End Function

Bringt mir aber ne Fehlermeldung bei & ... & (Erwartet Bezeichner oder geklammerter Ausdruck)

database

Hallo,

eher so:


Private Function GetSQLString() As String
    Const cSQL As String = "Select * from tab_Ein_Aus Where "
    Select Case Me.kf_monat
        Case 0
            GetSQLString = cSQL & "Month([Datum])>0 and year([Datum])=" & Me.kf_Jahr
        Case Else
            cSQL = cSQL & "Month([Datum])=" & Me.kf_monat & " and year([Datum])=" & Me.kf_Jahr
            GetSQLString = cSQL  & " Order By Buchungsart ASC, Kategorie ASC,  V_Zweck ASC, Datum ASC"
    End Select
End Function


code]

ricog

Nee, da haut auch irgendwas nicht hin..?
Bringt mir "Laufzeitfehler 3145" und Syntaxfehler in where-Klausel...

beim Öffnen des frm wird jetzt letzte Auswahl angezeigt, ohne meine bedingte Formatierung, bei neuer Auswahl o.g. Fehlermeldung...

Hier mal der komplette Code...



Option Compare Database
Option Explicit

Private Sub Form_Load()
    Me.kf_monat = 0
    Me.kf_Jahr = Year(Date)
    Me.RecordSource = GetSQLString
End Sub

Private Sub kf_Jahr_AfterUpdate()
    Me.RecordSource = GetSQLString
End Sub

Private Sub kf_monat_AfterUpdate()
    Me.RecordSource = GetSQLString
End Sub

Private Function GetSQLString() As String
    Const cSQL As String = "Select * from tab_Ein_Aus Where "
    Select Case Me.kf_monat
        Case 0
            GetSQLString = cSQL & "Month([Datum])>0 and year([Datum])=" & Me.kf_Jahr
        Case Else
            GetSQLString = cSQL & "Month([Datum])=" & Me.kf_monat & " and year([Datum])=" & Me.kf_Jahr
            GetSQLString = cSQL & " Order By Buchungsart {Asc}, Kategorie {Asc} ,  V_Zweck {Asc}, Datum {Asc} "
    End Select
End Function




daolix

Hallo

hmm und ich ich dachte mit den ... und den {} würde es man verstehen, du solltest keine Zeile anfügen sondern die entsprechende Zeile erweitern
so isses gemeint

...
Case Else
            GetSQLString = cSQL & "Month([Datum])=" & Me.kf_monat & " and year([Datum])=" & Me.kf_Jahr & " Order By Buchungsart Asc, Kategorie Asc ,  V_Zweck Asc, Datum Asc "
End Select
...

ricog

Jetzt hab ich es... und es funktioniert :)
Hab es sogar bei case 0 noch hingekriegt :) :)

Vielen, vielen Dank..


Sorry, aber wie schon erwähnt, mit Codes hab ich es nicht so... (noch nicht...)

database

Hi,

noch als Nachtrag...

ZitatNee, da haut auch irgendwas nicht hin

Ich habe in meinem Beitrag die passende Form der Zusammensetzung deines SQL-Strings stehen

Zitataber wie schon erwähnt, mit Codes hab ich es nicht so
Ist es zu schwierig eine fertige Lösung zu kopieren?  ;) ;D

ricog

Hab ich doch gemacht...
Hat aber nicht funktioniert... Warum? keine Ahnung... :(

daolix

Hallo Peter,

aber ich glaube deine Lösung löst auch nen Fehler aus, da cSQL kein String sondern eine Konstante ist und der kannst du keinen Neuen Wert zuweisen.

database

Hallo,

Const ...  habe ich überlesen - As String aber registriert ... sorry - mein Fehler.
Allerdings sehe ich in der Codeabfolge eigentlich keinen rechten Bedarf an einer Konstante  :-\

Aber egal, es funktioniert und das ist OK

LG