Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Befehl zum Ausgeben von daten in einen bestimmten Bereic (https://www.delphipraxis.net/25099-sql-befehl-zum-ausgeben-von-daten-einen-bestimmten-bereic.html)

Sharky 1. Jul 2004 09:45

Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
 
Zitat:

Zitat von sakura
Nun aber mal zu Sharkys Ansatz. Wenn die Datumspanne mal etwas größer wird, dann ist dieser wohl falsch ...

Skandal! Ich mache doch nichts falsch ;-)
Es ist die richtige Antwort auf die Frage :!:
Das Problem ist das wohl die Frage nicht so gestellt ist wie das gewünschte Ergbniss sein sollte :stupid:

Kruemel2oo2 1. Jul 2004 09:45

Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
 
em sharky also das mit den Params versteh ich net und zu dem denke ich auch net das dat funzt da ich ja wie man bei mir sieht Tag Monat und jahr aus ner variablen kommen (von DatTimePicker ausgelesen).

also hier mal so alles zumindestens die funktion.

Delphi-Quellcode:
procedure TForm2.Button2Click(Sender: TObject);
var
  Name1,Name, tmj: string;
  Monat, Tag1, jahr: string;
  Monat1, Tag2, jahr1: string;
  datum : TDateTime;
begin
  if RadioButton2.Checked then
  begin
    DateTimePicker2.Enabled := true;
    datum:=DateTimePicker1.Date;
    Name := ComboBox1.Text;
    tmj:=DateToStr(datum);
    //gibt den Tag zurück
    Tag1 :=copy(DateToStr(DateTimePicker1.Date), 1, 2);
    //gibt den Monat zurück
    monat:=copy(DateToStr(DateTimePicker1.Date), 4, 2);
    //gibt das Jahr zurück
    jahr:=copy(DateToStr(DateTimePicker1.Date), 9, 2);
    Tag2 :=copy(DateToStr(DateTimePicker2.Date), 1, 2);
    monat1:=copy(DateToStr(DateTimePicker2.Date), 4, 2);
    jahr1:=copy(DateToStr(DateTimePicker2.Date), 9, 2);
    if Name = 'alle' then
    begin
      Form1.Query1.Active:=False;
      Form1.Query1.SQL.Clear();
      Form1.Query1.SQL.Add('select * from Booking where (Tag between"'+Tag1+'"AND "'+Tag2+'")AND(Monat between"'+Monat+'"AND"'+Monat1+'") AND (Jahr between"'+Jahr+'"AND"'+jahr1+'") order by name, Uhrzeit');
      Form1.Query1.Open();
      Form1.Query1.Active:=True;
      Form1.QuickRep1.Preview();
    end;
  end;
end;
also das ist alles und funzen tut das auch aba nur ohne dem bereich also between.

PS: sakura die Katze ist goil :D

Sharky 1. Jul 2004 09:46

Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
 
Hai Kruemel2002,

zwei Fragen:

a) Welche Datenbank
b) Was genau möchtest Du machen? So wie Sakura geschrieben alle Datensätze die zwichen zwei Datumswerten liegen?

Kruemel2oo2 1. Jul 2004 09:53

Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
 
Mysql

ich habe 2 Datetimepicker bei denen wähle ich aus in welchen Bereich ich einen Log (den ich bei ner anderen Funktion in die DAtenbank schreibe). Ich übergebe das an einen Quickrep. Dort will ich jetzt den ausgewählten bereich (den bei den beiden DateTimepicker) sehen.

Ist das so einigermasen verständlich?ß

ich drück mich imma so schwer aus ;D

sakura 1. Jul 2004 10:03

Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
 
Zitat:

Zitat von Sharky
So wie Sakura geschrieben alle Datensätze die zwichen zwei Datumswerten liegen?

So steht es ja auch in seiner Frage (ganz, ganz oben). Das Datum war ja nur ein Beispiel für einen Bereich, nicht der Bereich ;)

...:cat:...

Kruemel2oo2 1. Jul 2004 10:28

Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
 
also die anweisung funzt ist mir grad aufgefellen aba nur wenn ich als ertes also die erste Comobox mit den heutigen Datum nehm wenn ich ein datum nehm was gestern oda so war funzt es net :(. Woran liegt das?

edit: hab den fehler gefunden :D. ist aba nen scheiß fehler :(

Sharky 1. Jul 2004 12:06

Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
 
Zitat:

Zitat von Kruemel2oo2
....edit: hab den fehler gefunden :D. ist aba nen scheiß fehler :(

Hai Kruemel2002,

ich glaube ich habe jetzt die "optimal" Lösung gefunden:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  with Query1 do
  begin
    Close;
    SQL.Text := 'SELECT *' + #10
      + 'FROM Booking' + #10
      + 'WHERE CAST(CONCAT(jahr,"-",monat,"-",tag) AS DATE) BETWEEN :start AND :ende' +#10
      + 'ORDER BY name, uhrzeit';
    ParamCheck := True;
    Params.ParamByName('start').AsString := FormatDateTime ('yyyy-m-d',DateTimePicker1.Date);
    Params.ParamByName('ende').AsString := FormatDateTime ('yyyy-m-d',DateTimePicker2.Date);
    Open;
  end;
end;
Mit CONCAT setze ich aus deinen drei Feldern einen String zusammen im Format 'yyyy-m-d'. Diesen wandele ich dann mit CAST in einen Datumwert um. Der rest ist dann wieder Standard-SQL.

Kruemel2oo2 1. Jul 2004 12:19

Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
 
hmm erklär mir ma dieses paramcheck und dieses params und naja den rest versteh ich zum teil.
die 3 felder sind das die von der Daten bank? oda sind sollen das die variablen sein? und was macht dieses +#10 ? und wenn die 3 felder von der Datenbank sind wo werden denn die variablen da eingefügt? also ist bestimmt ne gute lösung (bestimmt auch optimal) aba ich seh da net so ganz durch bin net so der SQL sezi. Könntest das ma nen bischen erklären bitte!

Sharky 1. Jul 2004 12:48

Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
 
Zitat:

Zitat von Kruemel2oo2
...die 3 felder sind das die von der Daten bank?

tag,monat,jahr sind die Feldenamen in der Tabelle.

Zitat:

.. was macht dieses +#10
#10 ist nicht anderes als ein Zeilenumbruch. Manche Datenbanken mögen es nicht wenn alle Befehle in einer Zeile stehen.

Zitat:

Könntest das ma nen bischen erklären bitte!
Also,

Parameter in einer SQL-Abfrage kannst Du dir wie "platzhalter" vorstellen.
SQL-Code:
SELECT * FROM tabelle WHERE name = :param1
param1 ist jetzt mein Parameter (Platzhalter). Diesem muss ich jetzt noch einen Wert zuweisen. Das passiert mit:
Delphi-Quellcode:
begin
  Query1.Params.ParamByName ('param1').AsString := 'blubb';
end;
Vorher sage ich meinem Query mit ParamCheck := True; das es die Parameter auch bitte auswerten soll.
Der Vorteil der Parameter ist das ich mich nicht darum kümmern muss das sie in der für meine Datenbank richtigen Formatierung benutzt werden. Wenn Du das ganze ohne Parameter machen möchtest, musst Du es ja so schreiben:
Delphi-Quellcode:
begin
  Query1.Close;
  Query1.SQL.Text := 'SELECT * FROM tabelle WHERE name = ' + QuotedStr ('blubb');
  Query1.Open;
end;
Sprich: Bei einem Stringvergleich möchte die Datenbank das der String in Hochkommas steht. Ein noch besseres Beispiel sind Datumsabfragen:

Delphi-Quellcode:
begin
  Query1.Close;
  Query1.SQL.Text := 'SELECT * FROM tabelle WHERE datum = ' + DateToStr (now);
  Query1.Open;
end;
Wenn Du das so machst bekommst Du aller Warscheinlichkeit einen Fehler ;-)
Auf den meisten Rechnern ist noch die alte Datumsanzeige eingestellt. (TT.MM.JJJJ = 01.07.2004) Der mySQL-Server möchte das Datum aber in diesem Format: "JJJJ-MM-TT = 2004-07-01". Jetzt hast Du natürlich die Möglichkeit das Datum immer entsprechend zu Formatieren.

Delphi-Quellcode:
begin
  Query1.Close;
  Query1.SQL.Text := 'SELECT * FROM tabelle WHERE datum = ' + FormatDateTime ('yyyy-mm-dd',now);
  Query1.Open;
end;
Bei der Verwendung von Parametern musst Du dich darum nicht kümmern.
Delphi-Quellcode:
begin
  Query1.Close;
  Query1.SQL.Text := 'SELECT * FROM tabelle WHERE datum = :mydatum';
  Query1.ParamCheck := True;
  Query1.Params.ParamByName('myDatum').AsDate := now;
  Query1.Open;
end;
Soviel zu den Parameter.

Kruemel2oo2 1. Jul 2004 13:54

Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
 
hmm alles klar nun bin ich wieda nen bischen schlauer :D aba ein ist mir noch net klar wo geb ich jetzt meine variablen an? also die eingelesenen damit er die von den übernimmt? die muss ich ja denn auch zu diesen Datumswert machen damit er das richtig erfasst. Aba wo soll das hin ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:57 Uhr.
Seite 2 von 4     12 34      

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