AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Firebird mehrere where-Bedingungen
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird mehrere where-Bedingungen

Ein Thema von harfes · begonnen am 27. Sep 2021 · letzter Beitrag vom 30. Sep 2021
Antwort Antwort
Seite 1 von 2  1 2      
harfes

Registriert seit: 25. Jun 2006
Ort: Rand der Scheibe
197 Beiträge
 
Delphi 12 Athens
 
#1

Firebird mehrere where-Bedingungen

  Alt 27. Sep 2021, 12:06
Datenbank: Firebird • Version: 3.07 • Zugriff über: Delphi
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
Hartmut
  Mit Zitat antworten Zitat
braunbaer

Registriert seit: 15. Okt 2008
Ort: Vorarlberg
118 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Firebird mehrere where-Bedingungen

  Alt 27. Sep 2021, 12:08
Da ist dir ein Leerschlag dazwischen gekommen (RENR = : RENR)
SQL.Add('RECHNUNG = :RECHNUNG, RENR = : RENR ');
Gebhard Blank
  Mit Zitat antworten Zitat
harfes

Registriert seit: 25. Jun 2006
Ort: Rand der Scheibe
197 Beiträge
 
Delphi 12 Athens
 
#3

AW: Firebird mehrere where-Bedingungen

  Alt 27. Sep 2021, 12:37
Danke braunbaer!!! Grrrr, manchmal sieht man einfach den Wald vor lauter Bäumen nicht...

Hartmut
Hartmut
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#4

AW: Firebird mehrere where-Bedingungen

  Alt 27. Sep 2021, 13:06
Hallöle...
Zitat:
manchmal sieht man einfach den Wald vor lauter Bäumen nicht...
..das hättest du bestimmt im Debugger gesehen (SQL.Text) ...ach nein, der Debugger zeigt das durch das WITH nichts an.

Besser:
Delphi-Quellcode:
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;
Unterschied:
1. Der Debugger zeigt Werte an
2. AsXXXX kein cast nötig durch richtige Typen

Geändert von haentschman (27. Sep 2021 um 13:10 Uhr)
  Mit Zitat antworten Zitat
harfes

Registriert seit: 25. Jun 2006
Ort: Rand der Scheibe
197 Beiträge
 
Delphi 12 Athens
 
#5

AW: Firebird mehrere where-Bedingungen

  Alt 27. Sep 2021, 13:38
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
Hartmut
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#6

AW: Firebird mehrere where-Bedingungen

  Alt 27. Sep 2021, 14:10
Zitat:
dann zeigt mir der Debugger Fehler innerhalb des SQL
Der Debugger zeigt dir den SQL.Text oder den Parameterinhalt an wenn du mit der Maus darübergehst. Logische SQL Fehler kann der gar nicht wissen...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#7

AW: Firebird mehrere where-Bedingungen

  Alt 27. Sep 2021, 15:02
Zitat:
Delphi-Quellcode:
var
  Query: TIBQuery;
begin
  ...
  Query := DM1.DataModule1.IBCVATNQuery;
  Query.SQL.Text := 'update VATN set ';
  ...
Geht ja jetzt auch so, als Ersatz für ein WITH:
Delphi-Quellcode:
begin
  ...
  var Q := DM1.DataModule1.IBCVATNQuery;
  Q.SQL.Text := 'update VATN set ';
  Q.SQL.Add('RECHNUNG = :RECHNUNG, RENR = :RENR ');
  ...
bzw.
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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (27. Sep 2021 um 15:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#8

AW: Firebird mehrere where-Bedingungen

  Alt 30. Sep 2021, 08:55
Hallöle...

Um die Add oder die + #13 + Orgien zu entsorgen, kann man auch folgendes machen... https://www.delphipraxis.net/49505-s...einbinden.html
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
591 Beiträge
 
Delphi XE6 Enterprise
 
#9

AW: Firebird mehrere where-Bedingungen

  Alt 30. Sep 2021, 09:47
Und obwohl das
Delphi-Quellcode:
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;
optisch besser aussieht, ist das
Delphi-Quellcode:
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;
programmiertechnisch besser, denn es hält die Variable lokal zur Benutzung im Block.

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

Registriert seit: 19. Okt 2003
Ort: Heilbronn
675 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Firebird mehrere where-Bedingungen

  Alt 30. Sep 2021, 11:45
Zitat:
Delphi-Quellcode:
var
  Query: TIBQuery;
begin
  ...
  Query := DM1.DataModule1.IBCVATNQuery;
  Query.SQL.Text := 'update VATN set ';
  ...
Sollte da nicht auch ein absolute gehen ?

Code:
var Query: TIBQuery absolute DM1.DataModule1.IBCVATNQuery;
Oder geht das nur bei Übergabe-Parametern ?
  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 00:51 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