Icon View Incident Report

Serious Serious
Reported By: Ralf Mimoun
Reported On: 5/15/2002
For: Version 3.19 Build 1
# 1267 Using a Parameter Inside of the CAST Function in an UPDATE SQL Statement Does Not Work

I found a problem, and I don't know if it's me or DBISAM. I try to run a simple UPDATE on a table, setting some parameters. Unfortunately, DBISAM throws a #11949 error. I tested and re-tested my code, but I can't find the source of the problem. I've attached a demo application, one some lines of code and the table.

procedure TForm1.Button1Click(Sender: TObject);
const
  BestellungUpdate_SQL = 'UPDATE Bestellung' +
    ' SET' +
    '  MengeGeliefert = IF(MengeGeliefert = NULL THEN CAST(:MengeGeliefert AS DECIMAL(0 , 4)) ELSE CAST(MengeGeliefert + :MengeGeliefert AS DECIMAL(0 , 4))), ' 
+
    '  MengeVorgemerkt = IF(MengeVorgemerkt = NULL THEN CAST(:MengeVorgemerkt  AS DECIMAL(0 , 4)) ELSE CAST(MengeVorgemerkt + :MengeVorgemerkt AS DECIMAL(0 , 4))),' 
+
    '  MengeStorniert = IF(MengeStorniert = NULL THEN CAST(:MengeStorniert AS DECIMAL(0 , 4)) ELSE CAST(MengeStorniert + :MengeStorniert AS DECIMAL(0 , 4))), ' 
+
    '  MengeNichtLieferbar = IF(MengeNichtLieferbar = NULL THEN CAST(:MengeNichtLieferbar AS DECIMAL(0 , 4)) ELSE CAST(MengeNichtLieferbar + :MengeNichtLieferbar AS DECIMAL(0 , 4))), ' 
+
    '  LieferEingangID = :LieferEingangID,' +
    '  StatusID = :StatusID' +
    ' WHERE' +
    '  ID = :ID';
begin
  DBISAMQuery1.SQL.Text :=  BestellungUpdate_SQL;

  DBISAMQuery1.ParamByName('ID').AsInteger := 1;
  DBISAMQuery1.ParamByName('MengeGeliefert').AsFloat := 1;
  DBISAMQuery1.ParamByName('MengeVorgemerkt').AsCurrency := 1;
  DBISAMQuery1.ParamByName('MengeStorniert').AsCurrency := 1;
  DBISAMQuery1.ParamByName('MengeNichtLieferbar').AsCurrency := 1;
  DBISAMQuery1.ParamByName('LieferEingangID').AsInteger := 1;
  DBISAMQuery1.ParamByName('StatusID').AsInteger := 1;

  DBISAMQuery1.ExecSQL;
end;



Resolution Resolution
Fixed Problem on 11/1/2002 in version 3.20 build 1
Image