AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Integerwert zur Laufzeit in eine SQL Abfrage einbauen
Thema durchsuchen
Ansicht
Themen-Optionen

Integerwert zur Laufzeit in eine SQL Abfrage einbauen

Ein Thema von sputum · begonnen am 30. Mai 2005 · letzter Beitrag vom 30. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
sputum

Registriert seit: 9. Jun 2004
Ort: Freiburg
15 Beiträge
 
Delphi 7 Professional
 
#1

Integerwert zur Laufzeit in eine SQL Abfrage einbauen

  Alt 30. Mai 2005, 00:43
Datenbank: Access • Version: 2003 • Zugriff über: ADO
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
  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
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#2

Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen

  Alt 30. Mai 2005, 00:48
datamodul.abfrage2.SQL.Add('SET pr_lagerbestand = '+IntToStr(pr_lagerbestand + addProdukt.nb_anzahl) );


edit... Eintrag berichtigt...



Schöne Grüße,
Jens
  Mit Zitat antworten Zitat
sputum

Registriert seit: 9. Jun 2004
Ort: Freiburg
15 Beiträge
 
Delphi 7 Professional
 
#3

Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen

  Alt 30. Mai 2005, 01:21
leider bekomme ich die Fehlermeldung

Undefinierter bezeichner: 'pr_lagerbestand'

datamodul.abfrage2.SQL.Add('SET pr_lagerbestand='+IntToStr(pr_lagerbestand + addProdukt.nb_anzahl)); 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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen

  Alt 30. Mai 2005, 02:39
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 ?

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".
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen

  Alt 30. Mai 2005, 05:52
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

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?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
sputum

Registriert seit: 9. Jun 2004
Ort: Freiburg
15 Beiträge
 
Delphi 7 Professional
 
#6

Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen

  Alt 30. Mai 2005, 12:53
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.

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
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#7

Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen

  Alt 30. Mai 2005, 13:14
[OT]...wie kommt man denn auf den nick sputum?
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen

  Alt 30. Mai 2005, 13:24
@jbg : also ehrlich

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 ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen

  Alt 30. Mai 2005, 14:06
Hai Hansa,

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

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 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 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
  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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
sputum

Registriert seit: 9. Jun 2004
Ort: Freiburg
15 Beiträge
 
Delphi 7 Professional
 
#10

Re: Integerwert zur Laufzeit in eine SQL Abfrage einbauen

  Alt 30. Mai 2005, 15:49
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:10 Uhr.
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