AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Abfrage Formulieren! Hilfe...

SQL Abfrage Formulieren! Hilfe...

Ein Thema von celinaw · begonnen am 26. Apr 2004 · letzter Beitrag vom 30. Apr 2004
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#1

SQL Abfrage Formulieren! Hilfe...

  Alt 26. Apr 2004, 23:58
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).

'Select * From ordertracking ...........'

Weiß einer wie es geht?

Gruß celina
  Mit Zitat antworten Zitat
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#2

Re: SQL Abfrage Formulieren! Hilfe...

  Alt 27. Apr 2004, 00:25
Hier mein Aktueller Code....


Delphi-Quellcode:
    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;
[edit=Luckie]Delphi-Tags gefixed. Mfg, Luckie[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

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

Re: SQL Abfrage Formulieren! Hilfe...

  Alt 27. Apr 2004, 05:35
Versuch mal folgendes:
Delphi-Quellcode:
...
'WHERE T.FIRST_EVENT BETWEEN ' + StrToDate(EdBegenn.Text) + ' AND ' + StrToDate(EdEnde.Text)
...
Ansonsten verwende parametriesiertes SQL:
Delphi-Quellcode:
...
'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;
...
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.

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

Registriert seit: 26. Apr 2004
113 Beiträge
 
Delphi 6 Professional
 
#4

Re: SQL Abfrage Formulieren! Hilfe...

  Alt 27. Apr 2004, 06:28
Guten Morgen Celina und Mikhal,

Zitat:
Sicherer ist dieser Code obendrein
Ich denke Parameter sind bei Datumsfeldern eigentlich ein Muß. Die Alternative mit dem zusammengesetzten String funktioniert nämlich nicht bei allen Datenbanken, weil die Schreibweise eines Datums unterschiedlich ist.

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
Erspare Dir die Gedanken über ungelegte Eier !!!
  Mit Zitat antworten Zitat
Delphi_Fanatic

Registriert seit: 24. Mär 2004
201 Beiträge
 
#5

Re: SQL Abfrage Formulieren! Hilfe...

  Alt 27. Apr 2004, 06:36
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)
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#6

Re: SQL Abfrage Formulieren! Hilfe...

  Alt 27. Apr 2004, 07:02
@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ß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#7

Re: SQL Abfrage Formulieren! Hilfe...

  Alt 27. Apr 2004, 08:13
Zitat von Leuselator:
...- Parameter für Datum'se sind die einzig vernünftige Art!..
Nicht nur für das Datum finde ich.
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Delphi_Fanatic

Registriert seit: 24. Mär 2004
201 Beiträge
 
#8

Re: SQL Abfrage Formulieren! Hilfe...

  Alt 27. Apr 2004, 09:01
@Leuselator

Zitat:
@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!
na ja, aber Tatsache ist, dass Delphi intern denselben Integer für eine Datums-Angabe verwendet wie Windows. Delphi bezieht diesen integer ja auch vom Windows-System.

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.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#9

Re: SQL Abfrage Formulieren! Hilfe...

  Alt 28. Apr 2004, 21:07
@Delphi_Fanatik
Wie kommst du auf die Idee TDate sei ein Integer?
Mein D7 sagt mir immer noch das:
Delphi-Quellcode:
  TDateTime = type Double;
  ...
  TDate = type TDateTime;
...und zukünftig gilt nur noch das:
Zitat von .Net SDK Doku:
The DateTime value type represents dates and times with values ranging from 12:00:00 midnight, January 1, 0001 Anno Domini (Common Era) to 11:59:59 P.M., December 31, 9999 A.D. (C.E.)

Time values are measured in 100-nanosecond units called ticks, and a particular date is the number of ticks since 12:00 midnight, January 1, 1 A.D. (C.E.) in the GregorianCalendar calendar. For example, a ticks value of 31241376000000000L represents the date, Friday, January 01, 0100 12:00:00 midnight. A DateTime value is always expressed in the context of an explicit or default calendar.
Da wird man mit einem Integer (jedenfalls Int32) auch nicht weit kommen...
Das Datumsfelder (wie eigentlich jeder Wert) in einen Parameter gehört wurde wohl nicht nur in diesem Thread oft genug gepredigt.

@Sharky
Delphi-Quellcode:
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;
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.
  Mit Zitat antworten Zitat
Delphi_Fanatic

Registriert seit: 24. Mär 2004
201 Beiträge
 
#10

Re: SQL Abfrage Formulieren! Hilfe...

  Alt 29. Apr 2004, 07:17
@Robert_G :

Zitat:
Wie kommst du auf die Idee TDate sei ein Integer?
Also nochmal : Windows verwaltet das Datum intern als Integer.
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:10 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