Форум: "Потрепаться";
Текущий архив: 2003.03.27;
Скачать: [xml.tar.bz2];
ВнизВыстраданый совет... Найти похожие ветки
← →
Danilka (2003-03-05 09:25) [0]Никогда, ни при каких обстоятельствах, не следует использовать сторонние бесплатные компоненты в коммерческих проектах...
Иначе возникнет ситуация, когда ошибка именно в этой компоненте, а предъявить претензии некому - только себе... и приходится рыться в километрах чужих исходников, тогда, когда проект уже сдан, люди работают, и каждая минута задержки клиента...
Тут уже когда-то упоминали это, но прочуствуешь только когда по себе самому шарахнет... дурак учится на своих ошибках...
← →
stone (2003-03-05 09:30) [1]2 Danilka © (05.03.03 09:25)
> дурак учится на своих ошибках...
... а умный - на чужих :))
← →
Кот Бегемот (2003-03-05 09:33) [2]>рыться в километрах чужих исходников
RxLib & FreeReport перерыт мною лично несколько раз - и ниче зазорного в этом не вижу - ибо использовать надо не сдуру - а лишь после детального изучения :)
Всег благ - Кот Бегемот :)))
← →
Danilka (2003-03-05 10:10) [3]stone © (05.03.03 09:30)
...
Кот Бегемот © (05.03.03 09:33)
все верно, нефиг качать что попало с торри.нет...
Кто-нибудь может объяснить как такое происходит, есть вот-такая функция:
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
calc:=TCalcul.Create;
calc.Variables:=memo1.lines.Text;
calc.Formula:=edit1.Text;
s:=calc.Calc;
FreeAndNil(calc);
inc(i);
label1.Caption:="count:"+inttostr(i)+" vol:"+s;
end;
i - integer, объявленнвй в классе TForm1, в секции public.
TCalcul - класс, разбирающий мат. выражения, взял его на торри.нет, поленился сам рисовать (на свою голову), так вот,
после того, как эта процедура выполняется 89 раз (i=89), calc.Calc возвращает пустую строку, после чего, давим еще раз на эту кнопку и получаем аццесс виолейшен.
Почему???
Ведь этот нехороший calc прибивается, и не просто прибивается намертво, каждый раз создается заново, следовательно???
Ни в memo1, ни в edit1 ничего не меняю...
← →
Danilka (2003-03-05 10:15) [4]мое мат. выражение: x1+x2+x3...+x40
все переменные x1..x40 равны 1, первые 89 раз этот calc добросовестно вовзращает правильный результат вычисления, то есть число 40, а потом...
← →
Слесарь Матерящийся (2003-03-05 10:15) [5]В коммерческих проектах сторонние компоненты лучше не использовать.
А если использовать, то заказывать сторонним программистам за бабки ($$$); и подключать их (сторонних программистов) к проекту (временно).
← →
REA (2003-03-05 10:15) [6]А он наверно глобальные переменные держит или у него лимит на 89 запусков :)
← →
Danilka (2003-03-05 10:17) [7]Слесарь Матерящийся © (05.03.03 10:15)
Дык, обидно, споткнулся на такой фигне, разбор мат выражений, это-же классика, просто в этом модуле есть еще дополнительные мат. функции, поэтому я его и использовал, а он вон-как...
← →
Danilka (2003-03-05 10:18) [8]REA © (05.03.03 10:15)
посмотрел исходники - никаких глобальных переменных, и никакого лимита...
← →
troits (2003-03-05 10:24) [9]>Danilka © (05.03.03 10:18)
Мистика :)
← →
Leon Crom (2003-03-05 10:28) [10]
> Danilka © (05.03.03 09:25)
как вариант можно использовать ломаные триальные версии компонент, я понимаю что это не красиво, но слишком уж велико искушение, а самому написать что либо подобное не хватает фантазии усидчивости и знаний...
← →
Danilka (2003-03-05 10:30) [11]Leon Crom © (05.03.03 10:28)
дык, платные тоже могут быть кривыми, но, если ты их покупаешь, то потом можешь предьявить ошибки тому, кто их писал, и требовать их исправления, а вот со сломаных или халявных спроса нет...
← →
Fredericco (2003-03-05 10:30) [12]Я в таких случаях (акцесс виолятион), в качестве проверки создаю один раз в и один раз фрии. Иногда помогает.
Был случай, простая прога.
Мой объект. При иннициализации делаю крейт, при финализации фрее.
Иногда при инициализации ацсесс виолятион. Причем проверял отдельно: если объект уже создан повторное его создание ошибок не вызывало. ?? Помогло
If not Assign(MyObject) then MyObject:=TMyObject.Create(nil)
Попробуй, может поможет.
← →
Danilka (2003-03-05 10:32) [13]troits © (05.03.03 10:24)
не то слово...
нашел там внутри одну процедурку, deltree, она при каждом вызове Button1Click срабатывает радное кол-во раз...
Слово random в тексте модуля нигде не встречается...
← →
Danilka (2003-03-05 10:34) [14]Fredericco © (05.03.03 10:30)
дык, я примерно так сначала и делал. но в этом случае ацесс виолейшон срабатывает не на 89-й раз, а гораздо раньше...
← →
Leon Crom (2003-03-05 10:49) [15]если не в лом можешь выслать мне по мылу эту хрень, любопытно...
← →
Fredericco (2003-03-05 10:52) [16]Danilka © (05.03.03 10:34)
Сразу, или там на 5-й или 10-й?
← →
Danilka (2003-03-05 10:57) [17]Leon Crom © (05.03.03 10:49)
все выслал.
не знаю что я там натворил, вроде потрассировал пару раз, какие-то куски текста закомментарил, убрал комментарии, но теперь аццесс виолейшон дергается не на 90-й раз, а на 495-й...
← →
Danilka (2003-03-05 10:57) [18]Fredericco © (05.03.03 10:52)
когда как, но до 10-го не доходит...
← →
Leon Crom (2003-03-05 11:03) [19]
> Danilka ©
сейчас гляну
← →
NailS (2003-03-05 11:06) [20]
> Danilka © (05.03.03 10:57)
выложил бы ссылочку на этот компонент. А то так на торри его не видно.
← →
Danilka (2003-03-05 11:13) [21]NailS © (05.03.03 11:06)
http://www.tsoft.szm.com/calcul.zip
← →
Leon Crom (2003-03-05 11:20) [22]> Danilka ©
эта хрень по ходу определяет текущцю дату... это входит в условия задачи...
← →
Danilka (2003-03-05 11:32) [23]Leon Crom © (05.03.03 11:20)
а как это влияет? да и не нужна мне дата, у меня в формуле никаких операций с датой нет...
← →
Danilka (2003-03-05 11:33) [24]вообще, модуль работал без проблем, как часы, но до тех пор, пока у юзеров не стало появляться слишком много переменных...
чем больше переменных используется, тем больше вероятность возникновения ошибки.
← →
Leon Crom (2003-03-05 11:50) [25]по моему (хотя хер его знает на сколько это правильно) но там эта Deltree чето химичит с датами а точнее определяет номер текущей недели если это на фиг надо попробуй закоментировать
Delvek(t);
freemem(t);
в function TCalcul.deltree(t:PCalc_Tree):pointer;
перед эксептом...
если честно то я закоментил полностью делтри (вроде работает)
← →
DiamondShark (2003-03-05 11:53) [26]
> дык, платные тоже могут быть кривыми, но, если ты их покупаешь,
> то потом можешь предьявить ошибки тому, кто их писал, и
> требовать их исправления
Наивная девичья простота.
А те, кто их писал, предъявят лиценз агримент, где написано "...as is without warranty of any kind..." и в лучшем случае предложат заглянуть в баг-лист и купить новую версию. Вот тут-то вы и поймёте, что действительно "ass is".
А требовать чего-то можно только имея полноценный двусторонний договор.
← →
Danilka (2003-03-05 11:53) [27]я тоже думаю, что с ней не все впорядке... какие-то исключения валятся, а она на них ложит:
except;
end;
сейчас думаю как-бы ее полечить, не прибивая, не получится, придется убить...
← →
NailS (2003-03-05 11:55) [28]Посмотри вот это место в коде.
Было
procedure TCalcul.Addvek(t:pointer);
begin
inc(cVek);
if cVek>MaxVek then begin
MaxVek:=Maxvek+50; SetLength(fVek,MaxVek);
end;
PCalc_tree(t)^.id:=cVek;
fVek[cVek]:=t;
end;
Стало
procedure TCalcul.Addvek(t:pointer);
begin
inc(cVek);
// Здесь была бяка
if cVek> MaxVek - 1 then begin
// В условии расширения массива (чего спрашивается списки не использоваь)
MaxVek:=Maxvek+50; SetLength(fVek,MaxVek);
end;
PCalc_tree(t)^.id:=cVek;
fVek[cVek]:=t;
end;
Я догнал до 500 вычислений проблем не возникало.
← →
Anatoly Podgoretsky (2003-03-05 11:58) [29]Danilka © (05.03.03 10:10)
Кто-нибудь может объяснить как такое происходит, есть вот-такая функция:
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
calc:=TCalcul.Create;
calc.Variables:=memo1.lines.Text;
calc.Formula:=edit1.Text;
s:=calc.Calc;
FreeAndNil(calc);
inc(i);
label1.Caption:="count:"+inttostr(i)+" vol:"+s;
end;
Не знаю что там в компоненте, но у тебя необоснованное применение глобальной переменной calc, попробуй объявить ее в процедуре и убери эту хрень FreeAndNil, замени на Free
Подобное говорить о неверном дизайне, о попытке повторного использования и как правило ведет к ошибкам.
← →
Danilka (2003-03-05 12:06) [30]NailS © (05.03.03 11:55)
спасибо, сейчас посмотрю...
Anatoly Podgoretsky © (05.03.03 11:58)
procedure TForm1.Button1Click(Sender: TObject);
var
calc: TCalcul;
s:string;
begin
calc:=TCalcul.Create;
calc.Variables:=memo1.lines.Text;
calc.Formula:=edit1.Text;
s:=calc.Calc;
calc.free;
inc(i);
label1.Caption:="count:"+inttostr(i)+" vol:"+s;
end;
Результат тот-же самый, вылетает на том-же самом месте, вообще я начинал с того, что создавал calc при создании формы, но тогда аццесс виолейшон срабатывал гораздо быстрее... Потом стал его создавать в самой процедуре и прибивать с помощью free, чем немного отсрочил ошибку, потом заменил free на freeAndNil, что никак не повлияло на работу.
← →
Danilka (2003-03-05 12:10) [31]NailS © (05.03.03 11:55)
точно, здесь был глюк, спасибо огромное :)))
← →
Satirus (2003-03-12 19:51) [32]вот вы говорите о сторонных и плантых компонентах,
а мой шеф нашел ошибку в бесплатном индийском компоненте, причём требовалось только дописать в конец строки #10#13, а из-за этой херни валилась работа человека, который програмировал под соляркой на сях, и разбирал те файлы, которые сохранялись моим активиксом на серваке...
постараюсь назвать имя юнита и место, в котором это присходит
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.03.27;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.009 c