Заметки программера Чему равно дважды два равно четыре?
Revert
Переводим ASDF в ФЫВА и наоборот.
Хорошо!!
Радикальный улучшатель настроения.
Грамота
Покажи всем, насколько ты крут - выпиши себе мега-грамоту!
22.03.2011, 07:57   Статьи » Как не надо делать

Украинский код

В одной из заметок про Иран было сказано, что творчество моих предшественников (два украинских погромиста) зачастую вызывает у меня рвотные рефлексы и неконтролируемый поток матерных идиом (сотрудники их даже конспектируют). Сегодня я таки решил поделиться с вами, дорогие читатели, одним из многих примеров.

Небольшой кусочек кода. Авторство - Служенко Константин Викторович и Сергиенко Валерий Вячеславович. Дата выпуска - 14.06.2010 г.
Читаем, наслаждаемся.

with Form1.ADOQuery2 do begin
Close;
SQL.Clear;
SQL.Add('BEGIN TRANSACTION');
SQL.Add('INSERT INTO LogBasis(iConF, s1, iTypOper, sNotes, iUsTab, sUchNom, sTable, sField, s2, sFIOZr, sFIOZ, sORGZ)');

SQL.Add('VALUES ('+''''+Buf1.sName+''''+','+''''+trim(EditFIO.Text)+''''+',5,'+''''+trim(EditComment.Text)+''''+','+''''+trim(RepName)+''''+','+''''+trim(Form1.Edit51.Text)+''''+','+''''+trim(EditDolg.Text)+''''+','+''''+trim(EditRuk.Text)+''''+','+''''+trim(EditGlavbuh.Text)+''''+','+''''+trim(Edit1.Text)+''''+','+''''+trim(Edit2.Text)+''''+','+''''+trim(Edit3.Text)+''''+')');
Form1.ADOQuery17.First;
while not Form1.ADOQuery17.EOF do
begin
  if Form1.ADOQuery17.FieldByName('iTProdID1').AsInteger<>-1 then
  begin
    SQL.Add('INSERT INTO LogBasis(iConF, s2, iTypOper, iUsTab, sUchNom, iCodProd, iCodeT)');
    SQL.Add('VALUES ('+''''+Buf1.sName+''''+','+''''+Form1.ADOQuery17.FieldByName('sFctNum1').AsString+''''+',5,'+''''+trim(RepName)+''''+','+''''+trim(Form1.Edit51.Text)+''''+','+''''+Form1.ADOQuery17.FieldByName('iCode3').AsString+''''+',8)');
    SQL.Add('UPDATE Products SET sRegNum='+''''+trim(Form1.Edit51.Text)+''''+',iStatID=8'+',sInfo='+''''+trim(EditComment.Text)+'''');
    SQL.Add('WHERE iCode='+''''+Form1.ADOQuery17.FieldByName('iCode3').AsString+'''');
  end else
  begin
    SQL.Add('INSERT INTO LogBasis(iConF,iTypOper, iUsTab, sUchNom,sPredIsm,sTable,sField,iCodeT)');
    SQL.Add('VALUES ('+''''+Buf1.sName+''''+',5,'+''''+trim(RepName)+''''+','+''''+trim(Form1.Edit51.Text)+''''+','+''''+Form1.ADOQuery17.FieldByName('sNameR1').AsString+''''+','+''''+Form1.ADOQuery17.FieldByName('sMark1').AsString+''''+','+''''+Form1.ADOQuery17.FieldByName('sFctNum1').AsString+''''+',8)');
  end;
  Form1.ADOQuery17.Next;
end;
Form1.ADOQuery16.First;
while not Form1.ADOQuery16.EOF do
begin
  SQL.Add('INSERT INTO LogBasis(iConF, s2, iTypOper, iUsTab, sUchNom, iCodProd, iCodeT)');
  SQL.Add('VALUES ('+''''+Buf1.sName+''''+','+''''+Form1.ADOQuery16.FieldByName('sFctNum1').AsString+''''+','+''''+'5'+''''+','+''''+trim(RepName)+''''+','+''''+trim(Form1.Edit51.Text)+''''+','+''''+Form1.ADOQuery16.FieldByName('iCode3').AsString+''''+',2)');
  SQL.Add('UPDATE Products SET sRegNum='+''''+''''+',iStatID=2'+',sInfo='+''''+trim(EditComment.Text)+'''');
  SQL.Add('WHERE iCode='+''''+Form1.ADOQuery16.FieldByName('iCode3').AsString+'''');
  Form1.ADOQuery16.Next;
end;
SQL.Add('COMMIT');
if ExecSQL=0 then ShowMessage('Запрос не выполнен') else
MessageDlg('Операция завершена.', mtWarning, [mbOk], 0);
Form1.DataSource15.Enabled:=true;
Form1.DataSource14.Enabled:=true;
if MessageDlg('Распечатать?', mtConfirmation, [mbOk, mbNo], 0)=mrOk then
begin
  with qrRemont do begin
    QRLabel1.Caption:='Акт №'+Buf1.sName;
    QRLabel3.Caption:='Настоящий Акт составлен в том, что '+DateToStr(Date)+' года';
    QRLabel26.Caption:=EditFIO.Text;

Не надо так делать. За такой код при личной встрече отрывают голову и срут в глотку.
Бараны, блядь. А мне в этой куче фекалий ковыряться приходится.

Комментарии

boriss 22.03.2011, 07:51 #1
Долго думал, что написать... Решил остановиться на короткой фразе:
"Аккуратность - не для настоящих пацанов!"
Del 22.03.2011, 07:55 #2
Даже если не говорить про параметризованные запросы, можно, к примеру, глянуть на внесение строковых значений в числовые поля (iConF int, Buf1.sName: string). Про имена объектов можно не упоминать.
boriss 22.03.2011, 08:16 #3
Кому: Del, #2
Я, конечно, не настолько телепат, чтобы определить, какое поле какого типа, но очевидно, что авторы - фанаты книг "* для чайников"...
marquis 22.03.2011, 09:28 #4
Что делать! Авторы на момент своего творения не были посвящены в тайны могущества хранимых процедур.
Если так поиздевались на серьезной боевой БД - однозначно "найти и расстрелять"

Добавлние комментов отключено на время переезда

Картинки

Прекрасная игра

Егор и разработка

Когда нет домкрата
Ссылки