![]() |
Datenbank: MySQL • Version: 4.1 • Zugriff über: ZeosDBO 6.5.1
Problem bei Abfrage
Hallo,
ich habe folgendes Problem: Ich habe eine Tabelle mit "Reparaturen". Folgende 3 Möglichkeiten können vorkommen: casRepFolgefehler: Y casRepTechniker: 37 casRepFolgefehler: Y casRepStatus62Techniker: 37 casRepFolgefehler: Y casRepKVATechniker: 37 Die Technikernummer kann dabei jeweils variieren. Also ich möchte mittels RecordCount die Anzahl jeder "Folgefehler-Reparatur" in einem Zeitraum eines jeweiligen Technikers auslesen. Vorgegeben dafür habe ich die Technikernummer. Ich habe es so probiert:
SQL-Code:
Das Problem ist, das es nicht funktioniert. Ich bekomme eine AV.
SELECT * FROM casiorepair WHERE casRepFertigstellung BETWEEN '2006-11-24' AND '2006-11-26' AND casRepFolgefehler = 'Y' AND casRepTechniker = '37' OR casRepStatus62Techniker = '37' OR casRepKVATechniker = '37';
Ich weiß nicht, wie ich es besser erklären soll. Wenn irgendwas fehlt, bzw. ihr nähere Informationen braucht, fragt einfach. Ich hoffe Ihr könnt mir helfen und ich bedanke mich hiermit im Voraus. |
Re: Problem bei Abfrage
Hallo,
ich werde Dir keine Lösung bieten (kein MySQL, kein ZEOS); aber ein paar Tipps sollten Dir helfen, selbst den Fehler zu finden oder das Problem genauer zu beschreiben: 1. Wenn Du RecordCount suchst, solltest Du auch einen Zähler suchen, z.B.:
SQL-Code:
2. Du sprichst von einer AV. Bei welchem Befehl wird diese ausgelöst? Kaum von einem Select, sondern von einer Zeos-Prozedur oder einem eigenen Befehl. Diese musst Du angeben, wenn Du Hilfe erwartest.
SELECT COUNT(DISTINCT casRepFolgefehler)...
3. Ergänzend werden natürlich Quelltext und die genaue Fehlermeldung benötigt. Wir haben keine Glaskugeln... 4. Für die eigene Fehlersuche gibt es try-except-Verfahren und den Debugger. Bitte benutzen! 5. An Deinem Select-Befehl vermisse ich als erstes Klammern (bei AND-OR-Kombinationen eigentlich unumgänglich). Ohne diese wird keiner wissen, was genau Du prüfen willst, und fast niemand wird sich die Mühe machen, diesen Befehl auf seine Richtigkeit zu kontrollieren. 6. Wenn Du RecordCount suchst, dürfte schließlich GROUP BY sinnvoll sein. Also bitte zuerst sinnvoll selber suchen und dann genauer fragen. Jürgen |
Re: Problem bei Abfrage
Hallo,
wie heisst die Fehlermeldung. Datumswerte direkt als String ist nicht gut. Schaue mal hier in der Suche, da war auch Parameter für MYSQL mal dran. Heiko |
Re: Problem bei Abfrage
hy :hi:
wenn ich Datumswerte in den SQL String übertrage, mach ich das immer so
Delphi-Quellcode:
lg Bundy
SQLString:='select * from Table where aDateField='+QuotedStr(FormatDateTime('YYYY-MM-DD',DateTimePicker1.date));
|
Re: Problem bei Abfrage
Also, wenn ich z.B. nur folgendes ausführe:
SQL-Code:
funktioniert alles wunderbar.
SELECT * FROM casiorepair WHERE casRepFertigstellung BETWEEN '2006-11-24' AND '2006-11-26' AND casRepFolgefehler = 'Y' AND casRepTechniker = '37';
Füge ich an o.g. Befehl aber noch zwei Bedingungen an, so wie hier:
SQL-Code:
kommt ein haushoher Wert raus, der irgendwie nicht stimmen kann.
SELECT * FROM casiorepair WHERE casRepFertigstellung BETWEEN '2006-11-24' AND '2006-11-26' AND casRepFolgefehler = 'Y' AND casRepTechniker = '37' OR casRepStatus62Techniker = '37' OR casRepKVATechniker = '37';
Ich hatte zum Test einen Eintrag mit
SQL-Code:
eingefügt, und so müsste er theoretisch auch nur diesen Eintrag im RecordCount haben, oder?
casRepFolgefehler = 'Y'
|
Re: Problem bei Abfrage
Du mußt deine Bedingung so kalmmern das auch immer das miteinander verglichen wird was du willst.
(was muß jeweils gleichzeitig gelten und was alternativ) |
Re: Problem bei Abfrage
Zitat:
|
Re: Problem bei Abfrage
Deine Abfrage
SQL-Code:
liefert alle Sätze, bei denen "casRepKVATechniker"=37 ist plus alle, bei denen "casRepStatus62Techniker"=37 ist plus alle, die im Datumsbereich liegen und "casRepTechniker"=37 und "casRepFolgefehler"=Y ist, weil AND vor OR geht, ähnlich wie Punktrechnung vor Strichrechnung geht.
SELECT * FROM casiorepair WHERE casRepFertigstellung BETWEEN '2006-11-24' AND '2006-11-26' AND casRepFolgefehler = 'Y' AND casRepTechniker = '37' OR casRepStatus62Techniker = '37' OR casRepKVATechniker = '37';
Was [edit]mkinzler[/edit] meint ist, dass Du das Statement folgendermaßen umbaust:
SQL-Code:
Hth,
SELECT * FROM casiorepair WHERE casRepFertigstellung BETWEEN '2006-11-24' AND '2006-11-26' AND casRepFolgefehler = 'Y' AND (casRepTechniker = '37' OR casRepStatus62Techniker = '37' OR casRepKVATechniker = '37');
M. |
Re: Problem bei Abfrage
Zitat:
![]() Zitat:
Dein Anfangsbeispiel liefert unterschiedliche Antworten bei unterschiedlicher Klammerung:
SQL-Code:
Und wir sollen raten, was Du willst. Jürgen
SELECT * FROM casiorepair WHERE casRepFertigstellung BETWEEN '2006-11-24' AND '2006-11-26' AND casRepFolgefehler = 'Y' AND (casRepTechniker = '37' OR casRepStatus62Techniker = '37' OR casRepKVATechniker = '37');
// oder SELECT * FROM casiorepair WHERE (casRepFertigstellung BETWEEN '2006-11-24' AND '2006-11-26' AND casRepFolgefehler = 'Y' AND casRepTechniker = '37') OR casRepStatus62Techniker = '37' OR casRepKVATechniker = '37'; |
Re: Problem bei Abfrage
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz