Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Курсор? / 12 сообщений из 12, страница 1 из 1
02.05.2008, 19:53
    #35290755
Nikita_2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор?
Спецы помогите решить проблеммку :
есть 2 связанные таблицы, vladelec_hp И formy
нужно создать временную таблицу по условию formy.data_vyd>=dat1 and formy.data_vyd<=dat2
dat1 и dat2 присвоены интервал- месяц, затем вывести в грид
Пытаюсь сделать так:

cREATE Cursor llcur (datvyd D ,fio C (30) )

scan for formy.data_vyd>=dat1 and formy.data_vyd<=dat2
INSERT INTO llcur (datvyd,fio) VALUES (formy.data_vyd, vladelec_hp.fam)
endscan

sele llcur
ThisForm.grid1.recordsource = llcur.datvyd
Thisform.grid1.Refresh()

даты выводятся более менее, а вот с фио проблемма по всем графам только 1 фамилия,
по форуму похожего ничего не нашел, и вообще как грамотно решить ??
...
Рейтинг: 0 / 0
02.05.2008, 20:34
    #35290775
antonov60
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор?
select formy.data_vyd, vladelec_hp.fam as fio from formy,vladelec_hp;
into cursor llcur;
where formy.data_vyd>=dat1 and formy.data_vyd<=dat2

sele llcur
ThisForm.grid1.recordsource = llcur.datvyd
Thisform.grid1.Refresh()
...
Рейтинг: 0 / 0
02.05.2008, 20:47
    #35290780
antonov60
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор?
Забыл:

Необходимо в where поставить условие об"единения двух таблиц (поля связи таблиц) типа
formy.поле1=vladelec_hp.поле2
...
Рейтинг: 0 / 0
02.05.2008, 21:49
    #35290816
Nikita_2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор?
antonov60Забыл:

Необходимо в where поставить условие об"единения двух таблиц (поля связи таблиц) типа
formy.поле1=vladelec_hp.поле2


спасибо , похоже вот этого и не хватало.

можно ли таким образом объединить данные из 4 таблиц,

vladelec_hp И formy , vladelec_ur И formy2, связь установлена в первом случае
vladelec_hp.ind_gl - formy.ind_gl , во втором vladelec_ur.ind_org - formy2.ind_org
...
Рейтинг: 0 / 0
02.05.2008, 22:12
    #35290824
antonov60
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор?
В общем случае все таблицы в выборке
должны иметь между собой условие об'единения по соотв. полям, например

1<->2 and 1<->3 and 1<->4 или 1<->2 and 2<->3 and 3<->4

смотря как у Вас связаны таблицы 1 - 4
...
Рейтинг: 0 / 0
02.05.2008, 22:29
    #35290834
Nikita_2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор?
суть в том, что пары таблиц из разных баз данных соответственно 1-4 не связаны, т.е. у первой пары
vladelec_hp.ind_gl - formy.ind_gl (связь по полю ind_gl) , у второй vladelec_ur.ind_org - formy2.ind_org (связь по полю ind_org), между 1 и 2 парами свяей нет
...
Рейтинг: 0 / 0
02.05.2008, 22:32
    #35290837
Nikita_2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор?
Вообще в первом случае с 2 таблицами проще создать Local wiev , что и сделал ,а вот с 4 !!!???
...
Рейтинг: 0 / 0
02.05.2008, 22:33
    #35290838
antonov60
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор?
Тогда получится об'единение каждой записи из об"единения 1-2 и каждой записью из 3-4
т.е. невозможно
...
Рейтинг: 0 / 0
02.05.2008, 22:41
    #35290839
Nikita_2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор?
Вообщем мне нужно создать отчет по выданным документам на основе этих таблиц, т.е. дата -клиент, дата организация , может присоветуешь как такие вопросы решаются?
...
Рейтинг: 0 / 0
02.05.2008, 23:02
    #35290841
antonov60
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор?
Об"единить две такие связки можно через Union,
единственно, чтобы поля в выходной таблице были однотипными и с одинаковым
названием ( через AS)

например 1 поле - дата
2 поле - данные(симв.тип), куда можно загнать информ.
об организации и о клиенте

+ отсортировать по дате через Sort by
...
Рейтинг: 0 / 0
03.05.2008, 22:47
    #35291333
Nikita_2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор?
Эх ма , всю голову изломал, у меня vfp6, поэтому Union не проходит
в результате родилось следующее из вышеназванных таблиц создаю
2 курсора lvhast и lvorgan которые нужно свести в 1 и вывести в report, в принципе получилось
через промежуточную таблицу tabla:
requery('lvorgan')
requery('lvhast')


local nrformy,nnr,nrformy2,nnr2
nrformy2=0
nnr=0
nnr2=0
nrformy=0

nrformy=reccount('lvhast')
nrformy2=reccount('lvorgan')





if nnr<>nrformy
for nnr=1 to nrformy step 1
sele lvhast
go record nnr
sele tabla
append blan
replace tabla.dattt with lvhast.data_vyd
replace tabla.names with ALLTRIM(lvhast.fam)
endfor
endif


if nnr2<>nrformy2
for nnr2=1 to nrformy2 step 1
sele lvorgan
go record nnr2
sele tabla
append blan
replace tabla.dattt with lvorgan.data_vyd
replace tabla.names with lvorgan.name_org
endfor
endif

requery('lvtabla')
ThisForm.Grid4.Refresh()

Может все это и против всех правил но работает, не судите строго.
получилось то что и хотел, далее после получения отчета, для закрытия формы на кнопке 'выход'
следующий код :

SELECT tabla
DELETE ALL
pack
sele lvtabla
requery('lvtabla')
ThisForm.Release()


-pack обязателен , так как для следующего использования tabla должна быть физически очищена, в DE у tabla свойство Exclusive = t, в init формы set excl on, все равно ругается жутко "File must be opened exlusively", какого же не хватает???, буду благодарен за науку!
...
Рейтинг: 0 / 0
04.05.2008, 05:57
    #35291459
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор?
> Эх ма , всю голову изломал, у меня vfp6, поэтому Union не проходит

В каком месте не проходит????

Может все таки лучше день потерять, а потом за 5 минут долететь???

А ведь летать придется часто. И далеко. Это один из самых несложных
вариантов, которые еще предстоит решать.

select formy.data_vyd as dattt, vladelec_hp.fam as names;
from formy inner join vladelec_hp on vladelec_hp.ind_gl = formy.ind_gl;
where formy.data_vyd> between dat1 and dat2;
union all;
select formy.data_vyd as dattt, vladelec_ur.name_org as names;
from formy2 inner join vladelec_ur on vladelec_ur.ind_org =
formy2.ind_org;
where formy2.data_vyd> between dat1 and dat2;
into cursor tabla;

> Может все это и против всех правил но работает, не судите строго.

Да уж. Сильно разбираться не стал, ибо нечитабельно. Иными словами тот
программист, который после тебя сядет на поддержку - прокленет все на свете.
Да и сам ты не разберешься в этой чушне уже через месяц.

> получилось то что и хотел, далее после получения отчета, для закрытия
> формы на кнопке 'выход'
> следующий код :
>
> SELECT tabla
> DELETE ALL
> pack

Ну если надо ВСЕ УДАЛИТЬ - есть команда zap. Но с другой стороны, если в
НАЧАЛЕ работы таблица должна быть пустой - сам бог велел использовать
курсор!!!


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Курсор? / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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