Page 1 of 1

6.3.12 / batch operation issue "Array index out of range"

Posted: Fri 20 May 2016 12:20
by swierzbicki
I'm getting "Array index out of range" when running such code. It looks like array used for batch updates ins't updated when SQL property is changed.

Code: Select all

  try
    for AMember in x.A['articles'] do
    begin

      Qry.SQL.Text := sqlStockArticlesDelete;
      Qry.Params[0].DataType := ftString;
      Qry.Params[1].DataType := ftString;
      Qry.Params[0].AsString := AMember.AsObject.S['gencod_art'];
      Qry.Params[1].AsString := AMember.AsObject.S['code_art'];
      Qry.Execute; <====  error occurs on the 2nd loop. Looks like array isn't initialized after changing the SQL property.


      Qry.SQL.Text := sqlStockArticlesInsert;
      Qry.Params[0].DataType := ftString;
      Qry.Params[1].DataType := ftString;
      Qry.Params[2].DataType := ftString;
      Qry.Params[3].DataType := ftInteger;
      Qry.Params[4].DataType := ftFloat;
      Qry.Params[0].AsString := AMember.AsObject.S['lib_art'];
      Qry.Params[1].AsString := AMember.AsObject.S['gencod_art'];
      Qry.Params[2].AsString := AMember.AsObject.S['code_art'];
      Qry.Params[3].AsInteger := AMember.AsObject.i['colisage'];
      Qry.Params[4].asfloat := AMember.AsObject.f['stock'];
      Qry.Execute;

      if AMember.AsObject.A['artDetail'].Length >= 1 then
      begin

        Qry.SQL.Text := sqlStockArticlesDetailInsert;
        Qry.Params[0].DataType := ftString;
        Qry.Params[1].DataType := ftString;
        Qry.Params[2].DataType := ftString;
        Qry.Params[3].DataType := ftString;
        Qry.Params[4].DataType := ftString;
        Qry.Params[5].DataType := ftInteger;

        Qry.Params.ValueCount := AMember.AsObject.A['artDetail'].Length;

        for i := 0 to Qry.Params.ValueCount - 1 do
        begin

          Qry.Params[0][i].AsString := AMember.AsObject.S['gencod_art'];
          Qry.Params[1][i].AsString := AMember.AsObject.S['code_art'];
          Qry.Params[2][i].AsString := AMember.AsObject.A['artDetail'].O[i].S
            ['gencod'];
          Qry.Params[3][i].AsString := AMember.AsObject.A['artDetail'].O[i].S
            ['couleur'];
          Qry.Params[4][i].AsString := AMember.AsObject.A['artDetail'].O[i].S
            ['taille'];
          Qry.Params[5][i].AsInteger := AMember.AsObject.A['artDetail'].O[i].i
            ['nb_pcs'];

        end;
        Qry.Execute(Qry.Params.ValueCount);
       end;

    end;

Re: 6.3.12 / batch operation issue "Array index out of range"

Posted: Fri 20 May 2016 12:38
by AlexP
After changing SQL, you should also reset Qry.Params.ValueCount

Re: 6.3.12 / batch operation issue "Array index out of range"

Posted: Fri 20 May 2016 14:23
by swierzbicki
I've changed valueCount to 1 and problem still persists

Re: 6.3.12 / batch operation issue "Array index out of range"

Posted: Mon 30 May 2016 08:17
by AlexP
We can't reproduce the problem. Please try to compose a small test application and send it to support*devart*com.