Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
14-88193
Ahmad K
2003-03-09 13:59
2003.03.27
Автомотизация тестирования прог...


3-87874
Roki
2003-03-07 12:33
2003.03.27
Как в IB(FireBird) добавить ограничение на значение поля?


14-88155
Новачок
2003-03-13 10:40
2003.03.27
w2k


1-87995
Тундра
2003-03-13 09:54
2003.03.27
ExcelApplication


3-87787
Олеся
2003-03-08 06:40
2003.03.27
DecisionCube and IBQuery





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский