![]() |
SQL Befehl zum Ausgeben von daten in einen bestimmten Bereic
Hio könnte mir mal bitte einer sagen wie der Befehl für SQl ist um einen bestimmten Bereich auszugeben also z.B. Bereich von 23.11.2003 - 25.11.2003 <<< diesen Bereich möchte ich nur sehn.
gruß Kruemel |
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
select * from MeineTabelle
where MeinDatumsfeld => '23.11.2003' and MeinDatumsfeld <= '25.11.2003' Je nach DB-System und genauen Feld-Typ muss evtl noch die Zeit mit angegeben werden '23.11.2003 00:00:00' bzw. mit Raute getrennt werden (M$ Access) #23.11.2003#. |
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
em kann man dies auch in Kombination machen also ich habe eine Datenbank bzw Tabelle wo ich TAG Monat unfd Jahr einazlnt drin hab. würde das denn auch so gehn. Select from Table where Tag => '...' AND TAG <= '...' AND Monat => '...' AND Monat <= '...' AND Jahr =>'...' AND Jahr <= '...'
?? also ich hab zumindestens getestest aba es funzt net aba kann ja sein ich mach was falsch. |
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
Hai Kruemel2002,
versuche es mal so:
SQL-Code:
SELECT * FROM tabelle
WHERE (tag BETWEEN start AND ende) AND (monat BETWEEN start AND ende) AND (jahr BETWEEN start AND ende) |
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
hmm funzt uch net ... ich mein ich mach das ja über delphi und will das in ner QuickRep ausgeben.
so sieht das bei mir aus:
Delphi-Quellcode:
könnte sein das da nen fehler drin ist
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');
[edit=sakura] [source]Tags haben wir nicht, aber [delphi] Mfg, sakura[/edit] |
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
[edit=sakura] [source]Tags haben wir nicht, aber [delphi] Mfg, sakura[/edit] <<< verstehe ich net
|
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
Hai,
versuche es mal so:
Delphi-Quellcode:
P.S.: Ich denke Sakura meinte das die Tags nicht [ source] [ /source] heissen sondern [ delphi] [ /delphi] (Natürlich ohne die Leerzeichen)
procedure TForm1.Button1Click(Sender: TObject);
begin with Query1 do begin Close; SQL.Text := 'SELECT * FROM booking' +#10 + 'WHERE (tag BETWEEN :tag1 AND :tag2)' + #10 + 'WHERE (moat BETWEEN :monat AND :monat2)' + #10 + 'WHERE (jahr BETWEEN :jahr1 AND :jahr2)' + #10 + ' ORDER BY name, uhrzeit'; ParamCheck := True; Params.ParamByName('tag1').Value := Tag1; Params.ParamByName('tag2').Value := Tag2; Params.ParamByName('monat1').Value := Monat1 Params.ParamByName('monat2').Value := Monat2 Params.ParamByName('jahr1').Value := Jahr1 Params.ParamByName('jahr2').Value := Jahr2; Open; end; end; |
DP-Maintenance
Dieses Thema wurde von "Sharky" von "Programmieren allgemein" nach "Datenbanken" verschoben.
Ist in der Datenbanksparte besser aufgehoben ;-) |
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
Zitat:
...:cat:... |
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
Nun aber mal zu Sharkys Ansatz. Wenn die Datumspanne mal etwas größer wird, dann ist dieser wohl falsch ;-)
Ein Beispiel:
Code:
Kann sein, daß ich mich irre, SQL ist nicht mein Ding, aber wenn nicht :mrgreen:
Alle Daten zw. dem 20.06.2003 und 27.08.2003
Wir sind uns einig, daß sowohl der 25.07.2003 und der 04.08.2003 dazwischen liegen. Nach Sharky wäre aber: Der [i]25.07.2003[/i] 2003 <= 2003 <= 2003 - TRUE 06 <= 07 <= 08 - TRUE 20 <= 25 <= 27 - TRUE Datum ist korrekt überpüft Der [i]04.08.2003[/i] 2003 <= 2003 <= 2003 - TRUE 06 <= 08 <= 08 - TRUE 20 <= 04 <= 27 - [b]FALSE[/b] Damit würde das zweite Datum durchfallen obwohl dieses korrekt ist. ...:cat:... |
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
Zitat:
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: |
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:
also das ist alles und funzen tut das auch aba nur ohne dem bereich also between.
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; PS: sakura die Katze ist goil :D |
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? |
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 |
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
Zitat:
...:cat:... |
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 :( |
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
Zitat:
ich glaube ich habe jetzt die "optimal" Lösung gefunden:
Delphi-Quellcode:
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.
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; |
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! |
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
Zitat:
Zitat:
Zitat:
Parameter in einer SQL-Abfrage kannst Du dir wie "platzhalter" vorstellen.
SQL-Code:
param1 ist jetzt mein Parameter (Platzhalter). Diesem muss ich jetzt noch einen Wert zuweisen. Das passiert mit:
SELECT * FROM tabelle WHERE name = :param1
Delphi-Quellcode:
Vorher sage ich meinem Query mit ParamCheck := True; das es die Parameter auch bitte auswerten soll.
begin
Query1.Params.ParamByName ('param1').AsString := 'blubb'; end; 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:
Sprich: Bei einem Stringvergleich möchte die Datenbank das der String in Hochkommas steht. Ein noch besseres Beispiel sind Datumsabfragen:
begin
Query1.Close; Query1.SQL.Text := 'SELECT * FROM tabelle WHERE name = ' + QuotedStr ('blubb'); Query1.Open; end;
Delphi-Quellcode:
Wenn Du das so machst bekommst Du aller Warscheinlichkeit einen Fehler ;-)
begin
Query1.Close; Query1.SQL.Text := 'SELECT * FROM tabelle WHERE datum = ' + DateToStr (now); Query1.Open; end; 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:
Bei der Verwendung von Parametern musst Du dich darum nicht kümmern.
begin
Query1.Close; Query1.SQL.Text := 'SELECT * FROM tabelle WHERE datum = ' + FormatDateTime ('yyyy-mm-dd',now); Query1.Open; end;
Delphi-Quellcode:
Soviel zu den Parameter.
begin
Query1.Close; Query1.SQL.Text := 'SELECT * FROM tabelle WHERE datum = :mydatum'; Query1.ParamCheck := True; Query1.Params.ParamByName('myDatum').AsDate := now; Query1.Open; end; |
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 ?
|
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
?? könntest mir das bitte sagen.
:hi: |
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
Von welchen "Variablen" sprichst Du denn? Ich muss gestehen das ich aus deinem "Satz" nicht ganz schlau werde :stupid:
|
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
Naja den Variablen die ich von den beiden DateTimepickern nehme. Hatte doch gesagt 2 DateTimepicker wo ich je Tag Monat Und Jahr auslese. Naja und die sollen nachern den Bereich angeben. Die muss ich ja denn auch zusammen fassen zu diesen Date. Aba ich weiß nicht ganz wo ich die in den angegebenen Quelltext reinsetzen muss und ejrlihc gesagt auch net wie :(.
hatte doch meinen Quelltext auch hier geposted also mein select befehl dasieht man die gemeinten Variablen :D |
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
Hai Kruemel2002,
überlege doch einmal ;-)
Code:
Jetzt siehst Du genau wo ich das Datum aus den beiden DateTimePickern übergebe. Wenn Du das Datum vorher in eine Variable speicherst muss halt diese übergeben werden.
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',[color=red]DateTimePicker1.Date[/color]); Params.ParamByName('ende').AsString := FormatDateTime ('yyyy-m-d',[color=red]DateTimePicker2.Date[/color]); Open; end; end; |
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
ups
bin manchmal nen biscen schwervon begriff :D fetten dank ich werds mal ausprobieren :D |
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
-.- bin dumm
|
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
hmm also wenn ich das ausführe stürtz mein prog ab er mein "Merkmal nicht verfügbar"
|
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
Zitat:
Was machst du denn da?
So dürfte ein Schuh draus werden: ;)
Delphi-Quellcode:
with Query do
begin SQL.Text := 'SELECT *' + #10 + 'FROM Booking' + #10 + 'WHERE CAST(CONCAT(jahr' + #10 + ' ,''-''' + #10 + ' ,monat' + #10 + ' ,''-''' + #10 + ' ,tag) As Date) BETWEEN :i_Start AND :i_Ende' + #10 + 'ORDER BY Name' + #10 + ' ,Uhrzeit'; // Parse Statement um Variablen zu erkennen ParamCheck := True; // Parameterzuweisung with Params do begin // Die Zuweisung des DataType soll verhindern, dass die MidWare irgendwelchen Käse fabriziert ParamByName('i_Start').DataType := ftDate; ParamByName('i_Start').Value := DateTimePicker1.Date; ParamByName('i_Ende').DataType := ftDate; ParamByName('i_Ende').Value := DateTimePicker2.Date; end; // Ausführen Open; end; |
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
Zitat:
darauf habe ich gewartet ;-) Warum ich es als String übergeben? Weil es als .AsDate nicht funktionierte. Ich vermute das in diesem Fall das Datum im "falschen Format" ankommt. Da die Zahlen in den einzelnen Felder ja 1/2/3 und nicht 01/02/03 sind wird (so vermute ich) bei dem Typcasting das Datum intern auch so verwendet z.B. 2004-5-1 und nicht 2004-05-01. Mit dem Start/Ende könntest Du recht haben. Obwohl es bei mir hier ohne Probleme funktionirt. |
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
Auch hier stürzt das prog ab und gibt die Fehlermeldung "Merkmal nicht verfügbar".
|
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
Zitat:
|
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
so ich habe grade erfahren das es gar kein Mysql ist! Mir wurde falsche infos gegeben sry es ist dBase könnte es daran liegen das dieser fehler kommt? (Ich schreib das prog auch nur weiter und mir wurde anfangs gesagt das das MySQL ist sorry)
Edit: Mir wurde gesagt das DBase nicht alle SQL befehle kann. |
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
:shock:
Als Programmierer sollte man schon wissen auf welche Datenbank man zugreifft. Tja, wenn es dBase ist wird es wohl nicht gehen. |
Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be
Ja klar müsste man es wissen ist mir auch nen bischen peinlich -.-. Aba bin halt noch noch net gut bin im ersten Lehrjahr und da kann mir das doch mal passieren oder nicht?
Zitat:
Wenns dafür nix gibt denn bedank ich mich füür die Hilfe voon euch alle! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:49 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