Предыдущее сообщение аннулирую , чтобы не запутать .
В Edit3 ввожу к-во отпускаемого материала фактическое
В TableGrid1.Cells[10,i] записано к-во материала плановое
В Edit5 к-во упаковок , а в CheckBox2 - тип упаковки ( разная масса )
Делаю защиту , чтобы не отпустили меньше ( больше можно )
Под Button2 SQL ЗАПРОС с :
INSERT INTO Nakladnie (Nomer,NakData,Otkuda,Kuda,Rasxod,PrixRasx,id_Materials,
ZayavNom,ZayavData,id_employees)
SELECT {Edit4},{DateTimePicker1},MatZayav2.Otkuda,MatZayav2.Kuda,{Edit3},
{CheckBox1},
MatZayav2.id_Materials,MatZayav2.NomerZayav,MatZayav2.DataZayav,{TableGrid2}
FROM MatZayav2
WHERE MatZayav2.id LIKE "{TableGrid1}"
AND MatZayav2.MatZaPriz<>1;
А в Button2_OnClick собственно проверка :
procedure frmZayavRashodMat_Button2_OnClick (Sender: string; var Cancel: boolean);
var
i,c: integer;
d: Extended;
begin
i := frmZayavRashodMat.TableGrid1.dbItemID -1;
if frmZayavRashodMat.TableGrid1.Cells[11,i] = '1' then
begin
ShowMessage(' Материал по заявке уже выдан.');
Cancel := True; // отменяем действие кнопки
end;
c := StrToInt(frmZayavRashodMat.Edit5.Text);
if frmZayavRashodMat.CheckBox2.Checked then d:= c*0.75
else d:= c*0.2;
if StrToFloat(frmZayavRashodMat.Edit3.Text) < (d + StrToFloat(frmZayavRashodMat.TableGrid1.Cells[10,i])) then
begin
ShowMessage(' Мало');
Cancel := True;
end;
end;
Происходит следующее :
Если я ввожу в Edit3 число с точкой в разделителе , то выходит сообщение об ошибке от функции StrToFloat , что значение не Float
Если ввожу с запятой , то StrToFloat пропускает , ругается SQL ЗАПРОС Под Button2 ( что я пытаюсь вставить 11 значений в 10 столбцов)
видимо запятая в Edit3 воспринимается как разделитель двух параметров.
Где не пользуюсь обработкой чисел скриптами , ввод разделителя в виде точки ( по Edit - ам) проходит норм.
С уважением .