powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Incompatible types
25 сообщений из 35, страница 1 из 2
Incompatible types
    #39780329
elimpion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код который находит в ////////////1////////////
пытаюсь поместить в ///////////////2///////////
возникает ошибка Incompatible types Почему?
Если код оставить там где он сейчас ошибок не возникает
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
procedure TfrmBRSContractKindRef.ToolbarButton9710Click(Sender: TObject);
var proc:TOraStoredProc;
    res :integer;
    aErrorMsg : string;
    aCode: integer;
    TransMgr : TTransMgr;
    Delete : Integer;
begin
  aErrorMsg:='';

  Delete := MessageBox (
             Self.Handle
             , PChar(aErrorMsg+' Âû õîòèòå óäàëèòü?')
             , PChar('Îøèáêà óäàëåíèÿ')
             , MB_YESNO + MB_ICONINFORMATION + MB_APPLMODAL);
//////////////////////1////////////////////
      if Delete = IDYES then
      begin
        ShowMessage('Äà. ');
      end
      else
      begin
        ShowMessage('Íåò. ');
      end;
//////////////////////1////////////////////

  Proc := CreateOraStoredProc(AnsiUpperCase('pkgeditproduct.deleteproduct'));
  with Proc do begin
    TransMgr := FQI.GetTransMgr;
    TransMgr[FQI.DataBase].StartTransaction;
    try
      Prepare;
      if (FqueBRSContractKindRefInfo.FieldbyName('ContractType').asInteger in [60, 61]) then
      begin
        aCode := FqueBRSContractKindRefInfo.FieldbyName('ContractKind_c').asInteger;
        ParamByName('aContractKind').asInteger := FqueBRSContractKindRefInfo.FieldbyName('ContractKind_c').asInteger;
      end else
      begin
        aCode := FqueBRSContractKindRefInfo.FieldbyName('ContractKind').asInteger;
        ParamByName('aContractKind').asInteger := FqueBRSContractKindRefInfo.FieldbyName('ContractKind').asInteger;
      end;
      ExecProc;
      try
        if Params.FindParam('Result')<>nil then
          res := ParamByName('Result').asInteger;
        if Params.FindParam('aErrorMsg')<>nil then
          aErrorMsg:=ParamByName('aErrorMsg').asString;
      except
        TransMgr[FQI.DataBase].RollBack;
        res := -1;
      end;
    finally
      free;
    end;
    if res<>0 then begin
//////////////////////2////////////////////
      TransMgr[FQI.DataBase].RollBack;
      ShowMessage('&#206;&#248;&#232;&#225;&#234;&#224; &#243;&#228;&#224;&#235;&#229;&#237;&#232;&#255;. '+aErrorMsg);
    end
    else begin
      TransMgr[FQI.DataBase].Commit;
      if assigned(FquePrcCalcInfo) then
      with FquePrcCalcInfo do begin
        try
          DisableControls;
          Close;
          Open;
        finally
          EnableControls;
        end;
      end;
      with FqueBRSContractKindRefInfo do begin
        try
          DisableControls;
          Prior;
          aCode := FieldByName('ContractKind').asInteger;
          Close;
          Open;
          Locate('ContractKind',aCode,[]);
        finally
          EnableControls;
        end;
      end;
    end;
  end;
end;

...
Рейтинг: 0 / 0
Incompatible types
    #39780385
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непонятно куда ты чего вставляешь, но обрати внимание на один момент - ты это делаешь в блоке WITH (мать его ), а в блоке ты можешь цеплять совсем не те переменные, которые задумал.
...
Рейтинг: 0 / 0
Incompatible types
    #39780387
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
elimpion,

Потому что в ////2//// ты пытаешься вызвать Proc.Delete(), а это вообще процедура.
...
Рейтинг: 0 / 0
Incompatible types
    #39780398
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Учись выбирать адекватные имена для переменных и методов.
...
Рейтинг: 0 / 0
Incompatible types
    #39780401
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
with такого размера - это убиться веником.

я отрицательно отношусь к движению запретить with вообще, но with больше 5-6 строк размером - это поиск сюрпризов.

и ОЧЕНЬ хорошо, когда ты их находишь уже при компиляции.

могло быть ГОРАЗДО хуже, когда видимых ошибок бы никаких не было, просто вместо одной функции вызывалась бы другая. Впрочем, может быть и это тоже есть.
...
Рейтинг: 0 / 0
Incompatible types
    #39780419
RackotPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ariochwith такого размера - это убиться веником.

я отрицательно отношусь к движению запретить with вообще, но with больше 5-6 строк размером - это поиск сюрпризов.

и ОЧЕНЬ хорошо, когда ты их находишь уже при компиляции.

могло быть ГОРАЗДО хуже, когда видимых ошибок бы никаких не было, просто вместо одной функции вызывалась бы другая. Впрочем, может быть и это тоже есть.

Просто нужно уметь их использовать... Когда у тебя приведение к типу обращение слишком длинное, а операций нужно сделать много.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  with TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice) do
  begin
    btnA.Visible := True;
    btnA.OnClick := actA;

    btnB.Visible := True;
    btnB.OnClick := actB;

    btnC.Visible := True;
    btnC.OnClick := actC;

    btnD.Visible := True;
    btnD.OnClick := actD;
  end



VS

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice).btnA.Visible := True;
    TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice).btnA.OnClick := actA;

    TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice).btnB.Visible := True;
    TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice).btnB.OnClick := actB;

    TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice).btnC.Visible := True;
    TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice).btnC.OnClick := actC;

    TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice).btnD.Visible := True;
    TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice).btnD.OnClick := actD;



Пример примитивный, но зато понятный.
...
Рейтинг: 0 / 0
Incompatible types
    #39780423
RackotPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
elimpionКод который находит в ////////////1////////////
пытаюсь поместить в ///////////////2///////////
возникает ошибка Incompatible types Почему?
Если код оставить там где он сейчас ошибок не возникает
Код: pascal
1.
2.
3.
4.
procedure TfrmBRSContractKindRef.ToolbarButton9710Click(Sender: TObject);
var proc:TOraStoredProc;
    res :integer;
    Сократил;



У тебя с момента где начинается с
Код: pascal
1.
2.
  with Proc do begin
    TransMgr := FQI.GetTransMgr;


имеется сокращение и "Proc" имеет метод Delete

когда ты пишешь

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
var
  delete: integer;
begin
  delete := 0;
  with Proc do
  begin
    delete; // вызовется Proc.Delete;
  end
end
...
Рейтинг: 0 / 0
Incompatible types
    #39780438
elimpion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RackotPro,
вот если просто delete отправить
Код: pascal
1.
2.
3.
4.
  with Proc do
  begin
    delete; // вызовется Proc.Delete;
  end


тогда нормально отработает, без ошибок. Если начну в Delete еще условия писать, тогда начинают ошибки
...
Рейтинг: 0 / 0
Incompatible types
    #39780440
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RackotProПросто нужно уметь их использовать... Когда у тебя приведение к типу обращение слишком длинное, а операций нужно сделать много.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  with TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice) do
  begin
    btnA.Visible := True;
    btnA.OnClick := actA;

    btnB.Visible := True;
    btnB.OnClick := actB;

    btnC.Visible := True;
    btnC.OnClick := actC;

    btnD.Visible := True;
    btnD.OnClick := actD;
  end


Пример примитивный, но зато понятный.
Да-а, пример говорит кое о чём. Например о том, что у тебя дофига связности в проекте.
Сразу видно что этот код не должен быть в этом месте.
...
Рейтинг: 0 / 0
Incompatible types
    #39780455
RackotPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
elimpionRackotPro,
вот если просто delete отправить
Код: pascal
1.
2.
3.
4.
  with Proc do
  begin
    delete; // вызовется Proc.Delete;
  end


тогда нормально отработает, без ошибок. Если начну в Delete еще условия писать, тогда начинают ошибки


Proc.Delete это функция твоего Proc := CreateOraStoredProc(AnsiUpperCase('pkgeditproduct.deleteproduct'));

Это не твоя переменная Delete.

В общем решение твоей проблемы, в том, что нужно переименовать твою переменную из Delete в Del к примеру.

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
procedure TfrmBRSContractKindRef.ToolbarButton9710Click(Sender: TObject);
var proc:TOraStoredProc;
    res :integer;
    aErrorMsg : string;
    aCode: integer;
    TransMgr : TTransMgr;
    Del : Integer;
begin
  aErrorMsg:='';
  Del := MessageBox (
         Self.Handle
         , PChar(aErrorMsg+' &#194;&#251; &#245;&#238;&#242;&#232;&#242;&#229; &#243;&#228;&#224;&#235;&#232;&#242;&#252;?')
         , PChar('&#206;&#248;&#232;&#225;&#234;&#224; &#243;&#228;&#224;&#235;&#229;&#237;&#232;&#255;')
         , MB_YESNO + MB_ICONINFORMATION + MB_APPLMODAL);


  Proc := CreateOraStoredProc(AnsiUpperCase('pkgeditproduct.deleteproduct'));
  with Proc do begin
    TransMgr := FQI.GetTransMgr;
    TransMgr[FQI.DataBase].StartTransaction;
    try
      Prepare;
      if (FqueBRSContractKindRefInfo.FieldbyName('ContractType').asInteger in [60, 61]) then
      begin
        aCode := FqueBRSContractKindRefInfo.FieldbyName('ContractKind_c').asInteger;
        ParamByName('aContractKind').asInteger := FqueBRSContractKindRefInfo.FieldbyName('ContractKind_c').asInteger;
      end else
      begin
        aCode := FqueBRSContractKindRefInfo.FieldbyName('ContractKind').asInteger;
        ParamByName('aContractKind').asInteger := FqueBRSContractKindRefInfo.FieldbyName('ContractKind').asInteger;
      end;
      ExecProc;
      try
        if Params.FindParam('Result')<>nil then
          res := ParamByName('Result').asInteger;
        if Params.FindParam('aErrorMsg')<>nil then
          aErrorMsg:=ParamByName('aErrorMsg').asString;
      except
        TransMgr[FQI.DataBase].RollBack;
        res := -1;
      end;
    finally
      free;
    end;
    if res<>0 then begin

//////////////////////1////////////////////
      if Del = IDYES then
      begin
        ShowMessage('&#196;&#224;. ');
      end
      else
      begin
        ShowMessage('&#205;&#229;&#242;. ');
      end;
//////////////////////1////////////////////
      TransMgr[FQI.DataBase].RollBack;
      ShowMessage('&#206;&#248;&#232;&#225;&#234;&#224; &#243;&#228;&#224;&#235;&#229;&#237;&#232;&#255;. '+aErrorMsg);
    end
    else begin
      TransMgr[FQI.DataBase].Commit;
      if assigned(FquePrcCalcInfo) then
      with FquePrcCalcInfo do begin
        try
          DisableControls;
          Close;
          Open;
        finally
          EnableControls;
        end;
      end;
      with FqueBRSContractKindRefInfo do begin
        try
          DisableControls;
          Prior;
          aCode := FieldByName('ContractKind').asInteger;
          Close;
          Open;
          Locate('ContractKind',aCode,[]);
        finally
          EnableControls;
        end;
      end;
    end;
  end;
end;

...
Рейтинг: 0 / 0
Incompatible types
    #39780463
RackotPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimonkaRackotProПросто нужно уметь их использовать... Когда у тебя приведение к типу обращение слишком длинное, а операций нужно сделать много.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  with TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice) do
  begin
    btnA.Visible := True;
    btnA.OnClick := actA;

    btnB.Visible := True;
    btnB.OnClick := actB;

    btnC.Visible := True;
    btnC.OnClick := actC;

    btnD.Visible := True;
    btnD.OnClick := actD;
  end


Пример примитивный, но зато понятный.
Да-а, пример говорит кое о чём. Например о том, что у тебя дофига связности в проекте.
Сразу видно что этот код не должен быть в этом месте.

Ты прав, но иногда такое нужно, это был псевдо код.
Хорошо, допустим вот

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
     
      TfmDocumentEditor(FDocumentEditor).IsAppend := True;
      TfmDocumentEditor(FDocumentEditor).gbAttributes.Visible := False;
      TfmDocumentEditor(FDocumentEditor).cxSplitterAttrib.Visible := TfmDocumentEditor(FDocumentEditor).gbAttributes.Visible;
      TfmDocumentEditor(FDocumentEditor).gbDocNote.Visible := False;
      TfmDocumentEditor(FDocumentEditor).cxspltrDocNote.Visible := TfmDocumentEditor(FDocumentEditor).gbDocNote.Visible;
      TfmDocumentEditor(FDocumentEditor).Enabled := True;
      TfmDocumentEditor(FDocumentEditor).EditorMode := oemInsert;



Симпотичнее, да и читабельнее будет:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  with TfmDocumentEditor(FDocumentEditor) do
  begin
      IsAppend := True;
      gbAttributes.Visible := False;
      cxSplitterAttrib.Visible := gbAttributes.Visible;
      gbDocNote.Visible := False;
      cxspltrDocNote.Visible := gbDocNote.Visible;
      Enabled := True;
      EditorMode := oemInsert;
  end;



Да with удобно использовать когда работаешь с интерфейсами ну или тебе просто что-то записать нужно в тот же TMemoryStream, просто нужно изолировать из with работу с другими переменными или фукнциями(желательно). А в данном посте просто пример плохого объявления переменных. Ну плохим тоном считается использовать переменные с именем Delete Insert Add и прочими совпадениями с разными методами.

Короче with придумали не дибилы)) он правда удобен, а мне к примеру, просто необходим. Если не нравится да можно не использовать, но в целом очень удобная вещь.
...
Рейтинг: 0 / 0
Incompatible types
    #39780470
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RackotProПросто нужно уметь их использовать... Когда у тебя приведение к типу обращение слишком длинное, а операций нужно сделать много.

............

VS

............
VS
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
var
  Doc: TDocumentPrice;
begin
  Doc := TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice);

  Doc.btnA.Visible := True;
  Doc.btnA.OnClick := actA;

  Doc.btnB.Visible := True;
  Doc.btnB.OnClick := actB;

  Doc.btnC.Visible := True;
  Doc.btnC.OnClick := actC;

  Doc.btnD.Visible := True;
  Doc.btnD.OnClick := actD;
end


RackotProПример примитивный, но зато понятный.как делать не надо
...
Рейтинг: 0 / 0
Incompatible types
    #39780478
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RackotProПросто нужно уметь их использовать... Когда у тебя приведение к типу обращение слишком длинное, а операций нужно сделать много.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  with TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice) do
  begin
    btnA.Visible := True;
    btnA.OnClick := actA;

    btnB.Visible := True;
    btnB.OnClick := actB;

    btnC.Visible := True;
    btnC.OnClick := actC;

    btnD.Visible := True;
    btnD.OnClick := actD;
  end




VS

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice).btnA.Visible := True;
    TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice).btnA.OnClick := actA;

    TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice).btnB.Visible := True;
    TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice).btnB.OnClick := actB;

    TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice).btnC.Visible := True;
    TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice).btnC.OnClick := actC;

    TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice).btnD.Visible := True;
    TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice).btnD.OnClick := actD;




Пример примитивный, но зато понятный.

Пример неполный. Ложная дихотомия.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  

  P := TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice); 

  P.btnA.Visible := True;
  P.btnA.OnClick := actA;

  P.btnB.Visible := True;
  P.btnB.OnClick := actB;

  P.btnC.Visible := True;
  P.btnC.OnClick := actC;

  P.btnD.Visible := True;
  P.btnD.OnClick := actD;
...
Рейтинг: 0 / 0
Incompatible types
    #39780498
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RackotProпросто нужно изолировать из with работу с другими переменными или фукнциями

А как это сделать, чтобы Delphi просто не позволил программисту использовать "другую переменную", кроме короткого списка разрешённых?


RackotProплохим тоном считается использовать переменные с именем Delete Insert Add

нет

и прочими совпадениями с разными методами.

никакого совпадения в //////1//// нету

а в ///////2////// - уже ошибка компиляции и разговор о плохом-хорошем тоне теряет смысл


Кстати, лично я отхватил много веселья перетаскивая программу (и разные библиотеки, даже DevExpress 4 пытался) c Delphi 2006 на XE2.

куски кода типа

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Var r: TRect;

....
  r := .....;
...
  with r do begin
.....
.....
.....
     NormalizeRect(....);  // бдыщщ!!!!
.....
end;



Ну не было во времена Delphi 3-7-2006 такого метода как TRect.NormalizeRect не-бы-ло.
И потому никаких "прочими совпадениями" тоже не было.
Много лет не было.
А потом появилось.


RackotProКороче with придумали не дибилы))

with придумали для обучения программирования в школе, на примере маленьких программок, на языке без классов-методов (и не помню были ли там указатели на процедуры-функции изначально)
...
Рейтинг: 0 / 0
Incompatible types
    #39780509
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RackotProКороче with придумали не дибилы

я вот тоже удивляюсь, откуда тут взялось множественное число, если имя человека, который придумал with, общеизвестно
...
Рейтинг: 0 / 0
Incompatible types
    #39780514
RackotPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AriochПример неполный. Ложная дихотомия.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  P := TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice); 

  P.btnA.Visible := True;
  P.btnA.OnClick := actA;

  P.btnB.Visible := True;
  P.btnB.OnClick := actB;

  P.btnC.Visible := True;
  P.btnC.OnClick := actC;

  P.btnD.Visible := True;
  P.btnD.OnClick := actD;



Да но я хотел показать простой пример с длинными названиями, когда у вас

Код: pascal
1.
2.
3.
4.
5.
  with ОченьБольшоеДлинноеШирокоеНазваниеФормыДляЮристовКотиковИНаркоманов do
  begin
     button.Visible := False;
     label.width := 100500;
  end;



Да и пример с var ваш имеет место быть, да и правильнее. Но я, на пример, намеренно говнокодю когда:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
//Милион милион алых строк кода
//а вот тут нужно в данный момент отключить контрол на 6-ой форме именно тут 
//и обращение через луну(как правило это заплатка за 5 минут)

  with TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice) do
  begin
    btnA.Visible := True;
    btnA.OnClick := actA;
  end;


И позже когда сюда вернёшься, не очень удобно будет листать "милион милион алых строк", что бы убрать или заменить тот самый var.

Так что мой вердикт такой, используйте всё что хотите, главное, что бы это было читабельно и понятно всем.
...
Рейтинг: 0 / 0
Incompatible types
    #39780518
RackotPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AriochRackotProКороче with придумали не дибилы

я вот тоже удивляюсь, откуда тут взялось множественное число, если имя человека, который придумал with, общеизвестно

Наверное, до такой степени я не гуглил)) Ну давай сын маминой подруги расскажи имя, ты же знаешь его. А число ПИ до 20-той запятой тоже без гугла напишешь?))
Мамкины хейтеры какие-то))

Ну такое, в общем, вкусовщина.
...
Рейтинг: 0 / 0
Incompatible types
    #39780526
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochна языке без классов-методов (и не помню были ли там указатели на процедуры-функции изначально)

"процедурных переменных" в 1974 не было

были "процедурные параметры" в процедурах, но не в record'ах и потому на with не влияли
...
Рейтинг: 0 / 0
Incompatible types
    #39780528
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RackotProНаверное, до такой степени я не гуглил

если тебе надо гуглить то, что все без гугла знают, то может быть тебе рановато рассуждать, кто был дебил, а кто нет?

если кто-то хочет рассуждать о внешней политике России, то он должен знать фамилию Путин. БЕЗ ГУГЛА.
если кто-то хочет рассуждать об истории СССР, то он должен знать фамилию Ленин. БЕЗ ГУГЛА.
если кто-то хочет рассуждать о силе притяжение, то он должен знать фамилию Ньютон. БЕЗ ГУГЛА.

а если простую логику ты считаешь хейтерством - то дело твоё
...
Рейтинг: 0 / 0
Incompatible types
    #39780532
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RackotProДа и пример с var ваш имеет место быть, да и правильнее. Но я, на пример, намеренно говнокодю когда:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
//Милион милион алых строк кода
//а вот тут нужно в данный момент отключить контрол на 6-ой форме именно тут 
//и обращение через луну(как правило это заплатка за 5 минут)

  with TDocumentPrice(TDocument(TFlow(Flow).Document).DocumentPrice) do
  begin
    btnA.Visible := True;
    btnA.OnClick := actA;
  end;


И позже когда сюда вернёшься, не очень удобно будет листать "милион милион алых строк", что бы убрать или заменить тот самый var.

Так что мой вердикт такой, используйте всё что хотите, главное, что бы это было читабельно и понятно всем.
У тебя в строке WITH 3 опасных приведения типа. ТРИ, Карл! Любое из них может оказаться ошибочным и привет. Любое из них может стать ошибочным при даже небольшом рефакторинге и ты этого не заметишь при компиляции.
Плюс искусственная связность. Зачем обращаться к подкомпонентам таким образом? Для этого придуманы стандартные механизмы ООП в дельфи: свойства, события.
А сверху до кучи добавлен With.
Хороший пример как делать не надо.
...
Рейтинг: 0 / 0
Incompatible types
    #39780537
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimonka,

"как правило это заплатка за 5 минут" (с)

если же это останется в окончательном коде - тогда да, ахтунг.

кстати, даже в виде заплатки соответствует тезису 21821776

Ariochwith больше 5-6 строк размером - это поиск сюрпризов.
...
Рейтинг: 0 / 0
Incompatible types
    #39780538
RackotPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AriochDimonka,

"как правило это заплатка за 5 минут" (с)

если же это останется в окончательном коде - тогда да, ахтунг.

кстати, даже в виде заплатки соответствует тезису 21821776

Ariochwith больше 5-6 строк размером - это поиск сюрпризов.

Nope. Повторюсь, просто с умом использовать.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
  with qDocumentRolesEdit do
  begin
    Transaction.StartTransaction;
    try
      ParamByName('AOPERATION').Value := 2;
      ParamByName('ID').Value := cdsDocumentRoles.FieldByName('ID').Value;
      ParamByName('ID_DOCUMENT_TYPE').Value := Null;
      ParamByName('ID_DOC$ROLE_TYPE').Value := Null;
      ParamByName('STATE').Value := Null;
      ParamByName('IS_PARENT').Value := Null;
      ParamByName('IS_TRUSTEE').Value := Null;
      ParamByName('IS_AUTHORIZED_REPRESENTATIVE').Value := Null;
      ParamByName('IS_PROHIBITION').Value := Null;
      ExecQuery;

      Transaction.Commit;
    except
      Transaction.Rollback;
    end;
  end;
...
Рейтинг: 0 / 0
Incompatible types
    #39780543
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RackotPro
Код: pascal
1.
2.
3.
    except
      Transaction.Rollback;
    end;



ты бы хоть raise для приличия вставил что ли....


RackotPro
Код: pascal
1.
ParamByName


RackotPro
Код: pascal
1.
FieldByName



Желательно вызывать один единственный раз, а не при каждом выполнении запроса.
...
Рейтинг: 0 / 0
Incompatible types
    #39780545
RackotPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arioch, всё, я пойду вскрою вены, победил, ты царь, бог и код твой священен. Жесть xD
...
Рейтинг: 0 / 0
Incompatible types
    #39780550
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RackotProИ позже когда сюда вернёшься, не очень удобно будет листать "милион милион алых строк", что бы убрать или заменить тот самый var.

просто однажды ты переименуешь btnA во что-то другое

в своей прогармме не переименуешь? даже через 3-4 года?
ну так в чужой переименуешь, которую тебе передадут.

и у тебя станет внезапно включаться btnA совсем другой формы.


Для экспериментов на 5 минут во время отладки это подходит.
Но добившись результата все же лучше переписать экспериментальную затычку в надёжный код.
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Incompatible types
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]