AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken FreePascal TSQLQuery.Filter auf DateTime-Feld funktioniert nicht (mysql)
Thema durchsuchen
Ansicht
Themen-Optionen

TSQLQuery.Filter auf DateTime-Feld funktioniert nicht (mysql)

Offene Frage von "PASST"
Ein Thema von PASST · begonnen am 17. Apr 2015 · letzter Beitrag vom 17. Apr 2015
Antwort Antwort
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#1

TSQLQuery.Filter auf DateTime-Feld funktioniert nicht (mysql)

  Alt 17. Apr 2015, 13:10
Datenbank: MySQL • Version: 5.1 • Zugriff über: TMySQL51Connection
Hallo allerseits,
ich nutze Lazarus 1.2.6 unter Win7 x64 mit einer MySQL-Datenbank.

Ich möchte die Filter-Eigenschaft eines TSQLQuery nutzen. Dies funktioniert aber nicht bei einem Feld vom Datentyp DateTime. Der Filter funktioniert bei einem Feld vom Typ VarChar erfolgreich.

Ich habe bereits folgendes versucht:
Filter := 'date(Feldname)=curdate()';
Als Fehler erhalte ich zur Laufzeit: 'index based on unknown filed "date"'

Filter := 'Feldname>=' + QuotedStr('2015-04-17 00:00:00');
Fehlermeldung: 'index based on unknown filed ">="'

Verwende ich dagegen die obere Variante 'date(Feldname)=curdate()' als Bedingung im SQL.Text, so funktioniert alles wie gewünscht. Ich möchte allerdings die Filter-Eigenschaft verwenden, um nicht zur Laufzeit mit dem SQL.Text spielen zu müssen.

Hat jemand eine Idee?

Gruß,
Peter
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TSQLQuery.Filter auf DateTime-Feld funktioniert nicht (mysql)

  Alt 17. Apr 2015, 13:24
Wie so oft gesagt: Verwende parametrisierte Abfragen und hört das zusammengestöpsel der SQL-Statments auf.
Bei parametrisierten Abfragen verschwinden viele Problem die man sonst mit einem zusammengestöpselten Where-Konstrukt hat.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#3

AW: TSQLQuery.Filter auf DateTime-Feld funktioniert nicht (mysql)

  Alt 17. Apr 2015, 13:33
Erstmal ist das garnicht vergleichbar, denn du hast nicht nur den zweiten Parameter geändert (so wie du es behauptest), sondern auch den ersten Parameter (ohne Cast) und auch noch den Operator.

SQL-Code:
Filter := 'date(Feldname) = curdate()';
Filter := 'date(Feldname) = date(' + QuotedStr('2015-04-17') + ')';

Parameter im Filter ist ja leider so nicht möglich , wäre aber ein nettes Feature.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TSQLQuery.Filter auf DateTime-Feld funktioniert nicht (mysql)

  Alt 17. Apr 2015, 13:35
Parameter im Filter ist ja leider so nicht möglich
Argh. Ist da diese komische Client-Filterung. Das würde ich eh wegschmeißen und richtig (per Parameter) SQL-Statements zum Server schicken um nur die relevanten Daten zu bekommen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#5

AW: TSQLQuery.Filter auf DateTime-Feld funktioniert nicht (mysql)

  Alt 17. Apr 2015, 15:21
Die xxDACs (z.B. PgDAC) haben teilweise mehrere Filter.
Der clientseitige (vom TDataSet) und einen Weiteren, der genauso aussieht/behandlet wird, welcher sich aber hintenrum (intern) ins WHERE reinschreibt.

Local filtern geht aber schneller, wenn man sowieso zuerst alles anzeigt und erst dann später mal filtert. (keine weiteren DB-Abfragen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (17. Apr 2015 um 15:23 Uhr)
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#6

AW: TSQLQuery.Filter auf DateTime-Feld funktioniert nicht (mysql)

  Alt 17. Apr 2015, 15:40
Argh. Ist da diese komische Client-Filterung. Das würde ich eh wegschmeißen und richtig (per Parameter) SQL-Statements zum Server schicken um nur die relevanten Daten zu bekommen.
Manchmal möchte man auch kurzzeitig nur 100.000 von 2.000.000 Zeilen in der Anzeige haben und das ohne jedesmal die Server unnötig zu quälen.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: TSQLQuery.Filter auf DateTime-Feld funktioniert nicht (mysql)

  Alt 17. Apr 2015, 16:15
Ok, ich versuche es jetzt mal mit der parametrisierten Abfrage, habe aber schon meine erste Frage.
Code:
// Folgende Query mit Parametern:
SELECT Zeitstempel, Name
FROM Tabelle
WHERE Name LIKE :parName
AND DATE(Zeitstempel)=:parHeute
Eigentlich möchte ich beide Bedingungen flexibel gestalten, dh. auch alle Werte anzeigen lassen können. Bei parName='%' kommt das hin, aber wie klappt das für parHeute?

Gruß,
Peter
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: TSQLQuery.Filter auf DateTime-Feld funktioniert nicht (mysql)

  Alt 17. Apr 2015, 16:17
Z.B. so

SQL-Code:
SELECT
  Zeitstempel, Name
FROM
  Tabelle
WHERE
  Name LIKE :parName AND
  (DATE(Zeitstempel)=:parHeute OR :Alle = 1);
Markus Kinzler
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: TSQLQuery.Filter auf DateTime-Feld funktioniert nicht (mysql)

  Alt 17. Apr 2015, 16:47
Danke, da muss man mal wieder um die Ecke denken
  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 20:59 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