Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   If-In SQL- aber wie? (https://www.delphipraxis.net/146527-if-sql-aber-wie.html)

Teekeks 21. Jan 2010 18:17

Datenbank: Firebird • Version: x • Zugriff über: ??

If-In SQL- aber wie?
 
Hallo!
Ich hab hier wieder einmal ein Problem.
Ich möchte per sql-Statement folgendes machen:
Code:
wenn Datensatz mit dem gesuchten Datum vorhanden dann:
  Daten des Gefundenen Datensatzes Ändern
ansonsten:
  neuen Datensatz anlegen
Wie geht das? Ich weiß das es bei SQL irgendwie auch ein if else gab aber ich weiß nicht wie man das anwendet...

Gruß Teekeks

mkinzler 21. Jan 2010 18:18

Re: If-In SQL- aber wie?
 
SQL-Code:
case..when
oder
SQL-Code:
if()

Teekeks 21. Jan 2010 18:21

Re: If-In SQL- aber wie?
 
hmmm, wie sieht genau die Syntax aus? Ich werde mich auf jeden Fall mal weiter belesen...
EDIT: *arg* ich stelle gerade fest das ich hier Firebird nehme und nicht wie sonst MySQL...

mkinzler 21. Jan 2010 18:35

Re: If-In SQL- aber wie?
 
In FireBird:

SQL-Code:
select iif( <Feld> = <Wert>; <Code wenn Bedingung war>; <Code, wenn Bedingung nicht wahr>), ... from ...
bzw.
SQL-Code:
select case <Feld> when <Wert1> then <Code bei Wert1> when <wert2> ... else <Code wenn kein Wert> ...
oder

SQL-Code:
select case when <Bed1> then <Code bei Bed1> when <Bed2> ... else <Code wenn kein Wert> ...

Teekeks 21. Jan 2010 18:47

Re: If-In SQL- aber wie?
 
Hmmm, was mach ich hier falsch?:
SQL-Code:
SELECT iif( Datum=date'17.11.1858';select * From Arbeitszeiten where Datum='17.11.1858'; {ein Update befehl}) from ARBEITSZEITEN
Mir scheint ich habe das Prinzip noch nicht wirklich verstanden...

mkinzler 21. Jan 2010 18:53

Re: If-In SQL- aber wie?
 
So etwas ginge nur in einer SP oder enem execute block

Mit IIF(), case..when kann man nur Werte wählen/generieren z.B.

SQL-Code:
Select iif( Wert1 > Wert2, Wert1, Wert2) as wert from <Tabelle>;

rwachtel 21. Jan 2010 18:57

Re: If-In SQL- aber wie?
 
http://www.developeando.com/2008/12/...or-insert.html

Teekeks 21. Jan 2010 19:47

Re: If-In SQL- aber wie?
 
Hmmm, nu meckert der rum das der "IF" nicht kennt....
Hier mal mein QC:
Delphi-Quellcode:
  with Form1.Query do
  begin
    close;
    sql.Clear;
    sql.Add('IF EXISTS(SELECT * FROM Arbeitszeiten WHERE Datum = date'''+dat+''' ) THEN'+#10+
            'UPDATE'+#10+
            'Arbeitszeiten'+#10+
            'SET'+#10);
    case Combobox1.ItemIndex of
    0: sql.add(' B1 = '+inttostr(CBBeginn.ItemIndex)+#10+
                ' E1 = '+inttostr(CBEnde.ItemIndex)+#10);
    1: sql.add(' B2 = '+inttostr(CBBeginn.ItemIndex)+#10+
                ' E2 = '+inttostr(CBEnde.ItemIndex)+#10);
    2: sql.add(' B3 = '+inttostr(CBBeginn.ItemIndex)+#10+
                ' E3 = '+inttostr(CBEnde.ItemIndex)+#10);
    3: sql.add(' B4 = '+inttostr(CBBeginn.ItemIndex)+#10+
                ' E4 = '+inttostr(CBEnde.ItemIndex)+#10);
    4: sql.add(' B5 = '+inttostr(CBBeginn.ItemIndex)+#10+
                ' E5 = '+inttostr(CBEnde.ItemIndex)+#10);
    end;

    sql.add('WHERE'+#10+
            'Datum = date'''+dat+''';'+#10+
            'ELSE'+#10+
            'INSERT INTO Arbeitszeiten'+#10+
            '(B1,B2,b3,b4,b5,e1,e2,e3,e4,e5)'+#10+
            'VALUES'+#10+
            '(:b1,:b2,:b3,:b4,:b5,:e1,:e2,:e3,:e4,:e5);'+#10+
            ');');
    with Params do
    begin
      ParamByName('b1').AsInteger:=0;
      ParamByName('e1').AsInteger:=0;
      ParamByName('b2').AsInteger:=0;
      ParamByName('e2').AsInteger:=0;
      ParamByName('b3').AsInteger:=0;
      ParamByName('e3').AsInteger:=0;
      ParamByName('b4').AsInteger:=0;
      ParamByName('e4').AsInteger:=0;
      ParamByName('b5').AsInteger:=0;
      ParamByName('e5').AsInteger:=0;
      case Combobox1.ItemIndex of
      0: begin
           ParamByName('b1').AsInteger:=CBBeginn.ItemIndex*5+1;
           ParamByName('e1').AsInteger:=CBEnde.ItemIndex*5+1;
         end;
      1: begin
           ParamByName('b2').AsInteger:=CBBeginn.ItemIndex*5+1;
           ParamByName('e2').AsInteger:=CBEnde.ItemIndex*5+1;
         end;
      2: begin
           ParamByName('b3').AsInteger:=CBBeginn.ItemIndex*5+1;
           ParamByName('e3').AsInteger:=CBEnde.ItemIndex*5+1;
         end;
      3: begin
           ParamByName('b4').AsInteger:=CBBeginn.ItemIndex*5+1;
           ParamByName('e4').AsInteger:=CBEnde.ItemIndex*5+1;
         end;
      4: begin
           ParamByName('b5').AsInteger:=CBBeginn.ItemIndex*5+1;
           ParamByName('e5').AsInteger:=CBEnde.ItemIndex*5+1;
         end;
      end;
    end;
    execsql;
    Form1.SQLTransaction1.Commit;
  end;
Der meckert wie gesagt gleich beim If rum :(

Woran kann das liegen?

rwachtel 21. Jan 2010 19:50

Re: If-In SQL- aber wie?
 
Du hast den Link aber bis zum Ende gelesen? :mrgreen:

Teekeks 21. Jan 2010 19:54

Re: If-In SQL- aber wie?
 
schon, aber es müsste doch auch so gehen (es wurde ja nur geschrieben das dies nicht so schön ist und auf Schönheit kommt es bei mir nicht an :) ) oder hab ich noch was übersehen (mein Englisch ist ja nicht wirklich soo gut )? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:57 Uhr.
Seite 1 von 2  1 2      

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