Ĺadny brzuch
Co oznacza błąd:
Too many local constants. Use shorter procedures
można go jakoś ominąć ???
dodam, że pojawia się on przy tym kodzie:
end; end; end; end; end; end; end; end;
który wcześniej był ok, a teraz jak się tego nazbierało więcej (end;) to jest błądzik...
Użytkownik akuku99 edytował ten post 11 listopad 2006, 12:22
Gdzie? Kiedy? <_<
przed chwilą <_< ...
bo mam taki kodzik:
begin if Edit1.Text= 'Bartek' then begin Memo1.Lines.Add('super imię !'); end else ShowMessage('Brak imienia w bazie !); end;
i mam ze 100 takich właśnie w jednej procedurce jednego buttona.
Użytkownik akuku99 edytował ten post 11 listopad 2006, 11:01
przyznam ze takiego jeszcze nie widzialem ^^
za duzo stalych lokalnych czyli pewnie chodzi o imiona (stale ktorych uzywasz w IF'ie)
albo skroc kod, albo sprobuj przeniesc do globalnej procedury albo stale przenies gdzies indziej ;)
Optymalizuj kod. Np zamiast setek if..then..else zrób dodatkową procedurę która ma sprawdzać jakie imię było jej przekazane i zwracać odpowiedni tekst. Jednak to, co ma zwrócić najlepiej odczytuj z zewnętrznego pliku (np ini) wtedy nie będzie trzeba aż tylu if..then..end...
przykład (wywołanie):
memo1.lines.add(Sprawdz(edit1.text));
+ funkcja Sprawdz (trzeba ją jeszcze na początku zadeklarować..):
function Sprawdz (imie: string): string; begin var ini:tinifile; //+ do uses wrzuc inifiles begin ini := tinifile.create(extractfilepath(application.exename)+'db.ini'); result := ini.readstring('main', imie, 'Brak imienia w bazie!'); end; end;
i pliczek db.ini:
[main] ania=fajne imie! pawel=jakiestam imie! bleble=blabla
jak jest dane imie w bazie to jest ok, ale jak nie ma to wychodzi błąd
Brak imienia w bazie! i bardzo dobrze lecz jeżeli pole edit1 jest puste i nacisnę na button to jest błąd access violation.. jak to naprawić ??
Użytkownik akuku99 edytował ten post 11 listopad 2006, 17:34
To wtedy sprawdzasz czy Edit1 nie jest pusty ;)
if not Edit1.Text <> '' then //sprawdzamy imię
Użytkownik JaCkObS edytował ten post 11 listopad 2006, 17:42
ale jak to dodać do tej funkcji ?? w którym miejscu ?
Użytkownik akuku99 edytował ten post 11 listopad 2006, 17:51
Na początek...
No jeśli używasz tej funkcji co Ci podał Einzeinbleth to zmodyfikuj sobie do: function Sprawdz (imie: string): string; begin var ini:tinifile; //+ do uses wrzuc inifiles begin ini := tinifile.create(extractfilepath(application.exename)+'db.ini'); if imie<>'' then result := ini.readstring('main', imie, 'Brak imienia w bazie!'); end; end;
wiem ze sie czepiam, ale widze ze kolega akuku99 dopiero zaczyna i chyba warto sie uczyc od poczatku dobrych nawykow ...
function Sprawdz (imie: string): string; begin var ini:tinifile; //+ do uses wrzuc inifiles begin if imie<>'' then begin ini := tinifile.create(extractfilepath(application.exename)+'db.ini'); result := ini.readstring('main', imie, 'Brak imienia w bazie!'); ini.free; end; end; end;
po co w ogole tworzyc tinifile jesli imie jest puste?
i zwalniac jesli utworzymy ... :)
dzięki Ci migajek ;) przeprawiłem na twój kod.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Too many local constants. Use shorter procedures
można go jakoś ominąć ???
dodam, że pojawia się on przy tym kodzie:
end; end; end; end; end; end; end; end;
który wcześniej był ok, a teraz jak się tego nazbierało więcej (end;) to jest błądzik...
Użytkownik akuku99 edytował ten post 11 listopad 2006, 12:22
Gdzie? Kiedy? <_<
przed chwilą <_< ...
bo mam taki kodzik:
begin if Edit1.Text= 'Bartek' then begin Memo1.Lines.Add('super imię !'); end else ShowMessage('Brak imienia w bazie !); end;
i mam ze 100 takich właśnie w jednej procedurce jednego buttona.
Użytkownik akuku99 edytował ten post 11 listopad 2006, 11:01
przyznam ze takiego jeszcze nie widzialem ^^
za duzo stalych lokalnych czyli pewnie chodzi o imiona (stale ktorych uzywasz w IF'ie)
albo skroc kod, albo sprobuj przeniesc do globalnej procedury albo stale przenies gdzies indziej ;)
Optymalizuj kod. Np zamiast setek if..then..else zrób dodatkową procedurę która ma sprawdzać jakie imię było jej przekazane i zwracać odpowiedni tekst. Jednak to, co ma zwrócić najlepiej odczytuj z zewnętrznego pliku (np ini) wtedy nie będzie trzeba aż tylu if..then..end...
przykład (wywołanie):
memo1.lines.add(Sprawdz(edit1.text));
+ funkcja Sprawdz (trzeba ją jeszcze na początku zadeklarować..):
function Sprawdz (imie: string): string; begin var ini:tinifile; //+ do uses wrzuc inifiles begin ini := tinifile.create(extractfilepath(application.exename)+'db.ini'); result := ini.readstring('main', imie, 'Brak imienia w bazie!'); end; end;
i pliczek db.ini:
[main] ania=fajne imie! pawel=jakiestam imie! bleble=blabla
jak jest dane imie w bazie to jest ok, ale jak nie ma to wychodzi błąd
Brak imienia w bazie! i bardzo dobrze lecz jeżeli pole edit1 jest puste i nacisnę na button to jest błąd access violation.. jak to naprawić ??
Użytkownik akuku99 edytował ten post 11 listopad 2006, 17:34
To wtedy sprawdzasz czy Edit1 nie jest pusty ;)
if not Edit1.Text <> '' then //sprawdzamy imię
Użytkownik JaCkObS edytował ten post 11 listopad 2006, 17:42
ale jak to dodać do tej funkcji ?? w którym miejscu ?
Użytkownik akuku99 edytował ten post 11 listopad 2006, 17:51
Na początek...
No jeśli używasz tej funkcji co Ci podał Einzeinbleth to zmodyfikuj sobie do: function Sprawdz (imie: string): string; begin var ini:tinifile; //+ do uses wrzuc inifiles begin ini := tinifile.create(extractfilepath(application.exename)+'db.ini'); if imie<>'' then result := ini.readstring('main', imie, 'Brak imienia w bazie!'); end; end;
wiem ze sie czepiam, ale widze ze kolega akuku99 dopiero zaczyna i chyba warto sie uczyc od poczatku dobrych nawykow ...
function Sprawdz (imie: string): string; begin var ini:tinifile; //+ do uses wrzuc inifiles begin if imie<>'' then begin ini := tinifile.create(extractfilepath(application.exename)+'db.ini'); result := ini.readstring('main', imie, 'Brak imienia w bazie!'); ini.free; end; end; end;
po co w ogole tworzyc tinifile jesli imie jest puste?
i zwalniac jesli utworzymy ... :)
dzięki Ci migajek ;) przeprawiłem na twój kod.