![]() |
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:
dass ist der gesamte code und wenn ich in die zweite Zeile wie folgt schreibe
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;
Delphi-Quellcode:
dann greift er schon auf den richtigen Datensatz zu und schreibt die "0" rein.
datamodul.abfrage2.SQL.Add('SET pr_lagerbestand = 0');
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 |
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 |
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:
so erhöht er mir den vorhandenen Wert um eins! Aber ich will ja den vorhandenen mit der Delphi Variablen "addProdukt.nb_anzahl" addieren!
datamodul.abfrage2.SQL.Add('SET pr_lagerbestand=pr_lagerbestand + 1');
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 |
Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen
Delphi-Quellcode:
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 ?
IntToStr(pr_lagerbestand + addProdukt.nb_anzahl) );
Delphi-Quellcode:
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 :
p := Dataset.FieldByName ('pr_lagerbestand').AsInteger;
Delphi-Quellcode:
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".
function LeseIntFeld (d : TDataSet;st : string) : integer;
begin LeseIntFeld := d.FieldByName(st).AsInteger; end; |
Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen
Zitat:
wenn Werte in eine SQL-Abfrage müssen würde ich dort grundsätzlich mit Prarametern arbeiten. Versuche es mal so:
Delphi-Quellcode:
Aber noch einige Anmerkungen :stupid:
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; 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? |
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:
hier ist "sbestand" vom typ string und nicht mehr wie zu erst ausprobiert vom typ integer!
datamodul.abfrage2.SQL.Add('SET pr_lagerbestand=pr_lagerbestand+ "' + sbestand +'"');
Gruß Sputum |
Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen
[OT]...wie kommt man denn auf den nick
![]() |
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: |
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:
Zitat:
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:
Hier muss natürlich der Wert von addProdukt.nb_anzahl in einen String gewandelt werden bevor es in den SQL-Befehl eingebunden wird.
datamodul.abfrage2.SQL.Add('SET pr_lagerbestand = pr_lagerbestand + addProdukt.nb_anzahl');
Trotzdem würde ich, wie schon gesagt, grundsätzlich mit Parametern arbeiten. |
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. |
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