collapse

* Benutzer Info

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

* Wer ist Online

  • Punkt Gäste: 83
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 3
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13972
  • stats Beiträge insgesamt: 66528
  • stats Themen insgesamt: 8970
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Fehler in Abfrage vermeiden  (Gelesen 289 mal)

Offline John1994

  • Newbie
  • Beiträge: 20
Fehler in Abfrage vermeiden
« am: Juni 19, 2018, 00:07:36 »
Hallo zusammen,

ich habe folgendes Problem.

In meiner Abfrage, werden Arbeitszeiten ausgerechnet.
Leider gibt es Datensätze, die keine Uhrzeiten enthalten und somit in der Abfrage Arbeitszeiten den Inhalt #Fehler enthalten.
Somit können diese Datensätze nicht in meinem Bericht angezeigt werden.

Folgende Daten sind Ausgangssituation:

- Bild Daten Ausgang

Durch folgende Abfrage werden die Daten aufgearbeitet:

SELECT Daten.ID, Daten.Taxi_Nr, Daten.Datum, Daten.Start_Uhrzeit, Daten.Fahrer, Daten.Auftragsnummer,
Daten.Kunde, Daten.Termin, Daten.Start_Adresse, Daten.Ziel,
Daten.Preis, Daten.Bar, Daten.Unbar, Daten.Bemerkung, Daten.Endzeit,

DateAdd("n",-([Start_Uhrzeit]>=#12/30/1899 23:0:0# Or [Start_Uhrzeit]<=#12/30/1899 5:0:0# Or [Endzeit]>=#12/30/1899 23:0:0# Or [Endzeit]<=#12/30/1899 5:0:0#)*5, CDate(Format$([Start_Uhrzeit]-1-[Endzeit],"Long Time"))) AS Arbeitszeit_Nacht,

DateAdd("n",3,[Arbeitszeit_Nacht]) AS Arbeitszeit_Final, Datum+Start_Uhrzeit AS Start,
Datum+Endzeit+Abs(Start_Uhrzeit>Endzeit) AS Ende

FROM Daten

WHERE (((Daten.Datum) Between [Bitte geben Sie das Start Datum ein:] And [Bitte geben Sie das Enddatum ein:]) AND ((Daten.Fahrer)=[Bitte geben Sie den Namen des Fahrers ein:]));


Leider bekomme ich dann als Ergebnis, beiden den Feldern ohne Werte #Fehler.

- Abfrage Ergebnisse

Wie kann ich dies in meiner Abfrage umgehen und die Felder leer lassen?
Vielen Dank für eure Hilfe und einen schönen Start in die Woche.


VG John
 

Online DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23340
Re: Fehler in Abfrage vermeiden
« Antwort #1 am: Juni 19, 2018, 08:12:09 »
Hallo,



 warum gibt es überhaupt Felder ohne Werte? Das sollte im Vorfeld schon vermieden werden, wenn Auswertungen davon gemacht werden.

Welche Uhrzeit soll denn benutzt werden im Fall eines leeren Feldes?

Benutze die nz()-Funktion , um einen Ersatzwert bei leeren Felder zu verwenden.

Offline John1994

  • Newbie
  • Beiträge: 20
Re: Fehler in Abfrage vermeiden
« Antwort #2 am: Juni 19, 2018, 19:01:05 »
Hallo und vielen Dank für deine Antwort.
Die NZ Funktion hab ich auch schon gefunden, muss aber ehrlicherweise eingestehen, dass ich nicht in der Lage bin, diese anzuwenden.

Wenn ich das richtig verstanden habe, müsste in der Abfrage folgendes geschehen:

Aus
DateAdd("n",-([Start_Uhrzeit]>=#12/30/1899 23:0:0# Or [Start_Uhrzeit]<=#12/30/1899 5:0:0# Or [Endzeit]>=#12/30/1899 23:0:0# Or [Endzeit]<=#12/30/1899 5:0:0#)*5, CDate(Format$([Start_Uhrzeit]-1-[Endzeit],"Long Time"))) AS Arbeitszeit_Nacht
wird
[code]NZ(DateAdd("n",-([Start_Uhrzeit]>=#12/30/1899 23:0:0# Or [Start_Uhrzeit]<=#12/30/1899 5:0:0# Or [Endzeit]>=#12/30/1899 23:0:0# Or [Endzeit]<=#12/30/1899 5:0:0#)*5, CDate(Format$([Start_Uhrzeit]-1-[Endzeit],"Long Time"))) AS Arbeitszeit_Nacht)[/code]

ist das so richtig?
Mein Problem ist, dass ich nicht so richtig weiß, an welcher Stelle ich diese Funktion einbinden soll.
Habe auch schon alles probiert, vom einfügen in den SQL-Code bis zum Einbinden über die Entwurfsansicht.
 

Offline John1994

  • Newbie
  • Beiträge: 20
Re: Fehler in Abfrage vermeiden
« Antwort #3 am: Juni 19, 2018, 19:04:28 »
So sah der Versuch im Entwurfseditor aus:

Arbeitszeit_Nacht: Nz(DatAdd("n";-([Start_Uhrzeit]>=#23:00:00# Oder [Start_Uhrzeit]<=#05:00:00# Oder [Endzeit]>=#23:00:00# Oder [Endzeit]<=#05:00:00#)*5;ZDate(Format$([Start_Uhrzeit]-1-[Endzeit];"Zeit, lang"))))
Leider ändert sich an der Ausgabe der Abfrage nix.
Der #Fehler wird immer noch angezeigt.
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7283
Re: Fehler in Abfrage vermeiden
« Antwort #4 am: Juni 19, 2018, 19:21:25 »
Hallo,
man kann mit Zeiten nur rechnen, wenn auch eine Zeit da ist. Du brauchst also für NZ einen Ersatzwert. Aber der würde ja das Ergebnis verfälschen.
Du musst also mit Wenn() einfach prüfen ob eines der Zeitfelder leer ist und dann nicht rechnen.
Zeiten kann man auch einfach addieren bzw. Suptrahieren. Da braucht es weder ein Hilfsdatum (12/30/1899) noch eine Formatanweisung (Format$...).
Format hat in Rechenformeln ohnehin nichts verloren. Und in Abfragen wird auch nicht formatiert. Formatiert wird zur Ansicht in Formularen und Berichten.
Wo sind die Grenzen sind zwischen Tag und Nachtarbeit. Und was ist Arbeitszeit_Final mit den 3 Minuten Unterschied ? Erkläre daher mal was Du mit welchen Feldern rechnen willst. Die Formel lässt sich ganz sicher beträchtlich vereinfachen und verkleinern.
Gruß
Klaus
 

Offline John1994

  • Newbie
  • Beiträge: 20
Re: Fehler in Abfrage vermeiden
« Antwort #5 am: Juni 19, 2018, 19:28:32 »
Ich habe eine Tabelle, welche eine Startzeit und eine Endzeit enthält.
Ich subtrahiere die Startzeit von der Endzeit und erhalte so meine Arbeitszeit in Minuten.
Dies soll auch funktionieren, wenn der Tag überspringt.
Des Weiteren muss ich, wenn die Person in 23 Uhr "rein arbeitet" und bis 5 Uhr muss ich 5 Minuten zusätzlich addieren, da hier dann Nachttarif gilt. 
 

Offline John1994

  • Newbie
  • Beiträge: 20
Re: Fehler in Abfrage vermeiden
« Antwort #6 am: Juni 19, 2018, 19:30:51 »
Die Frage ist, an welcher Stelle ich das Wenn zu setzen habe?
Mein Bericht öffnet ja nicht, weil er ein Problem mit dem #Fehler hat.
Kann ich hier bei der Beimladen()-Funktion des Berichtes schon einhaken?
Und dann die Werte nicht anzeigen lassen?

Mein Bericht enthält jedoch diese Abfrage, ich denke da verschluckt er sich vorher, oder?
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7283
Re: Fehler in Abfrage vermeiden
« Antwort #7 am: Juni 19, 2018, 19:53:45 »
Hallo,
Zitat
Des Weiteren muss ich, wenn die Person in 23 Uhr "rein arbeitet" und bis 5 Uhr muss ich 5 Minuten zusätzlich addieren, da hier dann Nachttarif gilt. 
Das habe ich nicht verstanden, was heißt reinarbeitet ?
Und Du hast ja nur 3 Minuten addiert.
Die Abfrage sollte schon den Fehler nicht zeigen.
Die Frage von Franz warum es da überhaupt Datensätze gibt die keine Zeit enthalten hast Du auch nicht beantwortet.
Deine Formeln sind viel zu kompliziert, das geht deutlich einfacher.
Wenn Du Datum und Zeit addierst und dann Start von Ende anziehst hast Du die Arbeitszeit direkt im richtigen Format, auch mitternachtsübergreifend.
Und die 3 Minuten kannst Du einfach mit +3/1440 addieren.

Aber beantworte erst mal alle Fragen.
Gruß
Klaus
 

Offline John1994

  • Newbie
  • Beiträge: 20
Re: Fehler in Abfrage vermeiden
« Antwort #8 am: Juni 19, 2018, 20:16:13 »
Hallo,

danke für deine Antwort: 

Der Import enthält Datensätze mit Zeiten, dass sind die Start und Endzeiten einer Taxifahrt. Diese werden auch mit den entsprechenden Daten geliefert.
Wenn der Taxifahrer jedoch eine Pause macht, liefert der Import nur einen String mit Pause zurück, jedoch in eine neue Zeile. Dazu gibt es jedoch keine Zeiten (weder Start noch Ende).
Er fängt dann einfach wieder mit der nächsten Taxifahrt an.
Ich habe mal ein Bild vom Import angehangen.


Mit den 5 Minuten konntet ihr auch nicht sehe, da ich Holzkopf nicht die gesamte Abfrage aufgeschrieben habe:
Hier ist Sie nun:
SELECT Daten.ID, Daten.Taxi_Nr, Daten.Datum, Daten.Start_Uhrzeit, Daten.Fahrer, Daten.Auftragsnummer, Daten.Kunde, Daten.Termin, Daten.Start_Adresse, Daten.Ziel, Daten.Preis, Daten.Bar, Daten.Unbar, Daten.Bemerkung, Daten.Endzeit, DateAdd("n",-([Start_Uhrzeit]>=#12/30/1899 23:0:0# Or [Start_Uhrzeit]<=#12/30/1899 5:0:0# Or [Endzeit]>=#12/30/1899 23:0:0# Or [Endzeit]<=#12/30/1899 5:0:0#)*5,CDate(Format$([Start_Uhrzeit]-1-[Endzeit],"Long Time"))) AS Arbeitszeit_Nacht, DateAdd("n",3,[Arbeitszeit_Nacht]) AS Arbeitszeit_Final, Datum+Start_Uhrzeit AS Start, Datum+Endzeit+Abs(Start_Uhrzeit>Endzeit) AS Ende
FROM Daten
WHERE (((Daten.Datum) Between [Bitte geben Sie das Start Datum ein:] And [Bitte geben Sie das Enddatum ein:]) AND ((Daten.Fahrer)=[Bitte geben Sie den Namen des Fahrers ein:]));

Hier sind dann auch die 5 Minuten ersichtlich.
Funktioniert ja auch alles, bis auf die leeren Zeilen, was ja klar ist, welche ich aber benötige.
Und damit ich meinen Bericht weiterhin öffnen kann, muss ich diese #Fehler Anzeige irgendwie unterbinden.
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7283
Re: Fehler in Abfrage vermeiden
« Antwort #9 am: Juni 19, 2018, 20:22:45 »
Hallo,
Zitat
Das habe ich nicht verstanden, was heißt reinarbeitet ?
Bitte noch beantworten.
Gruß
Klaus
 

Offline John1994

  • Newbie
  • Beiträge: 20
Re: Fehler in Abfrage vermeiden
« Antwort #10 am: Juni 19, 2018, 20:50:21 »
Wenn der Taxifahrer eine Fahrt anfängt und während der Fahrt in den 23 Uhr Abschnitt kommt, soll auch hier die Nachtschicht angewendet werden.
 

Offline John1994

  • Newbie
  • Beiträge: 20
Re: Fehler in Abfrage vermeiden
« Antwort #11 am: Juni 19, 2018, 21:01:46 »
=Summe([Abfrage_Schichtzettel]![Arbeitszeit_Final])

Diese Abfrage ist die störende im Bericht,ist hier nicht eine WENN Formel sinnvoll?
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1788
Re: Fehler in Abfrage vermeiden
« Antwort #12 am: Juni 19, 2018, 21:51:26 »
Hallo John,
Zitat
Ich habe mal ein Bild vom Import angehangen.
Fehlt leider  :(
...WHERE (((Daten.Datum) Between [Bitte geben Sie das Start Datum ein:] And [Bitte geben Sie das Enddatum ein:]) AND ((Daten.Fahrer)=[Bitte geben Sie den Namen des Fahrers ein:]));Ich denke du hast einen Import, wozu dann die Parameterabfragen?
Am besten macht man das auch über ein HauptFormular "Fahrer" mit
einem Unterformular "Fahrten". Da kannst du auch autom. die Pausezeile
mit Zeiten versorgen:
Anfang Pause = Ende letzte Fahrt, Ende Pause = Beginn neue Fahrt.
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7283
Re: Fehler in Abfrage vermeiden
« Antwort #13 am: Juni 19, 2018, 21:54:02 »
Hallo,
wo genau sind jetzt die 5 Minuten und wozu hast Du auch 3 Minuten ?

Ich blicke die Berechnungen immer noch nicht.
Gruß
Klaus
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1246
Re: Fehler in Abfrage vermeiden
« Antwort #14 am: Juni 25, 2018, 07:18:59 »
Ungetestet:SELECT ID,
       Taxi_Nr,
       Datum,
       Start_Uhrzeit,
       Fahrer,
       Auftragsnummer,
       Kunde,
       Termin,
       Start_Adresse,
       Ziel,
       Preis,
       Bar,
       Unbar,
       Bemerkung,
       Endzeit,
       IIf( [Start_Uhrzeit] IS NULL OR [Endzeit] IS NULL, NULL,
            DateAdd( 'n', -( [Start_Uhrzeit] >= #12/30/1899 23:00:00# OR
                             [Start_Uhrzeit] <= #12/30/1899 05:00:00# OR
                             [Endzeit]       >= #12/30/1899 23:00:00# OR
                             [Endzeit]       <= #12/30/1899 05:00:00# ) * 5,
                     CVDate( Format( [Start_Uhrzeit] - 1 - [Endzeit],
                                     'Long Time' ) ) ) ) AS Arbeitszeit_Nacht,
       IIf( [Start_Uhrzeit] IS NULL OR [Endzeit] IS NULL, NULL,
            DateAdd( 'n', 3, [Arbeitszeit_Nacht] ) ) AS Arbeitszeit_Final,
       Datum + Start_Uhrzeit AS Start,
       Datum + Endzeit + Abs( Start_Uhrzeit > Endzeit ) AS Ende
FROM   Daten
WHERE  [Datum] Between [Bitte geben Sie das Start Datum ein:] AND
                       [Bitte geben Sie das Enddatum ein:] AND
       [Fahrer] = [Bitte geben Sie den Namen des Fahrers ein:];
Grüße von der (⌒▽⌒)