Hallo,
Hab ein dringendes Problem und weiß nicht ob das überhaupt geht:
Ich hab eine Abfrage mit einer Spalte, wo die Gesamtkosten eines bestimmten Jahres berechnet werden.
Dies mache ich mit einem Kriterium, wo eine Box aufgeht, wo ich das Jahr eingeben kann, welches berechnet werden soll.
Nun möchte ich in der Spaltenüberschrift folgendes stehen haben.
Gesamtsumme von Jahr X: Kosten1+Kosten2
Für das X soll nun das Jahr eingetragen werden, welches ich als Kriterium in der Box definiert habe.
Hab bereits folgendes probiert.
Gesamtsumme von Jahr [Bitte Jahr eingeben]: ...
--> doch dies lässt er nicht zu, da angeblich [] nicht erlaubt ist.
Bitte um Hilfe!
Danke!
???
Was willst Du damit in der Spaltenüberschrift einer Abfrage ?
Generiere einen Bericht aus der Abfrage und Du kannst die Überschrift wählen, wie Du willst.
Abfragen sind keine Drucklayouts.............
Ein Bericht ist in diesem Fall nicht sinnvoll, da ich dafür zu viele Felder habe und dies unübersichtlich in einem Bericht wird.
Weiters möchte ich mit den Daten weiterarbeiten.
Es ist so, dass bei mir auf Knopfdruck die Tabellenansicht der Abfrage aufgeht und man hier eine Zusammenfassung der Daten bekommt.
Weiters kann man weitere Daten importieren, welche dann automatisch als neue Felder hinzugefügt werden.
Daher hätte ich einfach gern zur besseren Übersicht das Jahr in dieser Überschrift eingetragen.
Man arbeitet nicht in Abfragen !
Dann erstell ein Formular in der Datenblattansicht, welches auf deiner Abfrage basiert und gib dort einen sprechenden Spaltennamen ein.
Hallo,
wenn es unbedingt mit der Abfrage sein soll, versuche es mal so:
Gesamtsumme von Jahr: [Bitte Jahr eingeben] & " " & (Kosten1+Kosten2)
Beachte den verschobenen Doppelpunkt gegenüber Deinem Versuch.
Hallo,
leider ändert das nicht die Spaltenüberschrift sondern nur den Feldinhalt.
Aber du könntest im Klick-Ereignis deines Button den SQL-String deiner Abfrage zusammenbauen und dann deiner Abfrage zur Laufzeit zuweisen.
z.B.:
Private Sub Befehl0_Click()
Dim strSQL As String
Dim strTitel As String
strTitel = "Gesamtsumme von Jahr " & InputBox("Jahr") & ": Kosten1+Kosten2"
strSQL = "SELECT Feld1, Feld2, [Kosten1] + [Kosten2]" & " AS [" & strTitel & "] FROM DeineTabelle"
CurrentDb.QueryDefs("DeineAbfrage").SQL = strSQL
DoCmd.OpenQuery "DeineAbfrage"
End Sub
HTH
Danke für die tolle Antwort.
Wenn ich nur 1 Tabelle hätte, auf welche die SELECT zugreift, würde es gehen.
Mein Problem ist noch dass eben bei der SELECT Felder aus insgesammt 7 verschiedenen Tabellen genommen werden.
Lässt sich das auch in der SELECT darstellen?
LG
Hallo,
das mit den 7 Tabellen musst Du mal genauer erklären.
Warum sind das 7 Tabellen?
Sind die alle 7 Tabellen gleich aufgebaut?
Hallo,
Folgende Struktur:
1. Tabelle KD-Nr. (2 Felder)--> von dieser gehen alle Beziehungen weg.
2. Tabelle jährliche Kosten (alle Felder)
3. Tabelle Quartalskosten (alle Felder)
4. Tabelle Monatskosten (alle Felder)
5. Tabelle statistische Daten (alle Felder)
6. Tabelle Jahreskostehochrechnung (2 Felder)
7. Tabelle Quartalskostenhochrechnung (2 Felder)
8. Tabelle Monatskostenhochrechnung (2 Felder)
Diese Felder reihe nacheinander in die neue Abfrage ein un mach dazwischen noch 3 neue Felder mit Berechnungen aus diesen Tabellen.
Interessant wäre nun für mich wie ich in der Select-Anweisung sagen kann, dass aus verschiedenen Tabellen genommen werden soll.
z.B. Select Feld 1, Feld 2 from Tabelle 1; Select Feld 1, Feld 2 from Tablle 2; ...
Danke!
Hallo,
du brauchst ja nur das SQL-Statement der Originalabfrage nehmen und dann für die Laufzeitzuweisung anpassen.
Egal wieviele Tabellen für die Abfrage in Beziehung gestzt werden, ändern musst du nur die Spaltenbeschreibung in der Feldliste.
Das schaut dann halt in Etwa so aus ...
strSQL = "SELECT Tab1.Feld1, Tab2.Feld2, TabX.FeldX, [TabY].[Kosten1] + [TabY].[Kosten2]" & " AS [" & strTitel & "] FROM Tab1 INNER JOIN (.... usw."
Auf diese Weise wird die Darstellung der Spaltenliste geändert und dieser geänderte SQL-String der Abfrage mit...
CurrentDb.QueryDefs("DeineAbfrage").SQL = strSQL
...wieder zugewiesen.
Danach wird die Abfrage geöffnet (und natürlich ausgeführt) wobei dann die gänderte Spaltenbezeichnung angezeigt wird.
p.s. weil ich gerade sehe, dass du geantwortet hast...
Ich gehe aber schon davon aus, dass die Abfrage OHNE die gänderte Spaltenbezeichnung bereits existiert.
Wenn du dann den Abfrageentwurf öffnest und die SQL-Ansicht anzeigen läßt, kannst du von dort den SQL-String
kopieren und in der Prozedur der Variablen 'strSQL' zuweisen.
Für das entsprechende Feld setzt du dann ... [TabY].[Kosten1] + [TabY].[Kosten2]" & " AS [" & strTitel & "] .... in diesen String ein.
Die Tabellenstruktur die du da angegeben hast scheint mir aber auch etwas weitläufig - um das mal so zu formulieren.
Warum? Nun Monatskosten und Quartalskosten lassen sich per Abfrage aus den Jahreskosten extrahieren und die Tabellen XYZhochrechnung scheinen mir ebenfalls nur berechnete Daten zu enthalten.
Super, soweit mal klar. Danke!
Nun will ich aber, dass das Jahr welches ich in die InputBox eingebe mir in der Tabelle Monatskosten als Kriterium dient.
Also dass nur die Daten angezeigt werden, von z.B. 2011
Dies hatte ich vorher mit dem Kriterium [Bitte Jahr eingeben] gemacht.
Wie kann ich das jetzt verbinden?
LG
Hallo,
welchen Felddatentyp hat das Feld 'Jahr' in der Tabelle 'Monatskosten' ?
oder wie ist dieses Feld deklariert?
Wenn 'Jahr' etwa ein Zahlenfeld ist, dass nur die Jahreszahl entält muss die Prozedur geringfügig abgeändert werden.
Private Sub Befehl0_Click()
Dim strSQL As String
Dim strTitel As String
Dim intJahr as Integer
intJahr = CInt(InputBox("Jahr"))
strTitel = "Gesamtsumme von Jahr " & intJahr & ": Kosten1+Kosten2"
strSQL = "SELECT Tab1.Feld1, Tab2.Feld2, TabX.FeldX, [TabY].[Kosten1] + [TabY].[Kosten2]" & " AS [" & strTitel & "] FROM Tab1
INNER JOIN (.... usw ... ) ... WHERE Monatskosten.Jahr=" & intJahr
CurrentDb.QueryDefs("DeineAbfrage").SQL = strSQL
DoCmd.OpenQuery "DeineAbfrage"
End Sub
Vielen Dank!
Funktioniert soweit schon mal super.
Jetzt noch eine Frage. - wenn ich nun 3 where Bedingen machen möchte wie schreib ich das hinein?
mein Lösungsansatz:
where [Wartungskostensumme_Jahresabfrage].[Abrechnungsjahr]=" & intJahr & " where [Transaktionskostensumme_Jahresabfrage].[Jahr]=" & intJahr &" where [....
Da fehlt aber irgendwo eine Verbindung.
Danke!
Hallo,
in dem Fall verwendest du nicht 3x WHERE sondern verbindest die Argumente mit den passenden bzw. benötigten Operatoren AND / OR
also in der Form:
WHERE [Wartungskostensumme_Jahresabfrage].[Abrechnungsjahr]=" & intJahr & " AND [Transaktionskostensumme_Jahresabfrage].[Jahr]=" & intJahr & " AND [....
Hi,
Meine DB ist eindeutig zu komplex - leider gehts nicht besser mit meinen Kenntnissen.
Lerne aber bereits sehr viel dazu - hierfür danke!
Ich glaube das ist jetzt aber wirklich meine letzte frage dazu:
Unter der Tabelle [Transaktionskostensumme_Jahresabfrage] hängt die Tabelle [Anzahl der Monate].
In dieser Abfrage gibt es das Feld: Jahr: Jahr([Datum]) und als Kriterium bräuchte ich wieder das Jahr, welches wir als intJahr definiert haben.
Ich habe bereits versucht bei where folgendes einzugeben:
..."& intJahr & " and [Anzahl der Monate].Year([Datum])=" & intJahr
oder
..."& intJahr & " and Year([Anzahl der Monate].[Datum])=" & intJahr
doch er erkennt dies nicht als Feld.
Ist die Formel falsch? Muss ich die Tabelle extra als FROM hinzufügen? wenn ja wie? (Felder daraus brauch ich für die Tabelle nicht)
DANKE!
LG
Hallo,
ist [Anzahl der Monate] nun eine Tabelle oder eine Abfrage... ???
Wenn du in deiner Abfrage ein berechnetes Feld abfragen möchtest ... Jahr: Year([Datum])
dann mußt du in der Abfrage (SQL-String) dieses Feld auch verwenden, im Abfrageentwurf
würdest du ja auch das Kriterium unter dieses Feld schreiben.
... & " and Jahr=" & intJahr
wobei ich dir aber auch gleich wärmstens empfehle deine Tabellen zu durchforsten und reservierte Worte als Feldbezeichnungen zu ändern!
Datum, Jahr ... denkbar schlechte Namenswahl!
HTH