Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / ошибка 96 (ошибка вложения) / 12 сообщений из 12, страница 1 из 1
27.01.2011, 12:00
    #37081300
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 96 (ошибка вложения)
изменила скрипт с такого варианта:
y=0
qd=d2-d1+1
dd1=d1
dd2=d1

i=1
do while i<=qd
SELECT ;
ZANK.ANK_RN, ;
ZANK.JOBBEGIN, ;
ZANK.JOBEND, ;
1 as x ;
FROM ;
ZANK ;
WHERE (Zank.jobend <= dd2) or (Zank.jobend >= dd1) ;
INTO CURSOR R1

SELECT ;
sum(R1.X) as x2 ;
FROM ;
R1 ;
GROUP BY R1.X ;
INTO CURSOR R2

y=y+R2.x2
dd2=dd2+1
i=i+1
enddo

y=round(y/qd,1)
Messagebox("Среднесписочная численность"+" за период с: "+dtoc(d1)+" по: "+dtoc(d2)+" соcтавила "+allt(str(y,18,1))+" человек","Получите результат !")


вот до такого:

if (empty(d1))or(empty(d2))or(d2<d1)
Messagebox("Не верно введён период","Ошибка !")
return
else
y=0
qd=d2-d1+1
dd1=d1
dd2=d1
* Messagebox(qd)
i=1

do while i<=qd
SELECT ;
ZANK.ANK_RN, ;
ZANK.JOBBEGIN, ;
ZANK.JOBEND, ;
1 as x ;
FROM ;
ZANK ;
WHERE (Zank.jobend <= dd2) or (Zank.jobend >= dd1) ;
INTO CURSOR R1

SELECT ;
sum(R1.X) as x2 ;
FROM ;
R1 ;
GROUP BY R1.X ;
INTO CURSOR R2

y=y+R2.x2
dd2=dd2+1
i=i+1
enddo

y=round(y/qd,1)
Messagebox("Среднесписочная численность"+" за период с: "+dtoc(d1)+" по: "+dtoc(d2)+" соcтавила "+allt(str(y,18,1))+" человек","Получите результат !")
endif


если раньше неверно вычислял среднесписочную чиленность Y, то теперь вылетает с ошибкой 96 (ошибка вложения) и говорит что ошибка в строке: do while i<=qd
и дело конечно не в добавлении условия,
d1, d2 - переменные типа дата, задаваемые пользователем на форме
ZANK - название таблицы
qd - вычисляемая переменная - количество дней
select-ы работают, я их отдельно проверяла.
не понятно почему тот же самый код входил в цикл while а сейчас ругается на него?
все коды сохраняю в отдельных файликах, чтоб в любой момент откатиться до предыдущего работающего варианта, вот так открыла в блокноте предыдущий код и скопировала (на всякий случай если в новом коде где-то затесалась русская буква), всё-равно ошибка!
...
Рейтинг: 0 / 0
27.01.2011, 12:23
    #37081400
fore5ta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 96 (ошибка вложения)
alyssaвот до такого:

if (empty(d1))or(empty(d2))or(d2<d1)
Messagebox("Не верно введён период","Ошибка !")
return
else
if (empty(d1))or(empty(d2))or(d2<d1) на if (empty(d1)).or.(empty(d2)).or.(d2<d1) не поможет?
...
Рейтинг: 0 / 0
27.01.2011, 12:33
    #37081443
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 96 (ошибка вложения)
Код: plaintext
1.
2.
3.
4.
5.
6.
<...>
WHERE (Zank.jobend <= dd2) or (Zank.jobend >= dd1) ;
<...>
Messagebox("Среднесписочная численность";
+"  за период с:  "+dtoc(d1)+"  по:  "+dtoc(d2);
+"  соcтавила  "+allt(str(y, 18 , 1 ))+"  человек";
,"Получите результат !")

Может, я чего-то не понял, но по этому условию вернётся численность вообще всего населения, если dd1<=dd2 или численность всех за исключением интервала [dd2..dd1], если dd1>dd2. Поставьте там AND вместо OR.

И ошибку всё-таки приведите целиком.
...
Рейтинг: 0 / 0
27.01.2011, 12:47
    #37081499
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 96 (ошибка вложения)
tanglir
Код: plaintext
1.
2.
3.
4.
5.
6.
<...>
WHERE (Zank.jobend <= dd2) or (Zank.jobend >= dd1) ;
<...>
Messagebox("Среднесписочная численность";
+"  за период с:  "+dtoc(d1)+"  по:  "+dtoc(d2);
+"  соcтавила  "+allt(str(y, 18 , 1 ))+"  человек";
,"Получите результат !")

Может, я чего-то не понял, но по этому условию вернётся численность вообще всего населения, если dd1<=dd2 или численность всех за исключением интервала [dd2..dd1], если dd1>dd2. Поставьте там AND вместо OR.

И ошибку всё-таки приведите целиком.
нет там надо именно OR
я же сказала ошибка не в селектах. я их закоментировала даже,
i=1
do while i <= 10
* SELECT ;
ZANK.ANK_RN, ;
ZANK.JOBBEGIN, ;
ZANK.JOBEND, ;
1 as x ;
FROM ;
ZANK ;
WHERE (Zank.jobend <= d1) or (Zank.jobend >= d1) ;
INTO CURSOR R1

* SELECT ;
sum(R1.X) as x2 ;
FROM ;
R1 ;
GROUP BY R1.X ;
INTO CURSOR R2

* y=y+R2.x2
* d1=d1+1
i=i+1
enddo

всё-равно в цикл не входит

http://xmages.net/storage/10/1/0/a/6/upload/8ff720bd.jpg
...
Рейтинг: 0 / 0
27.01.2011, 12:48
    #37081505
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 96 (ошибка вложения)
fore5taalyssaвот до такого:

if (empty(d1))or(empty(d2))or(d2<d1)
Messagebox("Не верно введён период","Ошибка !")
return
else
if (empty(d1))or(empty(d2))or(d2<d1) на if (empty(d1)).or.(empty(d2)).or.(d2<d1) не поможет?
нет
...
Рейтинг: 0 / 0
27.01.2011, 12:52
    #37081514
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 96 (ошибка вложения)
alyssado while i <= 10


это я здесь уже решила попробовать сравнивать с константой
...
Рейтинг: 0 / 0
27.01.2011, 13:04
    #37081560
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 96 (ошибка вложения)
WHERE (Zank.jobbegin <= d1) or (Zank.jobend >= d1) ;
(принят не позднее) или (уволен не ранее), т.е. к одному человеку относится одно из условий, а не оба
если б опечатка влияла на эту ошибку, то при закомментированном селекте ошибки бы уже не было
...
Рейтинг: 0 / 0
27.01.2011, 13:28
    #37081677
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 96 (ошибка вложения)
стёрла всё оставила так:

i=1
do while i <= 10
i=i+1
enddo

всё-равно, та же ошибка!
...
Рейтинг: 0 / 0
27.01.2011, 13:39
    #37081746
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 96 (ошибка вложения)
та же фигня с циклом FOR
...
Рейтинг: 0 / 0
27.01.2011, 14:43
    #37082000
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 96 (ошибка вложения)
В коде из первого поста нет ошибок. Это весь код или в реальности выше еще что-то есть? там ничего не правила?

Для поиска таких ошибок: на коде правая кнопка мыши, "Beautify"
и смотреть чтобы IF заканчивался ENDIF, FOR - ENDFOR и т.д.

Эта ошибка показывает не ту строку в которой неправильно, ошибка где-то выше.
...
Рейтинг: 0 / 0
28.01.2011, 08:16
    #37083272
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 96 (ошибка вложения)
Dima TВ коде из первого поста нет ошибок. Это весь код или в реальности выше еще что-то есть? там ничего не правила?

Для поиска таких ошибок: на коде правая кнопка мыши, "Beautify"
и смотреть чтобы IF заканчивался ENDIF, FOR - ENDFOR и т.д.

Эта ошибка показывает не ту строку в которой неправильно, ошибка где-то выше.

даже если написать вот такой короткий код:

i=1
do while i <= 10
i=i+1
enddo

тоже скажете ошибка выше? я знаю что do должно заканчиваться enddo, for - endfor, if - endif. как в книге написано так и написала цикл, только потом в инете другой цикл нашла - for, поправила (это есь код, ничего выше нет):

for i = 1 to 2 step 1
Messagebox("С")
endfor

вот это работает. значит вы правы (добавив выше условие против кривых рук пользователей, которые могут забыть ввести период), перестаёт работать:

if (empty(d1))or(empty(d2))or(d2<d1)
Messagebox("Не верно введён период","Ошибка !")
return
else
y=0
qd=d2-d1+1

for i = 1 to qd step 1
SELECT ;
ZANK.ANK_RN, ;
ZANK.JOBBEGIN, ;
ZANK.JOBEND, ;
1 as x ;
FROM ;
ZANK ;
WHERE (Zank.jobbegin <= d1) or (Zank.jobend >= d1) ;
INTO CURSOR R1
SELECT ;
sum(R1.X) as x2 ;
FROM ;
R1 ;
GROUP BY R1.X ;
INTO CURSOR R2

y=y+R2.x2
d1=d1+1
endfor

y=allt(str(round(y/qd,1),18,1))
Messagebox("Среднесписочная численность"+" за период с: "+dtoc(d1)+" по: "+dtoc(d2)+" соcтавила "+y+" человек","Получите результат !")
endif

выдаёт ошибку 96 в строке 8: for i = 1 to qd step 1
а может просто не хватает где-то знака препинания? (а может лишний знак где-то)

*ещё я пробовала проверять qd на формат, написав в строке 7: Messagebox("qd")
вышло сообщение с числом. и константу вместо qd в 8й строке писала... не помогло.
...
Рейтинг: 0 / 0
28.01.2011, 08:31
    #37083291
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка 96 (ошибка вложения)
alyssaвыдаёт ошибку 96 в строке 8: for i = 1 to qd step 1
а может просто не хватает где-то знака препинания? (а может лишний знак где-то)

Правильно там все.
Вот добавил исходные данные, запустил и работает твой код без каких либо исправлений:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
d1 = date() -  1 
d2 = date() +  1 
create Cursor ZANK (ANK_RN i, JOBBEGIN d, JOBEND d)
insert into ZANK values ( 10 , date(), date())

If (Empty(d1))Or(Empty(d2))Or(d2<d1)
	Messagebox("Не верно введён период","Ошибка !")
	Return
Else
	Y= 0 
	qd=d2-d1+ 1 

	For i =  1  To qd Step  1 
		Select ;
			ZANK.ANK_RN, ;
			ZANK.JOBBEGIN, ;
			ZANK.JOBEND, ;
			 1  As x ;
			FROM ;
			ZANK ;
			WHERE (ZANK.JOBBEGIN <= d1) Or (ZANK.JOBEND >= d1) ;
			INTO Cursor R1
		Select ;
			sum(R1.x) As x2 ;
			FROM ;
			R1 ;
			GROUP By R1.x ;
			INTO Cursor R2

		Y=Y+R2.x2
		d1=d1+ 1 
	Endfor

	Y=Allt(Str(Round(Y/qd, 1 ), 18 , 1 ))
	Messagebox("Среднесписочная численность"+" за период с: "+Dtoc(d1)+" по: "+Dtoc(d2)+" соcтавила "+Y+" человек","Получите результат !")
Endif

Не там ты ошибку ищешь, сама же писала:
alyssaвсе коды сохраняю в отдельных файликах, чтоб в любой момент откатиться до предыдущего работающего варианта, вот так открыла в блокноте предыдущий код и скопировала (на всякий случай если в новом коде где-то затесалась русская буква), всё-равно ошибка!
Смотри окружающий код, вспоминай что еще правила.
Как вариант попробуй удалить файл MyProg.FXP, иногда бывают глюки из-за этого. Лучше все файлы FXP удали, это откомпилированные PRG, они сами появятся.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / ошибка 96 (ошибка вложения) / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]