Здравствуйте.
Помогите пожалуйста! Я запутался и не могу ничего придумать.
Есть программа, считывает данные с весового терминала. Алгоритм взвешивания автотранспорта хаотичный, может проехать сначала порожний, потом груженный и наоборот. На форме имеется 2 кнопки "Груженный" "Порожний". Один из важных факторов ввода данных, это бортовой номер автосамосвала. При вводе номера в Edit (Например 11) и нажатии одной из кнопок (Например "Порожний"), записываются данные в БД, поле TARA... . Далее, если соблюдать порядок, в Edit ввести 11 и нажать кнопку "Груженный". То значение попадут в поле "BRUTTO". Все отлично! Но существует человеческий фактор. И если снова нажмут "Порожний", появится новая запись с новыми показаниями и таким же номером 11. Если в двух словах... То необходимо найти запись с введенным в Edit номером, проверить если поле BRUTTO заполнено, то туда записать тару. И наоборот, номер есть, поле TARA не пустое, туда записать BRUTTO. Если номера такого нет, или если есть, но тара и брутто не NULL. То записать ка новую запись. Ниже код двух кнопок. Все расписал в сообщении, но могу реализовать. Извините, если решение на поверхности, а я туплю. Запутался в конец.
procedure TForm1.Button_ToDB_EmptyClick(Sender: TObject); // ПОРОЖНИЙ
begin
strOutput := IntToStr(RandomRange(17000, 70000)); // Имитирую ответ от весов
if (EditNum.Text <> 'Номер транспорта') and (EditNum.Text <> '') then
begin
if ADOTableAzharHrom.Locate('NUMTRANSP;BRUTTO', VarArrayOf([EditNum.Text, NULL]), []) then // not(null) не срабатывает
begin
ADOTableAzharHrom.Edit;
ADOTableAzharHrom.FieldByName('TARA').AsFloat := StrToFloat(strOutput)/1000;
ADOTableAzharHrom.FieldByName('NETTO').AsFloat := ADOTableAzharHrom.FieldByName('BRUTTO').AsFloat - ADOTableAzharHrom.FieldByName('TARA').AsFloat;
ADOTableAzharHrom.Post;
end
else
if strOutput <> '' then // если номер не найден, надо записать все данные
begin
ADOTableAzharHrom.Insert;
ADOTableAzharHrom.FieldByName('NUMTRANSP').AsString := EditNum.Text;
ADOTableAzharHrom.FieldByName('MARKATRANSP').AsString := ComboBoxMarkaT.Text;
ADOTableAzharHrom.FieldByName('TARA').AsFloat := StrToFloat(strOutput)/1000;
........
ADOTableAzharHrom.FieldByName('DataFilter').AsString := DateToStr(Now);
ADOTableAzharHrom.Post;
end;
end
else
ShowMessage('Введите номер транспорта');
EditNum.Text := '';
end;
procedure TForm1.Button_ToDB_EmptyClick(Sender: TObject); // ГРУЖЕННЫЙ
begin
strOutput := IntToStr(RandomRange(17000, 70000)); // Имитирую ответ от весов
if (EditNum.Text <> 'Номер транспорта') and (EditNum.Text <> '') then
begin
if ADOTableAzharHrom.Locate('NUMTRANSP;TARA', VarArrayOf([EditNum.Text, NULL]), []) then // not(null) не срабатывает
begin
ADOTableAzharHrom.Edit;
ADOTableAzharHrom.FieldByName('BRUTTO').AsFloat := StrToFloat(strOutput)/1000;
ADOTableAzharHrom.FieldByName('NETTO').AsFloat := ADOTableAzharHrom.FieldByName('BRUTTO').AsFloat - ADOTableAzharHrom.FieldByName('TARA').AsFloat;
ADOTableAzharHrom.Post;
end
else
if strOutput <> '' then // если номер не найден, надо записать все данные
begin
ADOTableAzharHrom.Insert;
ADOTableAzharHrom.FieldByName('NUMTRANSP').AsString := EditNum.Text;
ADOTableAzharHrom.FieldByName('MARKATRANSP').AsString := ComboBoxMarkaT.Text;
ADOTableAzharHrom.FieldByName('BRUTTO').AsFloat := StrToFloat(strOutput)/1000;
........
ADOTableAzharHrom.FieldByName('DataFilter').AsString := DateToStr(Now);
ADOTableAzharHrom.Post;
end;
end
else
ShowMessage('Введите номер транспорта');
EditNum.Text := '';
end;
За ранее благодарю!