![]() |
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;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 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