Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Integerwert zur Laufzeit in eine SQL Abfrage einbauen (https://www.delphipraxis.net/46698-integerwert-zur-laufzeit-eine-sql-abfrage-einbauen.html)

sputum 30. Mai 2005 01:43

Datenbank: Access • Version: 2003 • Zugriff über: ADO

Integerwert zur Laufzeit in eine SQL Abfrage einbauen
 
Hallo

ich habe das Problem, dass ich eine Integervariable zur Laufzeit in eine SQL Abfrage einbauen will

addProdukt.nb_anzahl : vom Typ Integer;

Delphi-Quellcode:
  datamodul.abfrage2.SQL.Clear;
  datamodul.abfrage2.SQL.Add('UPDATE prreifen');
  datamodul.abfrage2.SQL.Add('SET pr_lagerbestand = pr_lagerbestand + addProdukt.nb_anzahl');
  datamodul.abfrage2.SQL.Add('WHERE prtyp LIKE "' + addProdukt.nb_prodtype + '"');
  datamodul.abfrage2.SQL.Add('and prler LIKE "' + addProdukt.nb_hersteller + '"');
  datamodul.abfrage2.SQL.Add('and prtyp LIKE "' + addProdukt.nb_wetter + '"');
  datamodul.abfrage2.SQL.Add('and prus LIKE "' + addProdukt.nb_status + '"');
  datamodul.abfrage2.SQL.Add('and prge LIKE "' + addProdukt.nb_geschklasse + '"');
  datamodul.abfrage2.ExecSQL;
dass ist der gesamte code und wenn ich in die zweite Zeile wie folgt schreibe
Delphi-Quellcode:
  datamodul.abfrage2.SQL.Add('SET pr_lagerbestand = 0');
dann greift er schon auf den richtigen Datensatz zu und schreibt die "0" rein.
Ich will aber wie im obigen Beispiel den Lagerbestand neu berechnen, nur nimmt er "addProdukt.nb_anzahl" nicht!

Habe schon eine Weile gesucht und ausprobiert, nur bin ich leider nicht darauf gekommen wie es geht! Kann mir ielleicht jemand helfen?

Vielen Dank im Voraus

Sputum

jensw_2000 30. Mai 2005 01:48

Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen
 
datamodul.abfrage2.SQL.Add('SET pr_lagerbestand = '+IntToStr(pr_lagerbestand + addProdukt.nb_anzahl) );


edit... Eintrag berichtigt...


:hi:
Schöne Grüße,
Jens

sputum 30. Mai 2005 02:21

Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen
 
leider bekomme ich die Fehlermeldung

Undefinierter bezeichner: 'pr_lagerbestand'

Delphi-Quellcode:
datamodul.abfrage2.SQL.Add('SET pr_lagerbestand='+IntToStr(pr_lagerbestand + addProdukt.nb_anzahl));
Delphi-Quellcode:
datamodul.abfrage2.SQL.Add('SET pr_lagerbestand=pr_lagerbestand + 1');
so erhöht er mir den vorhandenen Wert um eins! Aber ich will ja den vorhandenen mit der Delphi Variablen "addProdukt.nb_anzahl" addieren!

Das Feld pr_lagerbestand sowie die Variable addProdukt.nb_anzahl sind doch om Typ Zahl bzw.Integer, warum dann IntToStr???

Hast Du vielleicht noch eine Idee???

Aber Danke schon einmal für Deine Bemühungen!

Sax

Hansa 30. Mai 2005 03:39

Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen
 
Delphi-Quellcode:
IntToStr(pr_lagerbestand + addProdukt.nb_anzahl) );
Das geht so auch nicht. pr_lagerbestand und auch addProdukt.nb_anzahl dürfte unbekannt für das Programm sein. Du mußt Delphi mitteilen, daß das ganze aus der DB kommt. Also z.B. pr_lagerbestand. Da kommst du so dran : das IntToStr ist überflüssig und der Wert ?

Delphi-Quellcode:
p := Dataset.FieldByName ('pr_lagerbestand').AsInteger;
p enthielte dann den Feldwert als integer und kann addiert usw. werden. Allerdings schlage ich dir vor, einen Satz an Funktionen zu schreiben. Also für die ganzen Datentypen. Bei mir gibts z.B. folgendes :
Delphi-Quellcode:
function LeseIntFeld (d : TDataSet;st : string) : integer;
begin
  LeseIntFeld := d.FieldByName(st).AsInteger;
end;
Leider mußte ich das da stark verkürzen. Die NULL-Werte müssen da noch abgehandelt werden und einiges andere. 8) Wie man erkennen kann, ist das jetzt über Parameter zu steuern und liefert auch den gewünschten Typ gleich zurück. Dann gibt es noch ähnliche Geschichten, die einen String zurückliefern usw. Wer weiß ? Eventuell wird der Wert in einem Stringgrid als string erwartet. Dann hole ich mir den lieber gleich mit "AsString".

Sharky 30. Mai 2005 06:52

Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen
 
Zitat:

Zitat von sputum
...ich habe das Problem, dass ich eine Integervariable zur Laufzeit in eine SQL Abfrage einbauen will ...

Hai sputum,

wenn Werte in eine SQL-Abfrage müssen würde ich dort grundsätzlich mit Prarametern arbeiten.
Versuche es mal so:
Delphi-Quellcode:
  with datamodul.abfrage2 do
  begin
    SQL.Text := 'UPDATE prreifen' + #10
              + 'SET pr_lagerbestand = pr_lagerbestand + :wert' + #10
              + 'WHERE prtyp LIKE ":prtpy"' + #10
              + 'AND prler LIKE ":prler"' + #10
              + 'AND prtyp LIKE ":prtyp2"' + #10
              + 'AND prus LIKE ":prus"' + #10
              + 'AND prge LIKE ":prge"';
    with Parameters do // Parameter zuweisen
    begin
      ParamCheck := True;
      ParamByName('wert').Value := addProdukt.nb_anzahl;
      ParamByName('prtype').Value := addProdukt.nb_prodtype;
      ParamByName('prler').Value := addProdukt.nb_hersteller;
      ParamByName('prtype2').Value := addProdukt.nb_wetter;
      ParamByName('prus').Value := addProdukt.nb_status;
      ParamByName('prge').Value := addProdukt.nb_geschklasse;
    end;
    ExecSQL;
  end;
Aber noch einige Anmerkungen :stupid:

a) Du machst deine "WHERE-Bedinungen" alle mit LIKE. Da Du aber einen kompletten String und keine "Platzhalter" übergibst kannst Du auch mit feld = bedingung arbeiten.

b) Du hast zweimal das Feld prtyp in deiner Abfrage. Durch den Operator AND verhinderst Du damit ja das ein Datensatz gefunden werden kann

c) Warum ist die WHERE-Bedingung denn so lange? Gibt es keine eindeutigere Bedingung für dein Update?

sputum 30. Mai 2005 13:53

Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen
 
danke erst einmal an alle für die Bemühungen...

ich werde dass mit den Parametern mal ausprbieren, mir kam gestern Nacht auch moch eine andere Idee die auch Funktioniert.

Delphi-Quellcode:
datamodul.abfrage2.SQL.Add('SET pr_lagerbestand=pr_lagerbestand+ "' + sbestand +'"');
hier ist "sbestand" vom typ string und nicht mehr wie zu erst ausprobiert vom typ integer!

Gruß


Sputum

ibp 30. Mai 2005 14:14

Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen
 
[OT]...wie kommt man denn auf den nick sputum? :roll:

Hansa 30. Mai 2005 14:24

Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen
 
@jbg : also ehrlich :mrgreen:

Mein letzter Beitrag wurde wohl einfach ignoriert. Natürlich liegt es an den Typen. Insbesondere aber an dem FieldByName, das auch übersehen wurde. 8) Warum schreibe ich überhaupt was ? :gruebel:

Sharky 30. Mai 2005 15:06

Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen
 
Hai Hansa,

deine Beitäge sagen mir, wie so oft *g*, mal wieder überhaupt nichts.

Zitat:

Zitat von Hansa
@... Natürlich liegt es an den Typen. Insbesondere aber an dem FieldByName, das auch übersehen wurde. ...

Von welchem FieldByName redest Du denn hier? Von dem in deinem Posting? Wofür soll das gut sein?

Zitat:

Zitat von Hansa
.. Das geht so auch nicht. pr_lagerbestand und auch addProdukt.nb_anzahl dürfte unbekannt für das Programm sein.

Und genau darüber steht
Zitat:

Zitat von sputum
... Das Feld pr_lagerbestand sowie die Variable addProdukt.nb_anzahl ...

Daraus ist doch wohl zu schliessen das addProdukt ein Record oder eine Klasse ist welche eine Variable nb_anzahl hat.
Also muss ich da auch nichts aus der Datenbank holen.

Letztendlich ist den dem ersten Code von sputum doch nur ein kleiner Fehler den jeder sofort gesehen haben muss :gruebel:
Delphi-Quellcode:
  datamodul.abfrage2.SQL.Add('SET pr_lagerbestand = pr_lagerbestand + addProdukt.nb_anzahl');
Hier muss natürlich der Wert von addProdukt.nb_anzahl in einen String gewandelt werden bevor es in den SQL-Befehl eingebunden wird.
Trotzdem würde ich, wie schon gesagt, grundsätzlich mit Parametern arbeiten.

sputum 30. Mai 2005 16:49

Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen
 
sorry hansa, dass ich nicht explizit auf deinen beitrag eingegangen bin, hatte meine lösung schon direkt in der nacht....
werde mir allerdings jetzt mal alle beiträge genau anschauen, vielleicht sind eurelösungen ja besser wie meine...

auf die frage, wie ich auf sputum komme habe ich nur gewartet...naja ich komme aus der laborbranche für medizinische diagnostik....´sputum hat auch sonst niemand und da die meisten nicht wissen was sich dahinter verbirgt, hab ich gedacht den nehme ich



gruß

Sputum


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:35 Uhr.
Seite 1 von 2  1 2      

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