Entwickler-Ecke

Datenbanken - sql anweisung zum schreiben in eine tabelle?


rushtone - Di 20.02.07 18:13
Titel: sql anweisung zum schreiben in eine tabelle?
Hi, ich hab mich grade gefragt ob man per sql in eine tabelle mehreren datensätzen auf einmal was reinschreiben kann?
wie genau verhält sich:


Delphi-Quelltext
1:
form15.Query1.sql.add('select distinct Datum from Einsätze.db where Added = ''' + 'Nein' + ''' AND Firma = ''' + form15.combobox1.text + ''' AND Baustelle = ''' + form15.combobox2.text + ''' ');                    

?

kann ich mir das wie in einem table vorstellen mit einem filter?

gibts einem befehl allen datensätzen die diesem kriterien entsprechen etwas zu ändern?
beispielsweise in meinem fall dem feld added den string ja zu zuweisen?

distinct ist allerdings bestimmt fehlam platze oder?
soll ja in allen datensätze die die kriterien erfüllen das feld added von 'nein' auf 'ja' geändert werden..


Moderiert von user profile iconKlabautermann: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 20.02.2007 um 18:25
Moderiert von user profile iconKlabautermann: Code- durch Delphi-Tags ersetzt


ZeitGeist87 - Di 20.02.07 18:15

Hallo!

Ja mit MySql geht das


SQL-Anweisung
1:
 Update Tabelle set Spalte = Wert where (select Spalten from Tabelle where Bedingung);                    


LG
Stefan


Martin1966 - Di 20.02.07 18:17
Titel: Re: sql anweisung zum schreiben in eine tabelle?
Ist ja gleil... dieser Hinweis das gerade jemand eine Antwort gegeben hat! :zustimm:

Ich weiß, das ist jetzt Off-Topic. Meine Begeisterung musste ich aber trotzdem los werden. ;-)

Lg Martin


rushtone - Di 20.02.07 18:26

user profile iconZeitGeist87 hat folgendes geschrieben:
Hallo!

Ja mit MySql geht das



LG
Stefan


hmm bin anfänger .. wie genau bitte?
query1.sql.add(Update Tabelle set Spalte = Wert where (select Spalten from Tabelle where Bedingung));

soo?

also so:

Delphi-Quelltext
1:
form15.Query1.SQL('Update Einsätze.db set Added = Ja where (select Added from Einsätze.db where Added = ''' + 'Nein' + ''' AND Firma = ''' + form15.combobox1.text + ''' AND Baustelle = ''' + form15.combobox2.text + '''AND Datum = ''' + form15.combobox3.text + ''' '));                    

gehts schonmal nicht..

Moderiert von user profile iconKlabautermann: Code- durch Delphi-Tags ersetzt


ZeitGeist87 - Di 20.02.07 18:39

verwendest du überhaupt MySQL`?


rushtone - Di 20.02.07 18:42

user profile iconZeitGeist87 hat folgendes geschrieben:
verwendest du überhaupt MySQL`?


benutze delphi und greife über ein query auf ne paradox tabelle zu..


ZeitGeist87 - Di 20.02.07 18:44

gut...wies da ausschaut weiß ich leider nicht...
bin leider kein spezialist für paradox...

aber hier gibts sicher jemanden der dir helfen kann...sorry..

aber mein vorschlag: Erst alle Daten holen die manipuliert werden sollen oder nur die ID und dann über ne Schleife das manipulierende Statement ausführen mit "... where ID = gemerkteID[n]";

LG
Stefan


Martin1966 - Di 20.02.07 18:52

Eine Select Anweisung INNERHALB einer Bedingung? Hab ich ja noch nie gesehen !?!?!

Mein Vorschlag:

SQL-Anweisung
1:
Update Tabelle set Spalte = Wert where Bedingung                    


Nicht mehr und nicht weniger. Damit kannst du auf einen Schlag bei mehreren Datensätzen einen oder mehrere Werte ändern.


ZeitGeist87 - Di 20.02.07 19:12

Ja richtig Martin
Eine SQL-Anweisung innerhalb einer SQL-Anweisung
Ist bei MySQL ohne Probleme möglich.


rushtone - Di 20.02.07 22:26

user profile iconMartin1966 hat folgendes geschrieben:
Eine Select Anweisung INNERHALB einer Bedingung? Hab ich ja noch nie gesehen !?!?!

Mein Vorschlag:

SQL-Anweisung
1:
Update Tabelle set Spalte = Wert where Bedingung                    


Nicht mehr und nicht weniger. Damit kannst du auf einen Schlag bei mehreren Datensätzen einen oder mehrere Werte ändern.



Quelltext
1:
form15.Query1.SQL.add('Update Einsätze.db set Added = Ja where Added = ''' + 'Nein' + ''' AND Firma = ''' + form15.combobox1.text + ''' AND Baustelle = ''' + form15.combobox2.text + '''AND Datum = ''' + form15.combobox3.text + ''' ');                    

so hab ichs nun, nun meckert auch delphi nicht mehr, aber es passiert rein gar nichts.
die einträge in der tabelle werden nicht geändert.


raiguen - Di 20.02.07 22:40

Moin :-)
Bei LocalSQL geht das auch:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
form15.Query1.SQL.Text := 'UPDATE Einsätze.db SET Added = "Ja" ' +
                  'WHERE Added IN ' +
                  '(SELECT Added FROM Einsätze.db WHERE (Added = "Nein") AND ' +
                  '       (Firma =:FIRMA) AND (Baustelle =:BAUST) AND (Datum =:DATUM ))';


form15.Query1.ParamByNAme('FIRMA').AsString := form15.combobox1.text;
form15.Query1.ParamByName('BAUST').AsString := form15.combobox2.text;
form15.Query1.ParamByName('DATUM').AsString :=form15.combobox3.text; //-->NUR dann, wenn das Datzumsfeld auch STring ist!
form15.Query1.ExecSQL;

Allerdings kann der o.a. Ausdruck m.E. vereinfacht werden:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
form15.Query1.SQL.Text := 'UPDATE Einsätze.db SET Added = "Ja" ' +
                  'WHERE (Added = "Nein") AND ' +
                         '(Firma =:FIRMA) AND (Baustelle =:BAUST) AND (Datum =:DATUM )';


form15.Query1.ParamByNAme('FIRMA').AsString := form15.combobox1.text;
form15.Query1.ParamByName('BAUST').AsString := form15.combobox2.text;
form15.Query1.ParamByName('DATUM').AsDateTime :=DateToStr(form15.combobox3.text); 
form15.Query1.ExecSQL;


rushtone - Di 20.02.07 23:32

user profile iconraiguen hat folgendes geschrieben:
Moin :-)
Bei LocalSQL geht das auch:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
form15.Query1.SQL.Text := 'UPDATE Einsätze.db SET Added = "Ja" ' +
                  'WHERE Added IN ' +
                  '(SELECT Added FROM Einsätze.db WHERE (Added = "Nein") AND ' +
                  '       (Firma =:FIRMA) AND (Baustelle =:BAUST) AND (Datum =:DATUM ))';


form15.Query1.ParamByNAme('FIRMA').AsString := form15.combobox1.text;
form15.Query1.ParamByName('BAUST').AsString := form15.combobox2.text;
form15.Query1.ParamByName('DATUM').AsString :=form15.combobox3.text; //-->NUR dann, wenn das Datzumsfeld auch STring ist!
form15.Query1.ExecSQL;

Allerdings kann der o.a. Ausdruck m.E. vereinfacht werden:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
form15.Query1.SQL.Text := 'UPDATE Einsätze.db SET Added = "Ja" ' +
                  'WHERE (Added = "Nein") AND ' +
                         '(Firma =:FIRMA) AND (Baustelle =:BAUST) AND (Datum =:DATUM )';


form15.Query1.ParamByNAme('FIRMA').AsString := form15.combobox1.text;
form15.Query1.ParamByName('BAUST').AsString := form15.combobox2.text;
form15.Query1.ParamByName('DATUM').AsDateTime :=DateToStr(form15.combobox3.text); 
form15.Query1.ExecSQL;


was genau passiert da jetzt bei deinem code?

ich möchte ja nur das feld added ändern, aber nur bei den datensätzen die die kriterien erfüllen..
sonst nix..
das hier hört sich gut an:
form15.Query1.SQL.add('Update Einsätze.db set Added = Ja where Added = ''' + 'Nein' + ''' AND Firma = ''' + form15.combobox1.text + ''' AND Baustelle = ''' + form15.combobox2.text + '''AND Datum = ''' + form15.combobox3.text + ''' ');
will nur wissen warum da nix passiert. es gibt keinen fehler es wird aber auch nichts geändert in der tabelle.
added ist anchwievor auf Nein, obwohl da ja jetzt eigentlich ja stehen sollte.


alzaimar - Di 20.02.07 23:32

user profile iconZeitGeist87 hat folgendes geschrieben:
Ja richtig Martin
Eine SQL-Anweisung innerhalb einer SQL-Anweisung
Ist bei MySQL ohne Probleme möglich.

Stimmt, in jedem anderen SQL-Dialekt auch... aber so
user profile iconZeitGeist87 hat folgendes geschrieben:


SQL-Anweisung
1:
 Update Tabelle set Spalte = Wert where (select Spalten from Tabelle where Bedingung);                    


nicht, eher so:

SQL-Anweisung
1:
2:
3:
4:
5:
Update Tabelle 
  set Spalte = Wert 
where DieseOderNeAndereSpalte in (
  select EineAndereSpalte from DieseOderNeAndereTabelle where Bedingung
  )


Delete - Di 20.02.07 23:37

user profile iconMartin1966 hat folgendes geschrieben:
Eine Select Anweisung INNERHALB einer Bedingung? Hab ich ja noch nie gesehen !?!?!
das ganze ist sogar normiert und net sich subselect. gehört glaub ich zum standard sql92 oder so...


Sinspin - Mi 21.02.07 00:39

Schonmal was von RequestLive (Eigenschaft von TQuery) gehört?

Auszug aus der Delphi Hilfe:[highlight]
Die Eigenschaft RequestLive fordert eine aktualisierbare Ergebnismenge von der Datenbank an.
[/highlight]


raiguen - Mi 21.02.07 12:35

user profile iconSinspin hat folgendes geschrieben:
Schonmal was von RequestLive (Eigenschaft von TQuery) gehört?..

Ähm, das ist zwar prinzipiell richtig, hat aber mit dem eigentlichen Problem des Fragestellers nichts zun tun.
RequestLive macht nur dann einen Sinn, wenn ich die Spalten einer Query mittels DBEdit editieren will/möchte und anschließend die Änderung(en) mit Query.Post abspeichern möchte...
In der Regel ist nämlich das Ergebnis einer Query ReadOnly - sprich NICHT direkt änderbar...

@rushtone:

user profile iconrushtone hat folgendes geschrieben:

das hier hört sich gut an:
form15.Query1.SQL.add('Update Einsätze.db set Added = Ja where Added = ''' + 'Nein' ...{weiterer COde))

Genau damit hast du ja anscheinend die 'Probleme', woraufhin ich einen entsprechend geänderten Code angegeben habe. Hast du selbigen denn mal ausgeführt?

HIER ist bereits ein deutlicher Unterschied zu erkennen:

Delphi-Quelltext
1:
2:
  //-- dein Codeschnippsel -->set Added = Ja 
  //-- mein Codeschnippsel -->SET Added = "Ja"

Du nimmst das Feld Ja und weist dessen Inhalt dem Feld Added zu! Sicher, dass in deiner Tabelle ein solches Feld existiert? Anscheinend ja, weil das Prog beim Ausführen des SQL nicht meckert...

user profile iconrushtone hat folgendes geschrieben:
ich möchte ja nur das feld added ändern, aber nur bei den datensätzen die die kriterien erfüllen..
sonst nix..

Wenn nichts geändert wird, dann scheinen die Kriterien nicht zu stimmen, will sagen: es gibt keine Datensätze, die den Bedingungen entsprechen, also wird dann auch nichts geändert.
Vergleiche händisch, ob bspw. die Combobox-Einträge zu Firma, Baustelle auch exact den Einträgen in deiner Tabelle entsprechen-sind unterschiedliche Schreibweisen enthalten?...


rushtone - Mi 21.02.07 19:16

user profile iconraiguen hat folgendes geschrieben:
user profile iconSinspin hat folgendes geschrieben:
Schonmal was von RequestLive (Eigenschaft von TQuery) gehört?..

Ähm, das ist zwar prinzipiell richtig, hat aber mit dem eigentlichen Problem des Fragestellers nichts zun tun.
RequestLive macht nur dann einen Sinn, wenn ich die Spalten einer Query mittels DBEdit editieren will/möchte und anschließend die Änderung(en) mit Query.Post abspeichern möchte...
In der Regel ist nämlich das Ergebnis einer Query ReadOnly - sprich NICHT direkt änderbar...

@rushtone:

user profile iconrushtone hat folgendes geschrieben:

das hier hört sich gut an:
form15.Query1.SQL.add('Update Einsätze.db set Added = Ja where Added = ''' + 'Nein' ...{weiterer COde))

Genau damit hast du ja anscheinend die 'Probleme', woraufhin ich einen entsprechend geänderten Code angegeben habe. Hast du selbigen denn mal ausgeführt?

HIER ist bereits ein deutlicher Unterschied zu erkennen:

Delphi-Quelltext
1:
2:
  //-- dein Codeschnippsel -->set Added = Ja 
  //-- mein Codeschnippsel -->SET Added = "Ja"

Du nimmst das Feld Ja und weist dessen Inhalt dem Feld Added zu! Sicher, dass in deiner Tabelle ein solches Feld existiert? Anscheinend ja, weil das Prog beim Ausführen des SQL nicht meckert...

user profile iconrushtone hat folgendes geschrieben:
ich möchte ja nur das feld added ändern, aber nur bei den datensätzen die die kriterien erfüllen..
sonst nix..

Wenn nichts geändert wird, dann scheinen die Kriterien nicht zu stimmen, will sagen: es gibt keine Datensätze, die den Bedingungen entsprechen, also wird dann auch nichts geändert.
Vergleiche händisch, ob bspw. die Combobox-Einträge zu Firma, Baustelle auch exact den Einträgen in deiner Tabelle entsprechen-sind unterschiedliche Schreibweisen enthalten?...


nee die schreibweise und alles ist gleich. ich hab die werte aus der datenbank ja aus der tabelle übernommen..

der code hier:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  form15.Query1.SQL.Text := 'UPDATE Einsätze.db SET Added = "Ja" ' +
                  'WHERE (Added = "Nein") AND ' +
                         '(Firma =:FIRMA) AND (Baustelle =:BAUST) AND (Datum =:DATUM )';


form15.Query1.ParamByNAme('FIRMA').AsString := form15.combobox1.text;
form15.Query1.ParamByName('BAUST').AsString := form15.combobox2.text;
form15.Query1.ParamByName('DATUM').AsDateTime :=Strtodate(form15.combobox3.text);
form15.Query1.ExecSQL;


funktioniert einwandfrei, wobei ich lieber diese variante genommen hätte..
form15.Query1.SQL.add('Update Einsätze.db set Added = Ja where Added = ''' + 'Nein' ...{weiterer COde))
aber die geht ja leider irgendwie nicht..

kann mir kurz jemand in einfachen worten erklären was der code oben (der funktioniert) macht?
ich benutze nämlich nciht gerne code wen ich nicht weiß was der macht..
ich will ja auch nicht alle nase lang hier fragen, sondern ich wills verstehen um den code für das nächste problem das ich habe selbst umfriemeln zu können.

und @raiquen: nein ich habe kein feld ja..
nur das feld added und in dieses feld soll ja reingeschrieben werden..

sorry für das ganze heckmeck, aber bin echt nur hobbyprogrammierer und hab mir das alles selbst angeeignet was ich bisher kann..
und dafür bin ich gar nicht mal schlecht. und da dachte ich ich schreib für meine firma mal nen eigenes rechnungsproggi.
Vielen dank für die hilfe ohne euch wär ich wohl verloren.


raiguen - Do 22.02.07 01:15


Quelltext
1:
2:
3:
form15.Query1.SQL.Text := 'UPDATE Einsätze.db SET Added = "Ja" ' +
                          'WHERE (Added = "Nein") AND ' +
                          '(Firma =:FIRMA) AND (Baustelle =:BAUST) AND (Datum =:DATUM )';

Okay, hier einige Erklärungen:
Zunächst wird das SQL-Statement aufgebaut, wobei hier Parameter (also Platzhalter) verwendet werden; das vereinfacht zum einen die Schreibweise und vermeidet die Hochkomma-Orgie wie in deinem Code...
Natürlich muss der o.a. SQL-Rumpf noch mit Werten gefüllt werden, sprich die Parameter werden 'gefüttert'; und das geht mit der Methode .ParamByName(Parametername).AsTyp:

Quelltext
1:
2:
3:
4:
form15.Query1.ParamByNAme('FIRMA').AsString := form15.combobox1.text;
form15.Query1.ParamByName('BAUST').AsString := form15.combobox2.text;
form15.Query1.ParamByName('DATUM').AsDateTime :=Strtodate(form15.combobox3.text);
form15.Query1.ExecSQL;

Zitat:

und @raiquen: nein ich habe kein feld ja..
nur das feld added und in dieses feld soll ja reingeschrieben werden..

Genau das habe ich befürchtet (Kein Feld mit der Bezeichnung Ja) ;-) Delphi hätte hier aber beim Ausführen des Statements meckern müssen (...unbekanntes Feld Ja...) :gruebel:
Das Feld Added ist ja vom Typ ftString, also muss auch die Zuweisung so geschrieben werden (sh. mein Code!): SET Added=''Ja''... :!: Übrigens: bei LocalSQL darf man für StringWerte auch so schreiben SET Added="Ja"...

Wenn du lieber mit deinem Code arbeiten möchtest, bitte sehr (habe ihn mal übersichtlicher gestaltet):

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
form15.Query1.SQL.Clear;  //-- auf jeden fall machen, da sonst immer wieder neur Code angehängt wird!!
form15.Query1.SQL.Add('Update Einsätze.db set Added = "Ja" ');
form15.Query1.SQL.Add('WHERE (Added = "Nein") AND (Firma = "' + form15.combobox1.text + '") ');
form15.Query1.SQL.Add('AND (Baustelle = "' + form15.combobox2.text + '") ');
form15.Query1.SQL.Add('AND (Datum = "' + form15.combobox3.text + '") '); 
form15.Query1.ExecSQL;

Bei mehreren Kriterien in einer WHERE-Klauses empflieht es sich, die einzelen Bedingungen in Klammern zu umschließen...spätestens dann, wenn AND und OR gemischt auftauchen.

So, nun teste mal bitte meinen (deinen angepassten) Code; würd sagen: selbiger funktioniert genaus wie meiner mit den Parametern...


alzaimar - Do 22.02.07 09:30

Ich würde -wenn überhaupt- die 'Format' Funktion verwenden. Dann wird das noch übersichtlicher (finde ich):

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Const
  szUpdateSQL = 'Update Einsötze.db set Added = "Ja" where (Added = "Nein") '
               +'and (Firma = "%s") and (Baustelle="%s") and (Datum="%s")';

Begin
...
  With Form15, Query1 do Begin
    SQL.Text := Format (szUpdateSQL, [combobox1.text, combobox2.text,combobox3.text]);
    ExecSQL;
  End
...

Kurze Frage: Das 'Datum' enthält Datum UND Uhrzeit? Dann klappt das nämlich nicht. Verwende dann 'BETWEEN', also 'Datum liegt zwischen Datum1 und Datum1+1'


raiguen - Do 22.02.07 10:44

user profile iconalzaimar hat folgendes geschrieben:
Ich würde -wenn überhaupt- die 'Format' Funktion verwenden. Dann wird das noch übersichtlicher (finde ich)...

Das ist eine weitere gute Möglichkeit, die Übersichtlichkeit des Codes zu verbessern - keine Frage! Gegenüber der Hochkomma-Orgie auf jeden Fall vorzuziehen...

user profile iconalzaimar hat folgendes geschrieben:
Kurze Frage: Das 'Datum' enthält Datum UND Uhrzeit? Dann klappt das nämlich nicht. Verwende dann 'BETWEEN', also 'Datum liegt zwischen Datum1 und Datum1+1'

Auch hier stimme ich insofern zu, dass das Datums'handling' nicht immer einfach ist, speziel dann, wenn die Zeit noch irgendwie mit reinspielt ;-)
rushtone hat ja aber selber gesagt, dass sein Code NICHT funktioniert, während mein Codeschnippsel brauchbare Ergebnisse abgeliefert hat (wenn ich ihn richtig verstanden habe)


rushtone - Do 22.02.07 19:37

So also, den code werd ich die tage mal testen, obs geht..

aber ich hab grad noch ein anderes problem..

ich habe combobox3 da steht ja ein datum drin und ich hab noch ne combobox4 da steht auch ein datum drin..
und zwar:
combobox3=anfangs datum
combobox4=end datum

nun möchte ich die sql anweisung noch etwas ergänzen und zwar mit allen datensätzen die zwischen dem anfangs und dem enddatum liegen..
wie kann ich das in die sql anweisung einfügen?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  form15.Query1.SQL.Text := 'UPDATE Einsätze.db SET Added = "Ja" ' +
                  'WHERE (Added = "Nein") AND ' +
                         '(Firma =:FIRMA) AND (Baustelle =:BAUST) BETWEEN (Datum =:DATUM ) AND (Datum =:DATUM2 )';


form15.Query1.ParamByNAme('FIRMA').AsString := form15.combobox1.text;
form15.Query1.ParamByName('BAUST').AsString := form15.combobox2.text;
form15.Query1.ParamByName('DATUM').AsDateTime :=Strtodate(form15.combobox3.text);
form15.Query1.ParamByName('DATUM2').AsDateTime :=Strtodate(form15.combobox4.text);
form15.Query1.ExecSQL;


so gehts schonmal nicht.. :(
da kommt dann ein fehler wegen dem between.. unzulässiger string oder so.

so und dann würde mich noch interessieren wie man dann die datensätze die mann da bekommt in eine andere tabelle einfügt..
in rechnungen.db in meinem falle.. (also alle datensätze die dann added 'ja' sind, die sollen in rechnungen.db übernommen werden..)
allerdings möchte ich nur 2 felder übernehmen Firma und Baustelle.


danke schonmal :)

Moderiert von user profile iconKlabautermann: Code- durch Delphi-Tags ersetzt


rushtone - Sa 24.02.07 19:12

weiß denn niemand wie das geht?


Delete - Sa 24.02.07 19:32

die hilfe schreibt z.b. so etwas: "WHERE (Saledate BETWEEN "1/1/1988" AND "12/31/1988")" vielleicht solltest du dein sql statement mal überprüfen. ausserm liefert deine UPDATE anweisung keine rows zurück. aber ich geb dir mal 'n tipp, in der hilfe unter insert --> subselect gibts sicher 'n beispiel wie das geht.

noch 'n tipp: einfach mal in der hilfe nachschlagen :-)


rushtone - So 25.02.07 00:01

user profile iconGrenzgaenger hat folgendes geschrieben:
die hilfe schreibt z.b. so etwas: "WHERE (Saledate BETWEEN "1/1/1988" AND "12/31/1988")" vielleicht solltest du dein sql statement mal überprüfen. ausserm liefert deine UPDATE anweisung keine rows zurück. aber ich geb dir mal 'n tipp, in der hilfe unter insert --> subselect gibts sicher 'n beispiel wie das geht.

noch 'n tipp: einfach mal in der hilfe nachschlagen :-)


hab ich doch ohne ende sogar..

also ich habs jetzt zwar hinbekommen, aber ohne parameter. wobei ich lieber parameter verwenden würde..

funktioniert:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
 form15.Query1.SQL.Text := 'UPDATE Einsätze.db SET Added = "Ja" ' +
                  'WHERE (Added = "Nein") AND ' +
                     '(Firma =:FIRMA) AND (Baustelle =:BAUST) AND Datum BETWEEN '+quotedstr(form15.combobox3.text)+' AND '+quotedstr(form15.combobox4.text)+' '; 
                       


form15.Query1.ParamByNAme('FIRMA').AsString := form15.combobox1.text;
form15.Query1.ParamByName('BAUST').AsString := form15.combobox2.text;
form15.Query1.ExecSQL;


aber hätte es lieber so:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
 form15.Query1.SQL.Text := 'UPDATE Einsätze.db SET Added = "Ja" ' +
                  'WHERE (Added = "Nein") AND ' +
                         '(Firma =:FIRMA) AND (Baustelle =:BAUST) AND Datum BETWEEN "(Datum=:DATUM)" AND "(Datum=:DATUM2)"'; 
                     


form15.Query1.ParamByNAme('FIRMA').AsString := form15.combobox1.text;
form15.Query1.ParamByName('BAUST').AsString := form15.combobox2.text;
form15.Query1.ParamByName('DATUM').Asdate :=strtodate(form15.combobox3.text);
//form15.Query1.ParamByName('DATUM2').value :=strtodate(form15.combobox4.text);
form15.Query1.ExecSQL;


nur diese variante geht so leider nicht weil durch das " die parameter nicht mehr als solche erkannt werden..


Delete - So 25.02.07 01:15

user profile iconraiguen hat folgendes geschrieben:
Genau das habe ich befürchtet (Kein Feld mit der Bezeichnung Ja) ;-) Delphi hätte hier aber beim Ausführen des Statements meckern müssen (...unbekanntes Feld Ja...) :gruebel:

delphi meckert nicht, bei 'n string, da es nicht weiss wie dieser zu interpretieren ist... daher kannste alles reinschreiben wozu du lust und laune hast...

user profile iconrushtone hat folgendes geschrieben:
also ich habs jetzt zwar hinbekommen, aber ohne parameter. wobei ich lieber parameter verwenden würde..funktioniert:

Quelltext
1:
2:
3:
 form15.Query1.SQL.Text := 'UPDATE Einsätze.db SET Added = "Ja" ' +
                  'WHERE (Added = "Nein") AND ' +
                     '(Firma =:FIRMA) AND (Baustelle =:BAUST) AND Datum BETWEEN '+quotedstr(form15.combobox3.text)+' AND '+quotedstr(form15.combobox4.text)+' ';


dann schreib es doch so, dass es delphi interpretieren kann...

SQL-Anweisung
1:
2:
3:
4:
5:
UPDATE Einsätze.db SET Added = "Ja" 
  WHERE (Added = "Nein"
    AND (Firma =:FIRMA) 
    AND (Baustelle =:BAUST) 
    AND Datum BETWEEN :d1 AND :d2;


Delete - So 25.02.07 01:16

.