AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Abfrage mit Where Bedingung auf einen Zeitraum
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Abfrage mit Where Bedingung auf einen Zeitraum

Ein Thema von stonimahoni · begonnen am 23. Nov 2004 · letzter Beitrag vom 23. Nov 2004
Antwort Antwort
Seite 1 von 2  1 2      
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#1

SQL Abfrage mit Where Bedingung auf einen Zeitraum

  Alt 23. Nov 2004, 09:54
hi leute.

ich hab folgendes problem :

ich möchte mir datensätze aus meiner access db filtern und anzeigen lassen per sql befehl die in einem bestimmten zeitraum liegen.


anbei mein codeschnipsel :

Delphi-Quellcode:
     sqlstr := 'SELECT auftrag.Wgr, wgr.Wgr_Bezeichnung, auftrag.TatGarantie,'
     + 'hersteller.Herstellernr, hersteller.Firma,'
     + 'Sum(auftrag.Gesamtkostrep) AS [Summe von Gesamtkostrep], auftrag.Abgeholt '
     + 'FROM wgr INNER JOIN (hersteller INNER JOIN auftrag ON hersteller.Herstellernr = auftrag.Herstellernr) '
     + 'ON wgr.Wgr = auftrag.Wgr GROUP BY auftrag.Wgr, wgr.Wgr_Bezeichnung, auftrag.TatGarantie, '
     + 'hersteller.Herstellernr, hersteller.Firma, auftrag.Abgeholt where Annahmedatum between '+ von.text + ' and ' + bis.text ;

von und bis.text sind jeweils edit felder in denen ich das datum ( den zeitraum ) eingebe.
mein primäres problem besteht darin, dass der mir abkackt wenn ich den selectbefehl abschicke - und zwar zeit er mir an, dass am ende von meinem string noch ein gänsefüsschen sei ( " ) oder ein ( ' )
und ich weiss net wo der das herholt ?! (

und noch ne frage nebenher : muss ich die editfelder selber oder hier im code speziell was abändern damit der rafft das ich ein datum eingebe oder is das egal ? in der db ist das feld ein datumsfeld.


hoffe ihr könnt mir helfen :/

mfg

stoni
Carsten
  Mit Zitat antworten Zitat
Benutzerbild von DerAndereMicha
DerAndereMicha

Registriert seit: 1. Jul 2004
Ort: Berlin
208 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: SQL Abfrage mit Where Bedingung auf einen Zeitraum

  Alt 23. Nov 2004, 10:20
Probiers mal mit QuotedStr(von.text) bzw. QuotedStr(bis.text). Weiß
zwar nicht ob Access genauso reagiert wie der SQL-Server, aber ich vermute mal ja.
Der Weg ist das Ziel...
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: SQL Abfrage mit Where Bedingung auf einen Zeitraum

  Alt 23. Nov 2004, 10:23
Ein Vergleich mit Datumsfeldern ist immer etwas problematisch.
Deshalb sollte man unbedingt Parameter verwenden:
Delphi-Quellcode:
SQL.TEXT := ....'where Annahmedatum >= :Von AND Annahmedatum < :Bis';
ADOQuery1.Parameters.ParamValues['Von'] := Date-30.0; // =Heute vor 30 Tagen
ADOQuery1.Parameters.ParamValues['Bis'] := Date;
ADOQuery1.Open;
Andreas
  Mit Zitat antworten Zitat
AlphaBug

Registriert seit: 2. Mär 2004
Ort: hinterm Transistor 246 gleich links
46 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: SQL Abfrage mit Where Bedingung auf einen Zeitraum

  Alt 23. Nov 2004, 10:26
Hallo stonimahoni

Wenn möglich, dann würde ich für die Datumswerte Parameter benutzen,
oder es mit QuotedStr versuchen.

Desweiteren gehört imho die Where-Klausel vor das Group-By .
(Lasse mich auch gern eines besseren belehren)
Delphi 4ever !
  Mit Zitat antworten Zitat
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#5

Re: SQL Abfrage mit Where Bedingung auf einen Zeitraum

  Alt 23. Nov 2004, 11:04
hi leute

danke erstmal für eure hilfe

@ shmia : deinen code kapier ich nicht ganz und weiss nicht den bei mir einzubauen weil bei dir sieht es nicht so aus als würdest du den inhalt der beiden editfelder abfragen und mit dem -3ß tagen - das brauch ich ja nicht und kann und mag ich auch nicht festlegen

@ deranderemicha und alphabug :
habs mit quotedstr(von.text) und quotedstr(bis.text) probiert :

so sieht mein code atm aus :

Delphi-Quellcode:
     sqlstr := 'SELECT auftrag.Wgr, wgr.Wgr_Bezeichnung, auftrag.TatGarantie,'
     + 'hersteller.Herstellernr, hersteller.Firma,'
     + 'Sum(auftrag.Gesamtkostrep) AS [Summe von Gesamtkostrep], auftrag.Abgeholt '
     + 'FROM wgr INNER JOIN (hersteller INNER JOIN auftrag ON hersteller.Herstellernr = auftrag.Herstellernr) '
     + 'ON wgr.Wgr = auftrag.Wgr GROUP BY auftrag.Wgr, wgr.Wgr_Bezeichnung, auftrag.TatGarantie, '
+ 'hersteller.Herstellernr, hersteller.Firma, auftrag.Abgeholt where Annahmedatum between ' + QuotedStr(von.text) + ' and ' + QuotedStr(bis.text);

folgende fehlermeldung kommt :
meldung : 'syntaxfehler ( fehlender operator ) in abfrageausdruck 'auftrag.abgeholt where
annahmedatum between 'datum das ich eingegeben habe' and 'datum das ich eingegeben habe'".
prozess wurde angehalten....

es geht wohl nur noch um das mist ( " ) am ende und ich weiss nicht woher das kommt (
Carsten
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: SQL Abfrage mit Where Bedingung auf einen Zeitraum

  Alt 23. Nov 2004, 11:14
Zitat von stonimahoni:
@ shmia : deinen code kapier ich nicht ganz und weiss nicht den bei mir einzubauen weil bei dir sieht es nicht so aus als würdest du den inhalt der beiden editfelder abfragen und mit dem -3ß tagen - das brauch ich ja nicht und kann und mag ich auch nicht festlegen
Na dann halt so:
Delphi-Quellcode:
SQL.TEXT := ....'where Annahmedatum >= :Von AND Annahmedatum < :Bis';
ADOQuery1.Parameters.ParamValues['Von'] := StrToDate(von.Text);
ADOQuery1.Parameters.ParamValues['Bis'] := StrToDate(bis.Text);
ADOQuery1.Open;
Ich würde dir empfehlen, die Edit-felder von und bis als TDateTimePicker anzulegen.
Nur so lässt sich sicherstellen, dass kein Unsinn als Datum eingegeben wird.
Andreas
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: SQL Abfrage mit Where Bedingung auf einen Zeitraum

  Alt 23. Nov 2004, 11:20
ICh habe shmias Beispiel etwas geändert (ist aber nicht so wichtig :

Zitat von shmia:
Ein Vergleich mit Datumsfeldern ist immer etwas problematisch.
Deshalb sollte man unbedingt Parameter verwenden:
Delphi-Quellcode:
SQL.TEXT := ....'where Annahmedatum >= :Von AND Annahmedatum < :Bis';
ADOQuery1.Parameters.ParamByName('VON).AsDateTime := Datum1;
ADOQuery1.Parameters.ParamByName(
'Bis').AsDateTime := Datum2;
ADOQuery1.Open;
Was du jetzt nicht verstehst ist wohl, wo Datum1 und Datum2 herkommen ? Z.B. aus einem Edit :

Datum1 := StrToDate (Edit1.Text);
Gruß
Hansa
  Mit Zitat antworten Zitat
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#8

Re: SQL Abfrage mit Where Bedingung auf einen Zeitraum

  Alt 23. Nov 2004, 11:50
@ shmia : so hat er nur mit dem von und dem bis nix anfangen können

@ hansa : amt hab ich nur da problem das er folgendes hinschreibt : undefinierter bezeichner : 'asdatetime'

was nun ?

btw : ich hasse es so planlos zu sein
Carsten
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: SQL Abfrage mit Where Bedingung auf einen Zeitraum

  Alt 23. Nov 2004, 12:13
Verwende statt "AsDateTime" "Value", dann sollte es funktionieren.

Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
s14

Registriert seit: 15. Mai 2003
Ort: München
251 Beiträge
 
Delphi 7 Architect
 
#10

Re: SQL Abfrage mit Where Bedingung auf einen Zeitraum

  Alt 23. Nov 2004, 12:18
Hallo, schon mal so probiert?

Delphi-Quellcode:
sqlstr := 'SELECT auftrag.Wgr, wgr.Wgr_Bezeichnung, auftrag.TatGarantie,
     + 'hersteller.Herstellernr, hersteller.Firma,
     + 'Sum(auftrag.Gesamtkostrep) AS [Summe von Gesamtkostrep], auftrag.Abgeholt
     + 'FROM wgr INNER JOIN (hersteller INNER JOIN auftrag ON hersteller.Herstellernr = auftrag.Herstellernr)
     + 'ON wgr.Wgr = auftrag.Wgr GROUP BY auftrag.Wgr, wgr.Wgr_Bezeichnung, auftrag.TatGarantie,
+ 'hersteller.Herstellernr, hersteller.Firma, auftrag.Abgeholt where Annahmedatum between ' + QuotedStr(von.text) + ' and ' + QuotedStr(bis.text) + '''';
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:58 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