powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / ошибка 96 (ошибка вложения)
12 сообщений из 12, страница 1 из 1
ошибка 96 (ошибка вложения)
    #37081300
alyssa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
изменила скрипт с такого варианта:
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
ошибка 96 (ошибка вложения)
    #37081400
fore5ta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
ошибка 96 (ошибка вложения)
    #37081443
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.

И ошибку всё-таки приведите целиком.
...
Рейтинг: 0 / 0
ошибка 96 (ошибка вложения)
    #37081499
alyssa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
ошибка 96 (ошибка вложения)
    #37081505
alyssa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
ошибка 96 (ошибка вложения)
    #37081514
alyssa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alyssado while i <= 10


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

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

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

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

Эта ошибка показывает не ту строку в которой неправильно, ошибка где-то выше.
...
Рейтинг: 0 / 0
ошибка 96 (ошибка вложения)
    #37083272
alyssa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
ошибка 96 (ошибка вложения)
    #37083291
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
12 сообщений из 12, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / ошибка 96 (ошибка вложения)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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