Возникла необходимость работы с дробными числами, а именно: вводимые числа в edit1 и edit3 могут быть не целые. Причем edit3 принимает участие в формуле в качестве переменной stoimost. kolvo[i] должно округляться до наименьшего. Также содержимое edit3 должно заноситься в базу с 2 знаками после запятой. База данных access2000, в которой поле Tek_sredstva(в формуле sredstva) представлено в виде "двойное с плавающей точкой" и точность установлена до 2 знаков.
| Код |
var new_order: Tnew_order; query: array[0..2] of string; queryq: array[0..1] of double;
implementation
{$R *.dfm}
procedure Tnew_order.Button1Click(Sender: TObject); var i,count:integer; sql,id_paper,class_code:string; id_clients: array of string; kolvo: array of double; procent,stoimost,sredstva:double;
begin if radiobutton1.Checked=true then query[2]:='B' else query[2]:='S';
if edit3.Text='' then begin ShowMessage('...'); exit; end else queryq[0]:= strtofloat(edit3.Text);
if RadioButton3.Checked=true then begin if edit1.Text='' then begin ShowMessage('...'); exit; end else queryq[1]:= strtofloat(edit1.Text); end;
if RadioButton4.Checked=true then begin ADOQ_new.Close; ADOQ_new.SQL.Clear; ADOQ_new.SQL.Add('SELECT Dengi.Tek_sredstva'); ADOQ_new.SQL.Add('FROM Dengi INNER JOIN groups ON Dengi.id_group=groups.id_group'); ADOQ_new.SQL.Add('WHERE groups.group="'+query[0]+'"'); ADOQ_new.Open;
SetLength(kolvo,ADOQ_new.RecordCount); i:=0; procent:= strtofloat(Edit2.text); stoimost:= strtofloat(Edit3.text); while (not ADOQ_new.Eof) do begin sredstva := strtofloat(ADOQ_new.FieldByName('Tek_sredstva').AsString); kolvo[i] := round(sredstva*procent/100/stoimost); ADOQ_new.Next(); i:=i+1; end; end;
if (query[0]='') or (query[1]='') then begin ShowMessage('...'); exit; end;
..................
for i:=0 to count do begin if RadioButton3.Checked=true then sql:= 'INSERT INTO New_Order ( Account, Kod_klienta, Type, CLASSCODE, Kod_bumagi, [Action], OPERATION, Order_Price, Quantity, Reverse, Ostatki, Cena_ispoln, Stop_cena ) VALUES ("L01-00000F00", "'+id_clients[i]+'", "L", "'+class_code+'", "'+id_paper+'", "NEW_ORDER", "'+query[2]+'", "'+floattostr(queryq[0])+'", "'+floattostr(queryq[1])+'", "0", "0", "0", "0")' else sql:= 'INSERT INTO New_Order ( Account, Kod_klienta, Type, CLASSCODE, Kod_bumagi, [Action], OPERATION, Order_Price, Quantity, Reverse, Ostatki, Cena_ispoln, Stop_cena ) VALUES ("L01-00000F00", "'+id_clients[i]+'", "L", "'+class_code+'", "'+id_paper+'", "NEW_ORDER", "'+query[2]+'", "'+floattostr(queryq[0])+'", "'+floattostr(kolvo[i])+'", "0", "0", "0", "0")';
ADOQ_new.Close; ADOQ_new.SQL.Clear; ADOQ_new.SQL.Text:=sql; ADOQ_new.ExecSQL; end; end;
|
|