Форум: "Основная";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];
ВнизОшибка при работе программы, идет остановка, как при трасировке.. Найти похожие ветки
← →
Elena © (2005-02-04 09:55) [0]Доброе время суток всем. Простите за глупый вопрос, но не знаю куда еще обратиться...
В данном цикле есть много if вложенных и хоть остановка не стоит , при отладке программы , делфи все равно останавливается. В чем может быть причина ошибка делфи или алгоритма?
while not DM.Table2.Eof do
begin
for j:=1 to i do
begin
dka:=-1;
dkp:=-1;
if then
begin
if условие then
begin
dka:=число;
end;
end;
if условие then
begin
if then
begin
dkp:=число
end
end;
if (dka<>-1) and (dkp<>-1) then
begin
действие
end
else
begin
if (dka=-1) and (dkp<>-1) then
begin
действие
end
else
begin
if (dka<>-1) and (dkp=-1) then
begin
действие
end
end;
if (dka=-1) and (dkp=-1) then
действие
end;
end;
DM.Table2.Next;
end;
на выделенном if всегда идет остановка....
← →
_vox_ (2005-02-04 12:29) [1]> и хоть остановка не стоит , при отладке программы , делфи все равно останавливается
При отладке Delphi и должна останавливатся, причём на каждой строке
← →
Elena © (2005-02-04 12:37) [2]извините за неточность, выражу свою мысль точнее, при запуске программы из Делфи, т.е. при нажатии F9.
← →
R © (2005-02-04 12:44) [3]Внимательнее с Else begin end
← →
Elena © (2005-02-04 13:07) [4]все перепроверила кучу раз все begin, end, else и if все синтаксису соответствует, что самое интересное что прога рабочая, exe-шник отрабатывает без проблем, а вот в делфи такая ситуация, причем после некоторого кол-ва раз нажатия продолжения работы когда она стопорится все отлично отрабатывается.... Делфи только что преустановила , безрезультатно....:-((((
← →
R © (2005-02-04 13:16) [5]Да действительно с Else begin end
все правильно.
Ну тогда трудно сказать что за прикол такой.
А останов выглядит как, я имею ввиду красное выделение строки или иное...
← →
esu © (2005-02-04 13:17) [6]И ни слова не пишет ? Никакой ошибки не выскакивает ?
← →
Elena © (2005-02-04 13:18) [7]ничего , просто на данном месте приостанавливает работу программы...:-(((
← →
esu © (2005-02-04 13:18) [8]Есть у меня подозрение что дело где-то в этих "действие" :) Можно код целиком, начиная скажем с DM.Table2.First
← →
Digitman © (2005-02-04 13:19) [9]что-то какая-тя каша страшная в алгоритме ...
← →
_vox_ (2005-02-04 13:25) [10]Можно попробовать изменить структуру текста - добавить пару пустых строк перед проблемным оператором или разбить оператор на несколько строк. Если отлаживать код по F8 что происходит на этом месте ??? Какие значения имеют переменные dka, dkp во время отладки на этом операторе ?
← →
Elena © (2005-02-04 13:26) [11]DM.Table2.First;
while not DM.Table2.Eof do
begin
for j:=1 to i do
begin
dka:=-1;
dkp:=-1;
s:=datetostr(DM_date.masdat[j]);
sd:=copy(s,1,2);
if DM.temp2.FindKey([DM_date.masdat[j],"840",DM.Table2.FieldByName("Schet").AsString])=true then
begin
if DM.Kurs.FindKey([DM_date.masdat[j],"840"])=true then
begin
dka:=DM.temp2.fieldbyname("3_s").AsFloat*DM.Kurs.fieldbyname("kurs").AsFloat;
Unit1.okr(dka);
end;
end;
if DM.temp2.FindKey([DM_date.masdat[j],"978",DM.Table2.FieldByName("Schet").AsString])=true then
begin
if DM.Kurs.FindKey([DM_date.masdat[j],"978"])=true then
begin
dkp:=DM.temp2.fieldbyname("3_s").AsFloat*DM.Kurs.fieldbyname("kurs").AsFloat;
Unit1.okr(dkp);
end
end;
if (dka<>-1) and (dkp<>-1) then
begin
DM.Table2.Edit;
DM.Table2.FieldByName(floattostr(strtofloat(sd)+3)+"_s").AsFloat:=dka+dkp;
DM.Table2.Post;
end
else
begin
if (dka=-1) and (dkp<>-1) then
begin
DM.Table2.Edit;
DM.Table2.FieldByName(floattostr(strtofloat(sd)+3)+"_s").AsFloat:=dkp;
DM.Table2.Post;
end
else
begin
if (dka<>-1) and (dkp=-1) then
begin
DM.Table2.Edit;
DM.Table2.FieldbyName(floattostr(strtofloat(sd)+3)+"_s").AsFloat:=dka;
DM.Table2.Post;
end
end;
if (dka=-1) and (dkp=-1) then
so:=so+" "+DM.Table2.fieldbyname("Schet").AsString;
end;
end;
DM.Table2.Next;
end;
простите за кашу в алгоритме не спорю что он не продуман, но просто очень тяжело, во всяком случае мне, делать доработки о которых речи сначало и не шло... воти приходится изврашаться...
← →
Elena © (2005-02-04 13:31) [12]dka и dkp это переменные, получаемые путем взятия из одной таблицы валюту перемножаемую на курс, т.е. если они изменяются, то становятся или положительными или нулем. При пошаговом просмотре все идет хорошо, т.е. как надо так и идет. Сейчас попробую вообще избавиться от этих if, только вот все равно интересно в чем же ошибка, чтобы на будущие в это опять не вляпаться....
← →
esu © (2005-02-04 13:31) [13]А какой тип у этих dka, dkp ?
← →
Elena © (2005-02-04 13:34) [14]double
← →
Elena © (2005-02-04 13:42) [15]>R © (04.02.05 13:16) [5]
А останов выглядит как, я имею ввиду красное выделение строки или иное...
Простите не ответила не увидела, строка выделяется синем цветом, как пошаговой трасировке, т.е. как при нажатии клавиши F7.
← →
esu © (2005-02-04 13:45) [16]мда, ну вам этот код и насчитает...
Вообщем некорректно прямое сравнение dka, dkp с 1 или -1. Ну и delphi видимо дает по этому поводу немой намек (хотя должен бы и не немой)
Если вы считаете деньги нужно использовать currency... Но это все в любом случае лучше "переписать нафиг" (c)
← →
Elena © (2005-02-04 14:14) [17]а в чем некорректность сравнения 2-х чисел? С currency учту на будущие, но сейчас переписывать все нафиг....
и почему думаете что данный код будет некорректно работать? объясните, пожалуйста. :-)
← →
Александр Иванов © (2005-02-04 14:16) [18]Elena © (04.02.05 14:14) [17]
Вещественные числа принято сравнивать так:
(value2-value1)<0.000001
← →
Elena © (2005-02-04 14:23) [19]Александр Иванов © ,esu ©
хорошо сравнение это не проблема делаю trunc и все , на сколько я знаю сравнение целых чисел вполне корректно. Но ситуацию это не спасает.....уже проверила....
← →
msguns © (2005-02-04 14:25) [20]О боже, никогда еще не видел, чтоб так хитровыстиранно пересчитываались валюты. А что, на запросы в конторе вето ?
>Александр Иванов © (04.02.05 14:16) [18]
>(value2-value1)<0.000001
Очень ценное замечание при работе с флоатом.
Кстати, а какая необходимость была поле курса в БД вешать на флоат ?
← →
msguns © (2005-02-04 14:29) [21]Кстати, бог с ними, с запросами, можно обойтись и без них. А вот почему нельзя загнать текущие курсы в массив и шариться по нему, вместо того чтобы прыгать по таблице ? Ведь валют не может быть тысячи, как и счетов (если это не банк, конечно)
← →
_vox_ (2005-02-04 14:31) [22]имхо остается два варианта
1.надо копать глубже - смотреть функцию Okr и DM_date.masdat[j]. Большая часть "чудес" возникает из-за неправильной работы с памятью.
2.ошибка Delphi
← →
Elena © (2005-02-04 14:38) [23]ЛЮДИ это моя первая программа, в последующих я использовала и currency и запросы, когда уже писала сетевые проги и т.п. эта была написанна год назад, это локальная прога, таблички парадоксовские, если можно использовать индексы то почему бы и нет. Сейчас год спустя после ее сдачи мне надо сделать доработку, она небольшая по сравнению со всей прогой,прога очень громозка и переписать ее пока нет возможности так как на мне очень много задач висит, поэтому, пожалуйста, кто-нибудь может сказать что-нибудь по данному вопросу?
← →
Elena © (2005-02-04 14:49) [24]_vox_ фукция okr это округление до 1000 по такому алгоритму весь я его не превожу, так как данный блок просто несколько раз повторяется, меняется только порядок.
k:=ch*100;
k1:=k+0.5;
k2:=trunc(k1);
k2:=k2/100;
ch:=k2;
DM_date.masdat[j] это массив дат, причем не динамический, так как всего лишь от 1 до 31.
← →
msguns © (2005-02-04 15:11) [25]>Elena © (04.02.05 14:49) [24]
>по такому алгоритму весь я его не превожу, так как данный блок просто несколько раз повторяется, меняется только порядок.
Засстрелиться (Соловьев (с))
← →
Elena © (2005-02-04 15:16) [26]msguns © (04.02.05 14:29) [21]
А вот почему нельзя загнать текущие курсы в массив и шариться по нему, вместо того чтобы прыгать по таблице ? Ведь валют не может быть тысячи, как и счетов (если это не банк, конечно)
В принципе можно конечно , но вся проблема в том что банк... и я не знаю чего они захотят завтра...тем более каждый день ---новый курс...
← →
Elena © (2005-02-04 15:21) [27]msguns © не стреляйтесь , пожалуйста, а лучше приведите пример алгоритма корректного округления.....
← →
Konstantin_M (2005-02-04 15:25) [28]Возможно несоответствие версий файлов FILE1.PAS и FILE1.DCU.
← →
Elena © (2005-02-04 15:34) [29]Konstantin_M а поясните свой ответ, пожалуйста, потому что я не поняла какие мне делать выводы :-))
← →
Konstantin_M (2005-02-04 15:41) [30]Проверить расположение файла .dcu
Project
Options
Directories <Unit Output Directory>
← →
msguns © (2005-02-04 15:41) [31]>Elena © (04.02.05 15:21) [27]
>msguns © не стреляйтесь , пожалуйста, а лучше приведите пример алгоритма корректного округления.....
До сотых копейки (как пример):
m := Round(m*10000)/10000;
А кардинального решения все равно не даст, т.к. в базу запишется флоат, т.е. с "хвостом". Но это не должно волновать, т.к. он будет не ооочень маленьким.
← →
Konstantin_M (2005-02-04 15:43) [32]Еще список в <Search path>, нет ли в нем папки со старым DCU.
← →
Elena © (2005-02-04 15:53) [33]msguns © До сотых копейки (как пример):
m := Round(m*10000)/10000;
Это не совсем корректно, так как в зависимости от сопроцессора машины, винды и делфи округление идет +-1, у меня при это будут теряться тысячи, согласитесь значительная погрешность.....
например как round оценит 23,5 как 23 или 24 ?
← →
msguns © (2005-02-04 15:59) [34]>Elena © (04.02.05 15:53) [33]
>Это не совсем корректно, так как в зависимости от сопроцессора машины, винды и делфи округление идет +-1, у меня при это будут теряться тысячи, согласитесь значительная погрешность.....
Я уж умножил сначала !!! Мало на 10000, умножьте на мульон, мульярд.
>например как round оценит 23,5 как 23 или 24 ?
Вам надо по-бухгалтерски или по математически (не смейтесь - разница есть). Если по математически, то я уже все сказал, если бухгалтерски, то да, надо писать свою фичу (может, и есть стандартная, но я про такую не слыхивал). Но я лично сомневаюсь, т.к. Вам, скорее всего надо перевести из тугриков в пиастры, а не вычислять НДС или отчисление в ПФ. Или я не прав ?
← →
Elena © (2005-02-04 16:02) [35]msguns © мне как раз надо бугалтерию...поэтому и приходиться извращаться....
← →
msguns © (2005-02-04 16:07) [36]>Elena © (04.02.05 16:02) [35]
>msguns © мне как раз надо бугалтерию...поэтому и приходиться извращаться....
Так вот про извращение и говорил. Ведь то, что Вы выложили, иначе и назвать-то трудно. Блин, была у меня библиотека с "бухгалтерскими" фичами, но на другой работе.. Там были выверты и с датами, и с периодами, и с округлениями вроде тоже были. Кстати, округление, насколько помню, совсем мало "весило". Если Вы мне напомните правило, я Вам попробую "освежить" его в памяти. Там что-то о знаке после 4, да ?
← →
Elena © (2005-02-04 16:08) [37]Konstantin_M очень подозреваю что вы правы, потому что раньше все хорошо работало, но с течением обстоятельств пришлось откатыватся, а по правильному это было сделать лень, точнее просто зашла в копии и правила там, а не в основной папке с кодом, который кстати находится в следующей доработке (поэтому и не стала править в ней...Господи когда пользователи смогут уже точно формулировать то что они хотят....:-)) Скорее всего в этом и проблема, буду разбираться, к сожалению что-то ему еще не нравиться, что не входит в ваш перечень :-))))
← →
msguns © (2005-02-04 16:10) [38]И еще. Леночка, сделайте одолжение, осчасливьте старика, заставьте Бога молить,- сделайте массив курсов и
НЕ МУЧАЙТЕ ДАТАСЕТ !!!
Ну, жалко мне этих бедных созданий. Сердце кровью обливается, когда по ним, как рашпилем, ерзают всякими финдферстами и финднекстами.
← →
Elena © (2005-02-04 16:13) [39]msguns © проблема в цифре 5 после запятой, одни считают что округлять надо в большую сторону другие в меньшую, т.е. есть уже пример из жизни когда одна и таже прога на разных машинах считает по разному. Вот в этом то и основная проблема в плане округления...
← →
Elena © (2005-02-04 16:21) [40]msguns © не могу устоять перед такой слезной просьбой и обязательно исправлю, но фишка все же в том что это не влияет на работу проги :-)))) Мне кажется все-таки дело в делфи, так что я иду домой, мучать делфи там :-))))
Спасибо всем большое за помощь :-)))
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.041 c