Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите найти ошибку при создании курсора / 18 сообщений из 18, страница 1 из 1
21.04.2011, 21:47
    #37227593
rekki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку при создании курсора
Помогите разобраться, вроде все правильно но курсор не создается (или не заносятся в него записи).
Код: plaintext
1.
2.
CREATE CURSOR cur7 (tab_no int( 4 ), groupa c( 20 ), godnost c( 5 ), nazv_voenk c( 50 ), kat c( 6 ), sostav c( 20 ), zvanie c( 16 ), voen_spec c( 25 ), spec_uchet int( 4 ), fio c( 70 ), photo memo( 4 ))
SELECT voinskiy.tab_no, voinskiy.groupa, voinskiy.godnost, voinskiy.nazv_voenk, voin2.kat, voin2.sostav, voin2.zvanie, voin2.voen_spec, voin3.spec_uchet, overall.fio, overall.photo ;
FROM voinskiy INNER JOIN overall ON voinskiy.tab_no = overall.tab_no INNER JOIN voin2 ON voinskiy.tab_no = voin2.tab_no INNER JOIN voin3 ON voinskiy.tab_no = voin3.tab_no INTO CURSOR cur7

=Модель выглядит так
...
Рейтинг: 0 / 0
22.04.2011, 06:35
    #37227854
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку при создании курсора
CREATE CURSOR - это лишнее, SELECT создает курсор.
Если курсор получается пустой - смотри что в исходных данных.
Дописывай запрос по частям. Сделай сначала
Код: plaintext
SELECT * FROM voinskiy 
потом
Код: plaintext
SELECT * FROM voinskiy INNER JOIN overall ON voinskiy.tab_no = overall.tab_no
и т.д.
На котором шаге пустой курсор получишь - смотри что в последней добавленной таблице записано.
...
Рейтинг: 0 / 0
22.04.2011, 08:44
    #37227917
rekki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку при создании курсора
Спасибо буду пробывать. Но там по идее в одной из таблиц может отсутствовать значение с указаным табельным номером, т.е. должны пустые значения добавляться в курсор. Но пока я сделал чтобы все значения были заполнены.
...
Рейтинг: 0 / 0
22.04.2011, 08:51
    #37227924
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку при создании курсора
Почитай что означает INNER JOIN
Если значения могу отсутствовать - надо LEFT JOIN использовать
...
Рейтинг: 0 / 0
22.04.2011, 10:10
    #37228031
rekki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку при создании курсора
Спасибо очень помогли.
...
Рейтинг: 0 / 0
22.04.2011, 10:56
    #37228135
rekki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку при создании курсора
Еще вопросик если можно:
Сделал все через LEFT JOIN, при отсутствии некоторых значений поля заполняются .NULL. я хочу эти значения выводить на форму как " " или в некоторых случаях вообще не открывать эту вкладку, но на проверку ничего не получается проверить.
Код: 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.
IF cur7.tab_no = .NULL. 
MESSAGEBOX("Íå ñîñòîèò íà âîèíñêîì ó÷åòå",  0 + 64 )
thisform.pageframe1.Page1.Activate 
ELSE
IF cur7.kat = .NULL.
thisform.pageframe1.Page7.Text3.Value = ""
thisform.pageframe1.Page7.Text4.Value = ""
thisform.pageframe1.Page7.Text5.Value = ""
thisform.pageframe1.Page7.Text6.Value = ""
ELSE
IF cur7.spec_uchet = .NULL.
thisform.pageframe1.Page7.Text9.Value = ""
ELSE
thisform.pageframe1.Page7.Text9.Value = ALLTRIM(STR(cur7.spec_uchet))
ENDIF
thisform.pageframe1.Page7.Text3.Value = ALLTRIM(cur7.kat)
thisform.pageframe1.Page7.Text4.Value = ALLTRIM(cur7.sostav)
thisform.pageframe1.Page7.Text5.Value = ALLTRIM(cur7.zvanie)
thisform.pageframe1.Page7.Text6.Value = ALLTRIM(cur7.voen_spec)
ENDIF
thisform.pageframe1.Page7.Text1.Value = ALLTRIM(STR(cur7.tab_no))
thisform.pageframe1.Page7.Text2.Value = ALLTRIM(cur7.groupa)
thisform.pageframe1.Page7.Text7.Value = ALLTRIM(cur7.godnost)
thisform.pageframe1.Page7.Text8.Value = ALLTRIM(cur7.nazv_voenk)
thisform.pageframe1.Page7.Text10.Value = ALLTRIM(cur7.fio)
thisform.pageframe1.Page7.Image2.Picture = cur7.photo
ENDIF
...
Рейтинг: 0 / 0
22.04.2011, 10:57
    #37228139
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку при создании курсора
rekki,
IIF(ISNULL(cur7.tab_no), "", cur7.tab_no)
...
Рейтинг: 0 / 0
22.04.2011, 11:02
    #37228157
rekki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку при создании курсора
Спасибо буду пробывать.
...
Рейтинг: 0 / 0
22.04.2011, 11:05
    #37228167
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку при создании курсора
rekki,

либо NVL, либо SET NULLDISPLAY, либо св-во контролов NULLDISPLAY.
...
Рейтинг: 0 / 0
22.04.2011, 11:16
    #37228190
rekki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку при создании курсора
Спасибо.
...
Рейтинг: 0 / 0
22.04.2011, 11:20
    #37228198
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку при создании курсора
rekkiIF cur7.tab_no = .NULL. Грабли номер раз. С null нельзя сравнивать. Можно только проверять его наличие. If isnull(cur7.tab_no)[quot]
Остальное я бы переписал так:

Код: 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.
If IsNull(cur7.tab_no)
	Messagebox("Не состоит на воинском учете",  0 + 64 )
	Thisform.pageframe1.Page1.Activate
Else
	With Thisform.pageframe1.Page7
		If Isnull(cur7.kat)
			.Text3.Value = ""
			.Text4.Value = ""
			.Text5.Value = ""
			.Text6.Value = ""
		Else
			If Isnull(cur7.spec_uchet)
				.Text9.Value = ""
			Else
				.Text9.Value = Ltrim(Str(cur7.spec_uchet))
			Endif
			.Text3.Value = Alltrim(cur7.kat)
			.Text4.Value = Alltrim(cur7.sostav)
			.Text5.Value = Alltrim(cur7.zvanie)
			.Text6.Value = Alltrim(cur7.voen_spec)
		Endif
		.Text1.Value = Alltrim(Str(cur7.tab_no))
		.Text2.Value = Alltrim(cur7.groupa)
		.Text7.Value = Alltrim(cur7.godnost)
		.Text8.Value = Alltrim(cur7.nazv_voenk)
		.Text10.Value = Alltrim(cur7.fio)
		.Image2.Picture = cur7.photo
	Endwith
Endif
...
Рейтинг: 0 / 0
22.04.2011, 22:22
    #37229823
rekki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку при создании курсора
Sergey Sizov,

Я примерно так и сделал, спасибо за ответ
...
Рейтинг: 0 / 0
28.04.2011, 16:06
    #37238530
rekki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку при создании курсора
Еще одна проблема



В чем может быть дело.
Код на всякий случай
Код: 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.
IF MESSAGEBOX("Вы действительно хотите удалить текущего работника?", 4 + 32 + 256 )= 6 
del=RECNO()
DELETE from overall where RECNO()=del
DELETE from edu where RECNO()=del
DELETE from edu2 where RECNO()=del
DELETE from prev_mesto where RECNO()=del
DELETE from profession where RECNO()=del
DELETE from passport where RECNO()=del
DELETE from family where RECNO()=del
DELETE from family2 where RECNO()=del
DELETE from dol where RECNO()=del
DELETE from voin1 where RECNO()=del
DELETE from voin2 where RECNO()=del
DELETE from voin3 where RECNO()=del
CLOSE DATABASES
PACK overall
PACK edu
PACK edu2
PACK prev_mesto
PACK profession
PACK passport
PACK family
PACK family2
PACK dol
PACK voin1
PACK voin2
PACK voin3
PUBLIC opened
....
...
Рейтинг: 0 / 0
28.04.2011, 16:40
    #37238647
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку при создании курсора
rekki,

Если кратко - команда PACK требует монопольного открытия таблицы, что не всегда возможно. Подробнее ищи в форуме или в хэлпе.
После каждого удаления PACK делать не надо. Достаточно работать c SET DELETED ON
О том когда делать PACK тоже в форуме поищи, много написано.
...
Рейтинг: 0 / 0
28.04.2011, 16:48
    #37238683
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку при создании курсора
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
del=RECNO()
DELETE from overall where RECNO()=del
DELETE from edu where RECNO()=del
DELETE from edu2 where RECNO()=del
DELETE from prev_mesto where RECNO()=del
DELETE from profession where RECNO()=del
DELETE from passport where RECNO()=del
DELETE from family where RECNO()=del
DELETE from family2 where RECNO()=del
DELETE from dol where RECNO()=del
DELETE from voin1 where RECNO()=del
DELETE from voin2 where RECNO()=del
DELETE from voin3 where RECNO()=del
УЖОС !!!

RECNO() - возвращает номер текущей записи в текущей рабочей области (таблице)
Т.е. ты сначала получил номер текущей записи непонятно от какой рабочей области, а потом поудалял в разных таблицах запись с этим номером.

Кстати если надо удалить текущую запись в MyTable.dbf, то пишется так:
Код: plaintext
delete in MyTable
...
Рейтинг: 0 / 0
28.04.2011, 17:09
    #37238751
rekki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку при создании курсора
Нас в универе так учили, может я эти знания неправильно применяю, но так. А суть такая: несколько таблиц связанных, на форме отображаются значения из них, по нажатию кнопки надо все записи из всех таблиц (с текущим tab_no) удалить.
...
Рейтинг: 0 / 0
28.04.2011, 17:11
    #37238760
rekki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку при создании курсора
Кстате все записи сводятся в один курсор, значения которого собственно и отображаются на форме.
...
Рейтинг: 0 / 0
28.04.2011, 17:13
    #37238769
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите найти ошибку при создании курсора
rekkiНас в универе так учили, может я эти знания неправильно применяю, но так. А суть такая: несколько таблиц связанных, на форме отображаются значения из них, по нажатию кнопки надо все записи из всех таблиц (с текущим tab_no) удалить.
Ну так и бери tab_no причем тут RECNO() ?
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите найти ошибку при создании курсора / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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