collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 67
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 0

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 14038
  • stats Beiträge insgesamt: 67221
  • stats Themen insgesamt: 9067
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: SQL Anfügeabfrage  (Gelesen 680 mal)

Offline Xoar

  • Access-Profi
  • **
  • Beiträge: 401
SQL Anfügeabfrage
« am: April 13, 2018, 19:01:09 »
Hallo SQL Experten,

habe mal wieder ein Problem wo ich nicht so wirklich weiter komme.

Ich habe eine TblKilometerstaende, an diese sollen alle DS aus tblFahrzeuge angefügt werden und zwar 12x, sprich für jeden Monat 1x.
Die TblKilometerstaende beinhaltet die relevanten Felder "FahrzeugID_F, Kilometerstand und DatumDerAblesung "
Das ganze möchte ich in einer Schleife laufen lassen.

Hier mal mein bisheriger Versuch:
Public Sub KilometerAllenFahrzeugenAlleMonateHinzufuegen()

Dim Datumswert As String
Dim i As Integer

    Datumswert = "20.01." & Year(Now)
   
    For i = 1 To 12
        CurrentDb.Execute ("INSERT INTO tblKilometerstaende ( FahrzeugID_F, DatumDerAblesung ) " & _
                          " SELECT tblFahrzeuge.FahrzeugeID, Date(" & Datumswert & ") " & _
                          " FROM tblFahrzeuge; ")
               
    Datumswert = DateAdd("m", 1, Datumswert)

    Next
End Sub

Leider klappt das nicht, Laufzeitfehler 3075, Syntaxfehler in Zahl in Abfrageausdruck Date(20.01.2018)

Scheint mir auch zum Teil sinnig, weil ich ja ein Datumswert habe den ich aus tblFahrzeuge auslesen kann. Irgendwie müsste man mit VALUES das hinzufügen, glaube ich.

Könnt ihr mir da auf die Sprünge helfen?

PS: Hatte auch den Datumswert mit ner Funktion in SQL Schreibweise umgeändert, brachte aber auch keinen Erfolg.
Die tblKilometerstaende hat auch einen gemeinsamen eindeutigen Index auf die beiden Felder FahrzeugID_F und DatumDerAblesung

Beste Grüße
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7375
Re: SQL Anfügeabfrage
« Antwort #1 am: April 13, 2018, 19:25:35 »
Hallo,
Datumswert ist doch ein Datum, oder nicht ? Warum deklarierst Du da als String ? Außerdem bietet sich die Funktion DateSerial an. Und dann wird es auch noch kürzer und einfacher:
Public Sub KilometerAllenFahrzeugenAlleMonateHinzufuegen()
Dim i As Integer
    For i = 1 To 12
        CurrentDb.Execute "INSERT INTO tblKilometerstaende ( FahrzeugID_F, DatumDerAblesung )" & _
                " SELECT FahrzeugeID, DateSerial(Year(Date())," & i & ",20) FROM tblFahrzeuge", DbFailOnError
    Next i
End Sub

« Letzte Änderung: April 13, 2018, 19:48:02 von MzKlMu »
Gruß
Klaus
 
Folgende Mitglieder bedankten sich: Xoar

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1294
Re: SQL Anfügeabfrage
« Antwort #2 am: April 13, 2018, 20:24:50 »
Was haben denn Dummy-Datensätze mit Datum ohne Kilometerstand für einen Wert? Mit einer einer Pivot- oder Kalendertabelle kann man sich auch auf Wunsch editierbare virtuelle Datensätze mit leeren Kilometerständen anzeigen lassen, ohne irgendwelchen Datenmüll zu hinterlegen. :(
Grüße von der (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: Xoar

Offline Xoar

  • Access-Profi
  • **
  • Beiträge: 401
Re: SQL Anfügeabfrage
« Antwort #3 am: April 14, 2018, 08:15:11 »
@Klaus
Danke werde ich heute abend testen. Datumswert als String zu deklarieren war natürlich falsch.

@Lachtaube
In meinem Kopf sah das so aus, dass ich dann die Fahrzeugliste mit den monatlichen (wird nur als ganzer Monat angezeigt) leeren Kilometerständen angezeigt bekomme und dann diese bei Bedarf füllen kann. Ausgefüllt werden diese leeren DS auf das Jahr gesehen sowieso. Sprich am Ende des Jahres herrscht kein Datenmüll mehr.

Den anderen Weg über eine Kalendertabelle hatte ich nicht auf den Schirm, wäre aber mit mehr Aufwand verbunden. Müsste dann ja jedesmal eine Anfügeabfrage ausführen sobald ich ein Kilometerwert eintrage, oder hast du dir das anders gedacht?

Grüße
 

Offline PhilS

  • Administrator
  • Access-Profi
  • *****
  • Beiträge: 357
    • Tipps zu Access, VBA, SQL und Co.
Re: SQL Anfügeabfrage
« Antwort #4 am: April 14, 2018, 11:17:37 »
In meinem Kopf sah das so aus, dass ich dann die Fahrzeugliste mit den monatlichen (wird nur als ganzer Monat angezeigt) leeren Kilometerständen angezeigt bekomme und dann diese bei Bedarf füllen kann. Ausgefüllt werden diese leeren DS auf das Jahr gesehen sowieso. Sprich am Ende des Jahres herrscht kein Datenmüll mehr.
Das mag zwar stimmen, aber besonders ansprechend finde ich die Idee auch nicht, einen Haufen Datensätze zu erzeugen, die erst in 12 Monaten vollständig Sinn ergeben. - Und dann erzeugst du ja bald wieder die Daten für das nächste Jahr...
Was ist denn, wenn der Kilometerstand eines Fahrzeugs nicht am 20. des Monats eingetragen wird? DatumDerAblesung ist erstmal falsch.
Ich würde auch dringend empfehlen, nur die tatsächlichen Fakten zu speichern, wenn diese feststehen.

[...]Müsste dann ja jedesmal eine Anfügeabfrage ausführen sobald ich ein Kilometerwert eintrage, oder hast du dir das anders gedacht?
Das hörst sich hier so an, als wäre das ein außergewöhnlicher Aufwand. - Jedes mal, wenn du einen Datensatz in Access eingibst, wird doch intern und automatisch eine Anfügeabfrage ausgeführt. Um mehr als die Eingabe eines neuen Datensatzes geht es doch auch hier nicht.
Neues Access 2019 Feature angekündigt: Modern Charts
 

Offline Xoar

  • Access-Profi
  • **
  • Beiträge: 401
Re: SQL Anfügeabfrage
« Antwort #5 am: April 14, 2018, 12:07:52 »
@PhilS

Ja das stimmt schon, ich geb dir insofern recht das die Kilometer nicht immer am 20. eingetragen werden, aber gefordert war nur ne Eingabe für einen Monat, da ist es tatsächlich egal ob der am 01. oder 20. eingetragen wird. Klingt komisch, ist aber so ;)

Möchte aber trotzdem eure vorgeschlagene Methode ausprobieren und wenn sie so klappt wie ich mir das vorstelle auch diese nutzen.

Wie genau müsste ich das angehen?
Kalendertabellen habe ich schonmal in ner anderen Tabelle benutzt.

Also eine tblKalender mit das Datum direkt als PK

Und dann erzeuge ich ne Abfrage, welche die tblKalender und tblFahrzeuge beinhaltet.
Dann nen leftjoin auf FahrzeugeID aus tblFahrzeuge und dann einfach das Datumsfeld aus der TblKalender?

Grüße
 

Offline ebs17

  • Access-Meister
  • ***
  • Beiträge: 912
Re: SQL Anfügeabfrage
« Antwort #6 am: April 14, 2018, 12:22:54 »
Willst Du Kilometerstände per Anfügeabfrage eintragen (woher nimmst Du die?), oder kennst und nutzt Du auch Formulare?

Bei einer Formulareingabe könnte man für das Datum ein Kombinationsfeld anbieten, das als Datensatzherkunft ein oder mehrere  benötigte Datumswerte  bereitstellt, also im Beispiel einige Montszwanzigste, die größer als der letztverwendete Wert für das Datum sind. Da könnten aber entsprechend Hinweis auch realistische Werte stehen.

Von solchen Formularsteuerelementen könnte man eine Anfügeabfrage oder ein Recordset-AddNew ableiten, oder man verwendet schlicht ein gebundenes Formular.
Mit freundlichem Glück Auf!

Eberhard
 

Offline Xoar

  • Access-Profi
  • **
  • Beiträge: 401
Re: SQL Anfügeabfrage
« Antwort #7 am: April 14, 2018, 12:51:10 »
Ja das gebundene Formular habe ich natürlich in meiner Variante, wo ich viele leere DS erzeuge, damit stellt die, nach Monaten filterbare, Eingabe kein Problem da.

Die Anfügeabfrage wäre hier nur im Fall eines neuen Fahrzeuges auszuführen.

Dies ist aber wohl noch nicht die Beste Varainte, deshalb möchte ich die andere Variante testen.
 

Offline ebs17

  • Access-Meister
  • ***
  • Beiträge: 912
Re: SQL Anfügeabfrage
« Antwort #8 am: April 14, 2018, 13:06:10 »
Zitat
Die Anfügeabfrage wäre hier nur im Fall eines neuen Fahrzeuges auszuführen.
Ein neues Fahrzeug könnte man in einem gebundenen (Haupt)Formular erzeugen, die Kilometerstände verwaltet man dann in einem Unterformular.

Es ist sicher wichtig, notwendiges Handwerkszeug wie Aktionsabfragen zu beherrschen. Lösungen sollten aber einfach sein. Das Richtig- und Komplexprogrammieren kann man sich für richtige Aufgabenstellungen aufsparen.
Mit freundlichem Glück Auf!

Eberhard
 

Offline Xoar

  • Access-Profi
  • **
  • Beiträge: 401
Re: SQL Anfügeabfrage
« Antwort #9 am: April 14, 2018, 17:18:40 »
@Eberhard

Genau so läuft es ja auch bei mir, nur ist nicht gewünscht das man jedes Fahrzeug im Hauptformular durchklicken muss um den Kilometerstand dann einzufügen.

Hatte auch schon überlegt im Ereignis nach Aktualisierung einfach zum nächsten DS zu springen, aber auch das war nicht gewünscht.

Deshalb diese Variante wo einfach alle Fahrzeuge direkt unter einander aufgelistet sind und der passende Kilometerwert rechts daneben eingegeben werden kann.

Diese Liste wird blanko ausgedruckt, handschriftlich alle Werte eingetragen und soll dann ins System übernommen werden.

Diese ganze Problematik ist rein kosmetisch und um den User seine Bequemlichkeit gerecht zu werden.

Hab ja jetzt einige Tipps bekommen, diese werde ich mal ausprobieren.

Danke schonmal
 

Offline ebs17

  • Access-Meister
  • ***
  • Beiträge: 912
Re: SQL Anfügeabfrage
« Antwort #10 am: April 14, 2018, 18:41:47 »
Zitat
nur ist nicht gewünscht das man jedes Fahrzeug im Hauptformular durchklicken muss um den Kilometerstand dann einzufügen
Nun, der Entwickler könnte dafür sorgen, dass über eine Fahrzeugauswahlleiste das Hauptformular gezielt gefiltert wird bzw. der Datensatzzeiger auf das gewünschte Fahrzeug gelegt wird.

Zitat
Diese Liste wird blanko ausgedruckt
Dateneingabe, Berechnungen und Ausdrucke dürfen sehr verschiedene Dinge sein. Man muss sich nicht an einem Excelblatt festbeißen, wo man dies alles mit einem Arbeitsblatt abwickeln kann ... oder umgedreht: Man ist konsequent und wechselt auf Excel.
Mit freundlichem Glück Auf!

Eberhard