AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem bei Abfrage

Ein Thema von CG2003 · begonnen am 25. Nov 2006 · letzter Beitrag vom 27. Nov 2006
Antwort Antwort
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#1

Problem bei Abfrage

  Alt 25. Nov 2006, 19:46
Datenbank: MySQL • Version: 4.1 • Zugriff über: ZeosDBO 6.5.1
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:

SELECT * FROM casiorepair WHERE casRepFertigstellung BETWEEN '2006-11-24AND '2006-11-26AND casRepFolgefehler = 'YAND casRepTechniker = '37OR casRepStatus62Techniker = '37OR casRepKVATechniker = '37'; Das Problem ist, das es nicht funktioniert. Ich bekomme eine AV.

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.
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#2

Re: Problem bei Abfrage

  Alt 26. Nov 2006, 10:34
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.:
SELECT COUNT(DISTINCT casRepFolgefehler)... 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.

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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Problem bei Abfrage

  Alt 26. Nov 2006, 10:51
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von bundy
bundy

Registriert seit: 24. Mai 2003
Ort: Eisenstadt
438 Beiträge
 
Delphi 2007 Architect
 
#4

Re: Problem bei Abfrage

  Alt 26. Nov 2006, 12:11
hy

wenn ich Datumswerte in den SQL String übertrage, mach ich das immer so

SQLString:='select * from Table where aDateField='+QuotedStr(FormatDateTime('YYYY-MM-DD',DateTimePicker1.date)); lg Bundy
+++Glaube keiner Statistik, die du nicht selbst getürkthast.++++
********************
Ein anonymer Statistiker. *
********************
  Mit Zitat antworten Zitat
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Problem bei Abfrage

  Alt 26. Nov 2006, 13:11
Also, wenn ich z.B. nur folgendes ausführe:

SELECT * FROM casiorepair WHERE casRepFertigstellung BETWEEN '2006-11-24AND '2006-11-26AND casRepFolgefehler = 'YAND casRepTechniker = '37'; funktioniert alles wunderbar.


Füge ich an o.g. Befehl aber noch zwei Bedingungen an, so wie hier:

SELECT * FROM casiorepair WHERE casRepFertigstellung BETWEEN '2006-11-24AND '2006-11-26AND casRepFolgefehler = 'YAND casRepTechniker = '37OR casRepStatus62Techniker = '37OR casRepKVATechniker = '37'; kommt ein haushoher Wert raus, der irgendwie nicht stimmen kann.
Ich hatte zum Test einen Eintrag mit

casRepFolgefehler = 'Y' eingefügt, und so müsste er theoretisch auch nur diesen Eintrag im RecordCount haben, oder?
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Problem bei Abfrage

  Alt 26. Nov 2006, 18:26
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)
Markus Kinzler
  Mit Zitat antworten Zitat
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Problem bei Abfrage

  Alt 27. Nov 2006, 07:33
Zitat von mkinzler:
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)
Sorry, aber das verstehe ich nicht ganz. Kannst Du mir ein Beispiel nennen?
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
Mumpe

Registriert seit: 22. Nov 2006
12 Beiträge
 
Delphi 5 Enterprise
 
#8

Re: Problem bei Abfrage

  Alt 27. Nov 2006, 08:41
Deine Abfrage
SELECT * FROM casiorepair WHERE casRepFertigstellung BETWEEN '2006-11-24AND '2006-11-26AND casRepFolgefehler = 'YAND casRepTechniker = '37OR casRepStatus62Techniker = '37OR casRepKVATechniker = '37'; 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.

Was [edit]mkinzler[/edit] meint ist, dass Du das Statement folgendermaßen umbaust:
SELECT * FROM casiorepair WHERE casRepFertigstellung BETWEEN '2006-11-24AND '2006-11-26AND casRepFolgefehler = 'YAND (casRepTechniker = '37OR casRepStatus62Techniker = '37OR casRepKVATechniker = '37'); Hth,
M.
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#9

Re: Problem bei Abfrage

  Alt 27. Nov 2006, 08:46
Zitat von CG2003:
Zitat von mkinzler:
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)
Sorry, aber das verstehe ich nicht ganz. Kannst Du mir ein Beispiel nennen?
Schon in meiner ersten Antwort habe ich auf Klammern hingewiesen. Ich dachte bisher, dass das zum Basiswissen bei logischen Variablen/Abfragen/Verknüpfungen gehört. Suche in der Delphi-Referenz durchsuchenDelphi-Hilfe nach "Klammern" und lies das Thema "Ausdrücke" durch; dort steht u.a.:
Zitat:
Mit Hilfe von runden Klammern lassen sich die Rangfolgeregeln außer Kraft setzen. Ein Ausdruck in runden Klammern wird immer zuerst ausgewertet und danach wie ein einzelner Operand behandelt.
Nach meiner Kenntnis wird das auch im Mathematik-Unterricht etwa ab 6. Klasse so gemacht.

Dein Anfangsbeispiel liefert unterschiedliche Antworten bei unterschiedlicher Klammerung:
SQL-Code:
SELECT * FROM casiorepair WHERE casRepFertigstellung BETWEEN '2006-11-24AND '2006-11-26AND casRepFolgefehler = 'YAND (casRepTechniker = '37OR casRepStatus62Techniker = '37OR casRepKVATechniker = '37');
// oder
SELECT * FROM casiorepair WHERE (casRepFertigstellung BETWEEN '2006-11-24AND '2006-11-26AND casRepFolgefehler = 'YAND casRepTechniker = '37') OR casRepStatus62Techniker = '37OR casRepKVATechniker = '37';
Und wir sollen raten, was Du willst. Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Problem bei Abfrage

  Alt 27. Nov 2006, 19:24
Zitat von Mumpe:
Deine Abfrage
SELECT * FROM casiorepair WHERE casRepFertigstellung BETWEEN '2006-11-24AND '2006-11-26AND casRepFolgefehler = 'YAND casRepTechniker = '37OR casRepStatus62Techniker = '37OR casRepKVATechniker = '37'; 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.

Was [edit]mkinzler[/edit] meint ist, dass Du das Statement folgendermaßen umbaust:
SELECT * FROM casiorepair WHERE casRepFertigstellung BETWEEN '2006-11-24AND '2006-11-26AND casRepFolgefehler = 'YAND (casRepTechniker = '37OR casRepStatus62Techniker = '37OR casRepKVATechniker = '37'); Hth,
M.
Dankeschön, das funktioniert genau so, wie ich es will. Vielen Dank!
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz