![]() |
SQL Abfrage Formulieren! Hilfe...
Hi
Ich möchte aus einer Tabelle die Daten eines bestimmten Zeitraums haben. Wie formuliert man so eine Abfrage in SQL? Das Datumsfeld in der SQl DB heißt "First_Event" und ist ein Date/Time! Also "2004-04-26 22:00:00" Anfangsdatum und Enddatum stehen in den Editfeldern (edBegenn und edEnde). :gruebel: 'Select * From ordertracking ...........' :gruebel: Weiß einer wie es geht? Gruß celina |
Re: SQL Abfrage Formulieren! Hilfe...
Hier mein Aktueller Code....
Delphi-Quellcode:
[edit=Luckie]Delphi-Tags gefixed. Mfg, Luckie[/edit]
qrMain.SQL.Text :=
'SELECT ' + 'T.Order_Type,' + 'T.Customer_Number,' + 'T.Order_Number,' + 'T.First_Event,' + 'T.LogIn,' + 'T.DPrint,' + 'T.Count_DPrint,' + 'T.Invoicing,' + 'T.PrePrint,' + 'T.Print,' + 'T.Cewe_Batch,' + 'T.Iqena_Batch,' + 'T.BMSLogout,' + 'K.Na,' + 'K.Customer_Number,' + 'K.Str,'+ 'K.Ort,' + 'K.Tel,' + 'K.PFD,' + 'K.Fach_TAG,' + 'K.Fach_NAcht,' + 'K.Ap,' + 'K.PLZ ' + 'FROM ' + 'table_ordertracking T,' + 'kundenmg K ' + 'WHERE ' + 'T.Customer_Number=K.Customer_Number ' + 'AND ' + 'T.First_Event like ''' + edknr.Text + '''"%" ' + 'AND ' + 'T.First_Event like ''' + edatnr .Text + '''"%" ' + 'ORDER BY ' + 'T.First_Event;'; qrMain.Open; |
Re: SQL Abfrage Formulieren! Hilfe...
Versuch mal folgendes:
Delphi-Quellcode:
Ansonsten verwende parametriesiertes SQL:
...
'WHERE T.FIRST_EVENT BETWEEN ' + StrToDate(EdBegenn.Text) + ' AND ' + StrToDate(EdEnde.Text) ...
Delphi-Quellcode:
Schau dir dazu mal die Parameterverarbeitung in der Hilfe an, das Beispiel sollte mit TADOQuery funktioneren. Vorteil ist, daß du das SQL-Statement bereits im Objektinspektor festlegen kannst und dann in deinem Quelltext nur noch die Parameter zuweisen mußt. Sicherer ist dieser Code obendrein.
...
'WHERE T.FIRST_EVENT BETWEEN :ANFANG AND :ENDE ... qryMain.PREPARE; ... qryMain.Parameters[0].Value := StrToDate(EdBegenn.Text); qryMain.Parameters[1].Value := StrToDate(EdEnde.Text); qryMain.Open; ... Grüße Mikhal |
Re: SQL Abfrage Formulieren! Hilfe...
Guten Morgen Celina und Mikhal,
Zitat:
MS-SQL Server will z.B. folgendes Format: '23.12.2004' Access will es so: #23.12.2004# MYSQL akezptiert nur die Ami-Schreibweise 12.23.2004 (oder so ähnlich). Wenn Du Parameter verwendest kümmert sich Delphi drum. Schöne Grüße Niels |
Re: SQL Abfrage Formulieren! Hilfe...
Das Datum und die Zeit wird windows-intern als Integer gespeichert.
TDateTime ist im Prinzip mit dem Typ Double identisch, wobei dann links vom Komma der Datums-Integer und rechts davon der Zeit-Integer steht. Also alles, was Du tun mußt, ist in einem TDateTime-Wert den Datums-Integer zu isolieren, und den kannst Du dann auch in Deinem SQL-Query verwenden, also z.B. 'where T.irgendeindatum = ' + inttostr(datumsinteger) |
Re: SQL Abfrage Formulieren! Hilfe...
@Delphi_Fanatic: damit kannst Du aber heftig auf die Fresse fallen, weil es durchaus unterschiedliche Basisdaten für den Datumsinteger gibt. So ist z.B. für Delphi die Basis der 30.12.1899, für MSSQL dagegen ist es der 01.01.1900 - das macht schonmal 2 Tage Unterschied!
@celinaw: lass Dich daher nicht beirren - Parameter für Datum'se sind die einzig vernünftige Art! Gruß |
Re: SQL Abfrage Formulieren! Hilfe...
Zitat:
Aber das Datum macht immer am meisten Sorgen :? mySQL gibt es z.B. immer so zurück yyyy-mm-dd Wenn ich dann im Programm einfach .AsDateTime := now schreibe habe ich (zumindest mit den Zeos-Komponenten) probleme. |
Re: SQL Abfrage Formulieren! Hilfe...
@Leuselator
Zitat:
Und Microsoft-Produkte wie Access-Datenbanken machen es genauso, so dass es zumindestens in Verbindung mit diesen Datenbank-Systemen auf jeden Fall funktioniert. Falls es da bei anderen DB-Systemen wie Paradox, Oracle usw... Unterschiede geben sollte - dann müssen die ja so oder so berücksichtigt werden, auch bei den anderen Methoden, die hier gepostet wurden wie z.B. 'qryMain.Parameters[0].Value := StrToDate(EdBegenn.Text);', denn die Delphi-Funktion StrToDate bezieht sich schließlich auch auf den Windows-Datums-Integer und nicht irgendwelche Paradox- oder sonstige Spezialitäten. |
Re: SQL Abfrage Formulieren! Hilfe...
@Delphi_Fanatik
Wie kommst du auf die Idee TDate sei ein Integer? Mein D7 sagt mir immer noch das:
Delphi-Quellcode:
...und zukünftig gilt nur noch das:
TDateTime = type Double;
... TDate = type TDateTime; Zitat:
Das Datumsfelder (wie eigentlich jeder Wert) in einen Parameter gehört wurde wohl nicht nur in diesem Thread oft genug gepredigt. @Sharky
Delphi-Quellcode:
Dieser Vergleich kann nur funktionieren wenn Z auf die Millisekunde (unter .Net auf 100 Nanosekunden) mit der aktuellen Systemzeit übereinstimmt. Im Normalfall sollte man bei direkten Vergleich den Zeitanteil abschneiden.
with Query do
begin SQL.Text := 'SELECT X' + #10 + 'FROM Y' + #10 + 'WHERE Z = :i_XYZ'; with Parameters.ParamByName('i_XYZ') do begin DataType := ftDateTime; Value := now; end; Open; //... end; |
Re: SQL Abfrage Formulieren! Hilfe...
@Robert_G :
Zitat:
Kannst Du ganz leicht ausprobieren : Starte Excel, gib' in irgendeine Zelle das heutige Datum ein - den 29.04.2004 - und dann Pulldown-Menü 'Format / Zellen' und klick da auf Zahl. Dann siehst Du in dieser Excel-Zelle die windows-interne Ganz-Zahl, die für den 29.04.2004 steht, nämlich 38106. Und wenn Du nun in Delphi das Datum abfragst, dann steht in dem Datentyp TDateTime (der wie gesagt dem Datentyp Double entspricht) "links" vom Komma dieser Ganz-Zahl-Wert für das Datum, den Delphi vom Windows-System bezieht (für heute 38106) und "rechts" vom Komma steht ein Ganz-Zahl-Wert, der die Zeit repräsentiert. Wenn Du Dir dann die Datums-Zahl links vom Komma 'isolierst' erhälst Du einen Integer-Wert, der für das Datum steht und das Du locker im Zusammenhang mit SQL-Queries verwenden kannst. Jedenfalls bei Microsoft-Datenbanken wie Access. TDateTime ist natürlich kein Integer, aber das Datum an sich, wird durch eine ganze Zahl repräsentiert und kann ganz einfach aus dem TDateTime extrahiert werden - undzwar in eine integer-Variable. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 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 by Thomas Breitkreuz