![]() |
Datenbank: Firebird • Version: 3.07 • Zugriff über: Delphi
Firebird mehrere where-Bedingungen
Ich versuche in eine (Firebird-)Tabelle Daten zurückzuschreiben, dazu nutze ich in Delphi (mit den Devart-Komponenten IBDAC):
with DM1.DataModule1.IBCVATNQuery do begin SQL.Clear; SQL.Add('update VATN set '); SQL.Add('RECHNUNG = :RECHNUNG, RENR = : RENR '); SQL.Add('where TEILNEHMERID = :OLD_TEILNEHMERID and VATNID = :OLD_VATNID'); Params[0].Value := 'T'; Params[1].Value := NewID; Params[2].Value := TNVAID; Params[3].Value := ReErstVAID; ExecSQL; Close; end; Da bekomme ich aber immer "Argument ausserhalb des Bereichs"???? Ich habe schon versucht, um die where-Klausel Klammern zu setzen, aber das war's wohl auch nicht...die Werte in den Parametern sind ok. Weiss jemand Rat? Hartmut |
AW: Firebird mehrere where-Bedingungen
Da ist dir ein Leerschlag dazwischen gekommen (RENR = : RENR)
Zitat:
|
AW: Firebird mehrere where-Bedingungen
Danke braunbaer!!! Grrrr, manchmal sieht man einfach den Wald vor lauter Bäumen nicht...
Hartmut |
AW: Firebird mehrere where-Bedingungen
Hallöle...:P
Zitat:
Besser:
Delphi-Quellcode:
Unterschied:
var
Query: TIBQuery; begin Query := DM1.DataModule1.IBCVATNQuery; Query.SQL.Text := 'update VATN set '; Query.SQL.Add('RECHNUNG = :RECHNUNG, RENR = :RENR '); Query.SQL.Add('where TEILNEHMERID = :OLD_TEILNEHMERID and VATNID = :OLD_VATNID'); Query.ParamsByName('RECHNUNG').AsString := 'T'; Query.ParamsByName('RENR').AsInteger := NewID; Query.ParamsByName('OLD_TEILNEHMERID').AsInteger := TNVAID; Query.ParamsByName('OLD_VATNID').AsInteger := ReErstVAID; Query.ExecSQL; end; 1. Der Debugger zeigt Werte an 2. AsXXXX kein cast nötig durch richtige Typen |
AW: Firebird mehrere where-Bedingungen
Hallo haentschman,
ich nutze gerne die von mir verwendete Schreibweise, da für mich übersichtlicher (oder auch Gewohnheit...) - was mich aber erstaunt: dann zeigt mir der Debugger Fehler innerhalb des SQL an? Wenn dem so ist, dann ist mir das neu. Werde ich mal testen... Hartmut |
AW: Firebird mehrere where-Bedingungen
Zitat:
|
AW: Firebird mehrere where-Bedingungen
Zitat:
Delphi-Quellcode:
bzw.
begin
... var Q := DM1.DataModule1.IBCVATNQuery; Q.SQL.Text := 'update VATN set '; Q.SQL.Add('RECHNUNG = :RECHNUNG, RENR = :RENR '); ...
Delphi-Quellcode:
var Q := DM1.DataModule1.IBCVATNQuery;
Q.SQL.Text := 'update VATN '#10 + 'set RECHNUNG = :RECHNUNG, RENR = :RENR '#10 + 'where TEILNEHMERID = :OLD_TEILNEHMERID and VATNID = :OLD_VATNID'; Q.ParamsByName('RECHNUNG').AsString := 'T'; Q.ParamsByName('RENR').AsInteger := NewID; Q.ParamsByName('OLD_TEILNEHMERID').AsInteger := TNVAID; Q.ParamsByName('OLD_VATNID').AsInteger := ReErstVAID; Q.ExecSQL; |
AW: Firebird mehrere where-Bedingungen
Hallöle...8-)
Um die Add oder die + #13 + Orgien zu entsorgen, kann man auch folgendes machen... ![]() |
AW: Firebird mehrere where-Bedingungen
Und obwohl das
Delphi-Quellcode:
optisch besser aussieht, ist das
var Q := DM1.DataModule1.IBCVATNQuery; begin
Q.SQL.Text := 'update VATN '#10 + 'set RECHNUNG = :RECHNUNG, RENR = :RENR '#10 + 'where TEILNEHMERID = :OLD_TEILNEHMERID and VATNID = :OLD_VATNID'; [...] Q.ExecSQL; end;
Delphi-Quellcode:
programmiertechnisch besser, denn es hält die Variable lokal zur Benutzung im Block.
begin var Q := DM1.DataModule1.IBCVATNQuery;
Q.SQL.Text := 'update VATN '#10 + 'set RECHNUNG = :RECHNUNG, RENR = :RENR '#10 + 'where TEILNEHMERID = :OLD_TEILNEHMERID and VATNID = :OLD_VATNID'; [...] Q.ExecSQL; end; Ich habe jetzt kein Delphi 10.4, aber ich nehme mal stark an, das "var" im begin-end Block ist auch nur in diesen Block gültig, oder nicht? |
AW: Firebird mehrere where-Bedingungen
Zitat:
Code:
Oder geht das nur bei Übergabe-Parametern ?
var Query: TIBQuery absolute DM1.DataModule1.IBCVATNQuery;
|
AW: Firebird mehrere where-Bedingungen
Das DM1.DataModule1.IBCVATNQuery ist nicht "eine" Variable, also geht absolute eh nicht.
Es ging nur darum das WITH loszuwerden und durch eine Variable zu ersetzen, egal ob local oder inline, wobei inline hier die "Definition" an der alten Stelle belässt. Mit Begin/End drumrum kann man den Gültigkeitsbereich noch weiter einschränken. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:25 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-2025 by Thomas Breitkreuz