Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi DCC Fehler: Zu viele lokale Konstanten. Verwenden Sie... (https://www.delphipraxis.net/150786-dcc-fehler-zu-viele-lokale-konstanten-verwenden-sie.html)

Major1337 27. Apr 2010 07:36


DCC Fehler: Zu viele lokale Konstanten. Verwenden Sie...
 
Hallo

Bei dieser Procedure kommt in Delphi 2010 folgender Fehler, bei Delphi 2005 allerdings nicht.
Wennn ich ein Teil der Procedure kürze, klappt es. o_O


=> [DCC Fehler] Zu viele lokale Konstanten. Verwenden Sie kürzere Prozeduren.


Delphi-Quellcode:
procedure TForm616.printlabelcontrolling;


begin

  query10.close;
  query10.parambyname('ub').asstring := ub;
  query10.parambyname('mat').asstring := (vubwin_form[620] as tform620).query2.fieldbyname('material').asstring;
  query10.open;

  query11.close;
  query11.open;

  tecprint('{D2988,0700,2900|}');
  tecprint('{AX;+000,+000,+00|}');
  tecprint('{AY;+00,0|}');
  tecprint('{C|}');

  {kleine Etikette}

  tecprint('{XB01;0022,0570,5,3,04,3,0070,+0000000000,020,1,00|}');
  tecprint('{RB01;' + copy(query10.fieldbyname('ean').asstring,1,12) + '|}');
  tecprint('{XB02;0395,0570,5,3,04,3,0070,+0000000000,020,1,00|}');
  tecprint('{RB02;' + copy(query10.fieldbyname('ean').asstring,1,12) + '|}');

  tecprint('{PC001;0165,0635,05,05,G,33,B|}');
  if matltext <> ''
  then tecprint('{RC001;' + matltext + '|}')
  else tecprint('{RC001;' + matktext + '|}');
  tecprint('{PC002;0538,0635,05,05,G,33,B|}');
  if matltext <> ''
  then tecprint('{RC002;' + matltext + '|}')
  else tecprint('{RC002;' + matktext + '|}');

  tecprint('{PC003;0165,0159,05,05,G,33,B|}');
  tecprint('{RC003;' +  query11.fieldbyname('time').asstring + ' ' + inttostr(persnr) + '|}');
  tecprint('{PC004;0538,0159,05,05,G,33,B|}');
  tecprint('{RC004;' +  query11.fieldbyname('time').asstring + ' ' + inttostr(persnr) + '|}');

  if codeid <> '' then begin

    tecprint('{XB03;0195,0535,9,3,02,3,0090,+0000000000,020,1,00|}');
    tecprint('{RB03;' + codeid + '|}');
    tecprint('{XB04;0568,0535,9,3,02,3,0090,+0000000000,020,1,00|}');
    tecprint('{RB04;' + codeid + '|}');

  {große Etikette}

  if query10.fieldbyname('textbrand').IsNull then begin

    tecprint('{PV01;0110,2869,0120,0115,B,33,B|}');
    tecprint('{RV01;' + (vubwin_form[620] as tform620).query2.fieldbyname('material').asstring + '|}');
    tecprint('{PV02;0483,2869,0120,0115,B,33,B|}');
    tecprint('{RV02;' + (vubwin_form[620] as tform620).query2.fieldbyname('material').asstring + '|}');

    //tecprint('{PV01;0110,2869,0120,0115,B,33,B|}');
    //tecprint('{RV01;' + modell + '|}');
    //tecprint('{PV02;0483,2869,0120,0115,B,33,B|}');
    //tecprint('{RV02;' + modell + '|}');

    //tecprint('{PV01;0080,2869,0064,0090,B,33,B|}');
    //tecprint('{RV01;' + auftrag + '|}');
    //tecprint('{PV02;0453,2869,0064,0090,B,33,B|}');
    //tecprint('{RV02;' + auftrag + '|}');
    //tecprint('{PV03;0080,2239,0064,0090,B,33,B|}');
    //tecprint('{RV03;' + (vubwin_form[620] as tform620).query2.fieldbyname('material').asstring + '|}');
    //tecprint('{PV04;0453,2239,0064,0090,B,33,B|}');
    //tecprint('{RV04;' + (vubwin_form[620] as tform620).query2.fieldbyname('material').asstring + '|}');

    tecprint('{XB05;0022,1161,5,3,03,3,0060,+0000000000,020,1,00|}');
    tecprint('{RB05;' + copy(query10.fieldbyname('ean').asstring,1,12) + '|}');
    tecprint('{XB06;0395,1161,5,3,03,3,0060,+0000000000,020,1,00|}');
    tecprint('{RB06;' + copy(query10.fieldbyname('ean').asstring,1,12) + '|}');

    tecprint('{PV05;0221,2869,0064,0115,B,33,B|}');
    if matltext <> ''
    then tecprint('{RV05;' + matltext + '|}')
    else tecprint('{RV05;' + matktext + '|}');
    tecprint('{PV06;0594,2869,0064,0115,B,33,B|}');
    if matltext <> ''
    then tecprint('{RV06;' + matltext + '|}')
    else tecprint('{RV06;' + matktext + '|}');

    //tecprint('{PC005;0273,2869,15,15,G,33,B|}');
    //tecprint('{RC005;' + modell + '|}');
    //tecprint('{PC006;0646,2869,15,15,G,33,B|}');
    //tecprint('{RC006;' + modell + '|}');

    if codeid <> '' then begin

      tecprint('{XB07;0225,2523,9,3,03,3,0060,+0000000000,020,1,00|}');
      tecprint('{RB07;' + codeid + '|}');
      tecprint('{XB08;0598,2523,9,3,03,3,0060,+0000000000,020,1,00|}');
      tecprint('{RB08;' + codeid + '|}');

    end;

    tecprint('{PC007;0659,1800,05,05,G,33,B|}');
    tecprint('{RC007;' +  query11.fieldbyname('time').asstring + ' ' + inttostr(persnr) + '|}');
    tecprint('{PC008;0286,1800,05,05,G,33,B|}');
    tecprint('{RC008;' +  query11.fieldbyname('time').asstring + ' ' + inttostr(persnr) + '|}');

    tecprint('{PC009;0262,1489,05,05,I,33,B|}');
    tecprint('{RC009;' + (vubwin_form[620] as tform620).query2.fieldbyname('color').asstring + '|}');
    tecprint('{PC010;0635,1489,05,05,I,33,B|}');
    tecprint('{RC010;' + (vubwin_form[620] as tform620).query2.fieldbyname('color').asstring + '|}');

    tecprint('{PC011;0307,1489,05,05,I,33,B|}');
    tecprint('{RC011;' + query10.fieldbyname('textcolor').asstring + '|}');
    tecprint('{PC012;0680,1489,05,05,I,33,B|}');
    tecprint('{RC012;' + query10.fieldbyname('textcolor').asstring + '|}');

    tecprint('{SG;0230,0861,0064,0071,0,3?>0000000001?<03??0000000001?<03??0000000001?');
    tecprint('<01??0003??0007?<01??0003??0007?<01??0003??0007?<01??0003??0007?<01??<00');
    tecprint('3??000??<01??<003??000??<007?<003??000??8007?>003??003??8007?>003??003??');
    tecprint('8003??803??003?>0003??<03??01??>0003??<03??01??>0000???03??03??<00007??8');
    tecprint('3??0???<00007??83??0???<00007???3??7???000001?????????>000001?????????>0');
    tecprint('00000?????????80000001???????<00000001???????<000000007??????8000000000?');
    tecprint('????<0000000000?????<000000000003??0000000000000000000000000000000000000');
    tecprint('000000000000000000000000000000000000000000000000000000000000000000000000');
    tecprint('000000000000000000000000000000000000000000000000000000000000000000000000');
    tecprint('00000000000000000000000000000000003?>0000000007?<03?>0000000007?<03?>000');
    tecprint('0000007?<01?>0000000007?<01?>0000000007?<01?>0000000007?<01??0000000007?');
    tecprint('<01??0000000007?<01??000000000??<01??<00000000??<01??<00000000??<007?<00');
    tecprint('000003??8007?>00000003??8007?>00000003??8003??80000007?>0003??<000001??>');
    tecprint('0003??<000001??>0000???000003??<00007??>0001???000007??>0001???000001???');
    tecprint('?87???>000000?????????8000000?????????80000003????????00000001???????<00');
    tecprint('000001???????<000000003?????>00000000007????000000000007????000000000000');
    tecprint('1?<0000000|}');
    tecprint('{SG;0603,0861,0064,0071,0,3?>0000000001?<03??0000000001?<03??0000000001?');
    tecprint('<01??0003??0007?<01??0003??0007?<01??0003??0007?<01??0003??0007?<01??<00');
    tecprint('3??000??<01??<003??000??<007?<003??000??8007?>003??003??8007?>003??003??');
    tecprint('8003??803??003?>0003??<03??01??>0003??<03??01??>0000???03??03??<00007??8');
    tecprint('3??0???<00007??83??0???<00007???3??7???000001?????????>000001?????????>0');
    tecprint('00000?????????80000001???????<00000001???????<000000007??????8000000000?');
    tecprint('????<0000000000?????<000000000003??0000000000000000000000000000000000000');
    tecprint('000000000000000000000000000000000000000000000000000000000000000000000000');
    tecprint('000000000000000000000000000000000000000000000000000000000000000000000000');
    tecprint('00000000000000000000000000000000003?>0000000007?<03?>0000000007?<03?>000');
    tecprint('0000007?<01?>0000000007?<01?>0000000007?<01?>0000000007?<01??0000000007?');
    tecprint('<01??0000000007?<01??000000000??<01??<00000000??<01??<00000000??<007?<00');
    tecprint('000003??8007?>00000003??8007?>00000003??8003??80000007?>0003??<000001??>');
    tecprint('0003??<000001??>0000???000003??<00007??>0001???000007??>0001???000001???');
    tecprint('?87???>000000?????????8000000?????????80000003????????00000001???????<00');
    tecprint('000001???????<000000003?????>00000000007????000000000007????000000000000');
    tecprint('1?<0000000|}');

    tecprint('{XS;I,0001,0000C6210|}');

  end
  else begin

    tecprint('{PV01;0082,2869,0100,0090,B,33,B|}');
    tecprint('{RV01;' + query10.fieldbyname('textbrand').asstring + '|}');
    tecprint('{PV02;0455,2869,0100,0090,B,33,B|}');
    tecprint('{RV02;' + query10.fieldbyname('textbrand').asstring + '|}');

    //tecprint('{PV01;0080,2869,0064,0090,B,33,B|}');
    //tecprint('{RV01;' + auftrag + '|}');
    //tecprint('{PV02;0453,2869,0064,0090,B,33,B|}');
    //tecprint('{RV02;' + auftrag + '|}');
    //tecprint('{PV03;0080,2239,0064,0090,B,33,B|}');
    //tecprint('{RV03;' + (vubwin_form[620] as tform620).query2.fieldbyname('material').asstring + '|}');
    //tecprint('{PV04;0453,2239,0064,0090,B,33,B|}');
    //tecprint('{RV04;' + (vubwin_form[620] as tform620).query2.fieldbyname('material').asstring + '|}');

    tecprint('{XB05;0022,1490,5,3,03,3,0060,+0000000000,020,1,00|}');
    tecprint('{RB05;' + copy(query10.fieldbyname('ean').asstring,1,12) + '|}');
    tecprint('{XB06;0395,1490,5,3,03,3,0060,+0000000000,020,1,00|}');
    tecprint('{RB06;' + copy(query10.fieldbyname('ean').asstring,1,12) + '|}');

    tecprint('{PV05;0221,2869,0064,0115,B,33,B|}');
    if matltext <> ''
    then tecprint('{RV05;' + matltext + '|}')
    else tecprint('{RV05;' + matktext + '|}');
    tecprint('{PV06;0594,2869,0064,0115,B,33,B|}');
    if matltext <> ''
    then tecprint('{RV06;' + matltext + '|}')
    else tecprint('{RV06;' + matktext + '|}');

    //tecprint('{PC005;0273,2869,15,15,G,33,B|}');
    //tecprint('{RC005;' + modell + '|}');
    //tecprint('{PC006;0646,2869,15,15,G,33,B|}');
    //tecprint('{RC006;' + modell + '|}');

    if codeid <> '' then begin

      tecprint('{XB07;0225,2523,9,3,03,3,0060,+0000000000,020,1,00|}');
      tecprint('{RB07;' + codeid + '|}');
      tecprint('{XB08;0598,2523,9,3,03,3,0060,+0000000000,020,1,00|}');
      tecprint('{RB08;' + codeid + '|}');

    end;

    tecprint('{PC007;0659,1830,05,05,G,33,B|}');
    tecprint('{RC007;' +  query11.fieldbyname('time').asstring + ' ' + inttostr(persnr) + '|}');
    tecprint('{PC008;0286,1830,05,05,G,33,B|}');
    tecprint('{RC008;' +  query11.fieldbyname('time').asstring + ' ' + inttostr(persnr) + '|}');

    tecprint('{PC009;0262,1620,05,05,I,33,B|}');
    tecprint('{RC009;' + (vubwin_form[620] as tform620).query2.fieldbyname('color').asstring + '|}');
    tecprint('{PC010;0635,1620,05,05,I,33,B|}');
    tecprint('{RC010;' + (vubwin_form[620] as tform620).query2.fieldbyname('color').asstring + '|}');

    tecprint('{PC011;0307,1620,05,05,I,33,B|}');
    tecprint('{RC011;' + query10.fieldbyname('textcolor').asstring + '|}');
    tecprint('{PC012;0680,1620,05,05,I,33,B|}');
    tecprint('{RC012;' + query10.fieldbyname('textcolor').asstring + '|}');


     // ... gekürzt!


end;

himitsu 27. Apr 2010 07:58

Re: DCC Fehler: Zu viele lokale Konstanten. Verwenden Sie...
 
[dp]"Zu viele lokale Konstanten"[/dp] und Ähnliches:
> http://www.delphipraxis.net/internal...018730#1018730
> http://www.delphipraxis.net/internal...t.php?t=149772
> ...

Jedes '...' stellt eine Konstante dar.
Lösungen:
- Konstanten/Strings auslagern und als globale Konstanten deklarieren
- oder den Code in mehrere Prozeduren aufteilen

uligerhardt 27. Apr 2010 09:08

Re: DCC Fehler: Zu viele lokale Konstanten. Verwenden Sie...
 
  • Gib deinen Variablen doch bitte sinnvolle Namen (also nicht query11 und so).
  • Verwende in der Routine doch ein paar lokale Variablen anstatt 100x
    Delphi-Quellcode:
    (vubwin_form[620] as tform620).Irgendwas
    oder
    Delphi-Quellcode:
    query10.fieldbyname('textbrand').asstring
    zu schreiben.
  • Bitte sag mir, dass vubwin_form kein Array mit über 600 Elementen ist, die du mit magic numbers indizierst. :mrgreen:

HeikoAdams 27. Apr 2010 10:14

Re: DCC Fehler: Zu viele lokale Konstanten. Verwenden Sie...
 
Delphi-Referenz durchsuchenFormat ist Dein Freund, um die Prozedur zu kürzen und Teile in andere Prozeduren auszulagern ;)

Und sprechende Namen für Deine Konstanten/Variablen/Objekte wären auch ganz nett 8-)

hoika 27. Apr 2010 10:17

Re: DCC Fehler: Zu viele lokale Konstanten. Verwenden Sie...
 
Hallo,

Delphi-Quellcode:
if query10.fieldbyname('textbrand').IsNull then   // bei #1 Zeile 49
begin
  Proc1(query10);
end
else
begin
  Proc2(query10);
end;
Heiko

Major1337 27. Apr 2010 11:46

Re: DCC Fehler: Zu viele lokale Konstanten. Verwenden Sie...
 
Danke für die Hinweise. Habe die Strings nun in AnsiString umgewandelt, klappt ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz