powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите найти ошибку при создании курсора
18 сообщений из 18, страница 1 из 1
Помогите найти ошибку при создании курсора
    #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
Помогите найти ошибку при создании курсора
    #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
Помогите найти ошибку при создании курсора
    #37227917
rekki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо буду пробывать. Но там по идее в одной из таблиц может отсутствовать значение с указаным табельным номером, т.е. должны пустые значения добавляться в курсор. Но пока я сделал чтобы все значения были заполнены.
...
Рейтинг: 0 / 0
Помогите найти ошибку при создании курсора
    #37227924
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитай что означает INNER JOIN
Если значения могу отсутствовать - надо LEFT JOIN использовать
...
Рейтинг: 0 / 0
Помогите найти ошибку при создании курсора
    #37228031
rekki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо очень помогли.
...
Рейтинг: 0 / 0
Помогите найти ошибку при создании курсора
    #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
Помогите найти ошибку при создании курсора
    #37228139
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rekki,
IIF(ISNULL(cur7.tab_no), "", cur7.tab_no)
...
Рейтинг: 0 / 0
Помогите найти ошибку при создании курсора
    #37228157
rekki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо буду пробывать.
...
Рейтинг: 0 / 0
Помогите найти ошибку при создании курсора
    #37228167
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rekki,

либо NVL, либо SET NULLDISPLAY, либо св-во контролов NULLDISPLAY.
...
Рейтинг: 0 / 0
Помогите найти ошибку при создании курсора
    #37228190
rekki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
...
Рейтинг: 0 / 0
Помогите найти ошибку при создании курсора
    #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
Помогите найти ошибку при создании курсора
    #37229823
rekki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Sizov,

Я примерно так и сделал, спасибо за ответ
...
Рейтинг: 0 / 0
Помогите найти ошибку при создании курсора
    #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
Помогите найти ошибку при создании курсора
    #37238647
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rekki,

Если кратко - команда PACK требует монопольного открытия таблицы, что не всегда возможно. Подробнее ищи в форуме или в хэлпе.
После каждого удаления PACK делать не надо. Достаточно работать c SET DELETED ON
О том когда делать PACK тоже в форуме поищи, много написано.
...
Рейтинг: 0 / 0
Помогите найти ошибку при создании курсора
    #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
Помогите найти ошибку при создании курсора
    #37238751
rekki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нас в универе так учили, может я эти знания неправильно применяю, но так. А суть такая: несколько таблиц связанных, на форме отображаются значения из них, по нажатию кнопки надо все записи из всех таблиц (с текущим tab_no) удалить.
...
Рейтинг: 0 / 0
Помогите найти ошибку при создании курсора
    #37238760
rekki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстате все записи сводятся в один курсор, значения которого собственно и отображаются на форме.
...
Рейтинг: 0 / 0
Помогите найти ошибку при создании курсора
    #37238769
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rekkiНас в универе так учили, может я эти знания неправильно применяю, но так. А суть такая: несколько таблиц связанных, на форме отображаются значения из них, по нажатию кнопки надо все записи из всех таблиц (с текущим tab_no) удалить.
Ну так и бери tab_no причем тут RECNO() ?
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите найти ошибку при создании курсора
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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