Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Курсор?  [new]
Nikita_2
Member

Откуда:
Сообщений: 80
Спецы помогите решить проблеммку :
есть 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 фамилия,
по форуму похожего ничего не нашел, и вообще как грамотно решить ??
2 май 08, 19:53    [5618229]     Ответить | Цитировать Сообщить модератору
 Re: Курсор?  [new]
antonov60
Member

Откуда: г.Ярославль
Сообщений: 79
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()
2 май 08, 20:34    [5618287]     Ответить | Цитировать Сообщить модератору
 Re: Курсор?  [new]
antonov60
Member

Откуда: г.Ярославль
Сообщений: 79
Забыл:

Необходимо в where поставить условие об"единения двух таблиц (поля связи таблиц) типа
formy.поле1=vladelec_hp.поле2
2 май 08, 20:47    [5618318]     Ответить | Цитировать Сообщить модератору
 Re: Курсор?  [new]
Nikita_2
Member

Откуда:
Сообщений: 80
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
2 май 08, 21:49    [5618459]     Ответить | Цитировать Сообщить модератору
 Re: Курсор?  [new]
antonov60
Member

Откуда: г.Ярославль
Сообщений: 79
В общем случае все таблицы в выборке
должны иметь между собой условие об'единения по соотв. полям, например

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

смотря как у Вас связаны таблицы 1 - 4
2 май 08, 22:12    [5618499]     Ответить | Цитировать Сообщить модератору
 Re: Курсор?  [new]
Nikita_2
Member

Откуда:
Сообщений: 80
суть в том, что пары таблиц из разных баз данных соответственно 1-4 не связаны, т.е. у первой пары
vladelec_hp.ind_gl - formy.ind_gl (связь по полю ind_gl) , у второй vladelec_ur.ind_org - formy2.ind_org (связь по полю ind_org), между 1 и 2 парами свяей нет
2 май 08, 22:29    [5618530]     Ответить | Цитировать Сообщить модератору
 Re: Курсор?  [new]
Nikita_2
Member

Откуда:
Сообщений: 80
Вообще в первом случае с 2 таблицами проще создать Local wiev , что и сделал ,а вот с 4 !!!???
2 май 08, 22:32    [5618538]     Ответить | Цитировать Сообщить модератору
 Re: Курсор?  [new]
antonov60
Member

Откуда: г.Ярославль
Сообщений: 79
Тогда получится об'единение каждой записи из об"единения 1-2 и каждой записью из 3-4
т.е. невозможно
2 май 08, 22:33    [5618540]     Ответить | Цитировать Сообщить модератору
 Re: Курсор?  [new]
Nikita_2
Member

Откуда:
Сообщений: 80
Вообщем мне нужно создать отчет по выданным документам на основе этих таблиц, т.е. дата -клиент, дата организация , может присоветуешь как такие вопросы решаются?
2 май 08, 22:41    [5618551]     Ответить | Цитировать Сообщить модератору
 Re: Курсор?  [new]
antonov60
Member

Откуда: г.Ярославль
Сообщений: 79
Об"единить две такие связки можно через Union,
единственно, чтобы поля в выходной таблице были однотипными и с одинаковым
названием ( через AS)

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

+ отсортировать по дате через Sort by
2 май 08, 23:02    [5618586]     Ответить | Цитировать Сообщить модератору
 Re: Курсор?  [new]
Nikita_2
Member

Откуда:
Сообщений: 80
Эх ма , всю голову изломал, у меня 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", какого же не хватает???, буду благодарен за науку!
3 май 08, 22:47    [5619959]     Ответить | Цитировать Сообщить модератору
 Re: Курсор?  [new]
Galyamov Rinat
Member

Откуда:
Сообщений: 658

> Эх ма , всю голову изломал, у меня 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

4 май 08, 05:57    [5620187]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить