Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как объединить данее из двох таблиц в одну?? / 15 сообщений из 15, страница 1 из 1
03.10.2008, 11:19
    #35574219
nensi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить данее из двох таблиц в одну??
Есть два грида (две разные таблицы). С помощью Check я выбираю необходимые даные у этих таблиц. После выбора открываю третий грид, который по идеии должен иметь данные этих двих таблиц. Но выхоидт заминка и ничего не показывает:( Например, 1-й грид: pcddl.uname, 2-й: pcdd.namet. Желаемый результат 3-й: ggg.ob=(uname+namet)
Вот так это выгладет:

select * from pcddl where pw=.t. into table ggg
select * from pcdd where pk=.t. into table ggg
sele ggg
do form qel

А на форме qel находится этот 3-й Grid у которого RecordSource - ggg

я так понимаю нкжен програмный код объединения, но даже не знаю какие команды нужно использовать...помогите мне, пожалуйста:)
...
Рейтинг: 0 / 0
03.10.2008, 12:19
    #35574450
new_userman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить данее из двох таблиц в одну??
nensiЕсть два грида (две разные таблицы). С помощью Check я выбираю необходимые даные у этих таблиц. После выбора открываю третий грид, который по идеии должен иметь данные этих двих таблиц. Но выхоидт заминка и ничего не показывает:( Например, 1-й грид: pcddl.uname, 2-й: pcdd.namet. Желаемый результат 3-й: ggg.ob=(uname+namet)

Может быть попробовать так

select a.*, b.* from pcddl a, pcdd b
where a.pw=.t. and b.pk=.t.
into table ggg

должно сработать
...
Рейтинг: 0 / 0
03.10.2008, 14:07
    #35574859
nensi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить данее из двох таблиц в одну??
я так понляла этот синтаксис к Fox5-му не подходит?
...
Рейтинг: 0 / 0
03.10.2008, 14:19
    #35574907
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить данее из двох таблиц в одну??
nensiя так понляла этот синтаксис к Fox5-му не подходит?
Подходит. Только надо понимать, что именно Вы делаете.

Синтаксис SELECT ... INTO - не добавляет записи к существующей таблице, а создает новую таблицу. Если таблица с таким именем уже существует, то она будет просто уничтожена. В результате, в таблице ggg будут данные только из второго запроса.

Вариант предложенный new_userman не вполне корректный. Это будет декартово произведение. Т.е. количество записей в выборке - это произведение количества отобранных записей из первой таблицы на количество отобранных записей из второй.

Чтобы ответить на Ваш вопрос необходимо уточнить по каким правилам Вы хотите объединить информацию из таблиц. Точнее, как Вы будете сопоставлять записи.

Из Вашего пояснения, что ggg.ob=(pcddl.uname+pcdd.namet) следует, что записи из этих двух таблиц как-то сопоставлены между собой. Как? Каким образом Вы определяете, что, например, первой записи из таблицы pcddl надо поставить в соответствие десятую запись из таблицы pcdd?

Учтите, что условие "по порядку следования" - не является условием. По той простой причине, что для Select-SQL самого понятия "порядок следования" - не существует. Данные сопоставляются по значению каких-либо полей.
...
Рейтинг: 0 / 0
03.10.2008, 14:30
    #35574947
nensi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить данее из двох таблиц в одну??
ВладимирМ nensiя так поняла этот синтаксис к Fox5-му не подходит?
Подходит. Только надо понимать, что именно Вы делаете.



Я так подумала, так как видает ошибку о непризнаной команде "unrecognized command verb"
...
Рейтинг: 0 / 0
03.10.2008, 14:35
    #35574968
nensi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить данее из двох таблиц в одну??
Есть два грида (две таблици). Один: наименование и дата журналов, второй: наименование и дата газет. Я чеком выбираю нужные мне журналы и газеты в обоих гридах (и там есть Check и там). И в третем гриде должны отобразится название и журналов и газет, которые я отметила на флажке, в одном поле Grid3.
...
Рейтинг: 0 / 0
03.10.2008, 15:22
    #35575157
new_userman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить данее из двох таблиц в одну??
nensiЕсть два грида (две таблици). Один: наименование и дата журналов, второй: наименование и дата газет. Я чеком выбираю нужные мне журналы и газеты в обоих гридах (и там есть Check и там). И в третем гриде должны отобразится название и журналов и газет, которые я отметила на флажке, в одном поле Grid3.
При такой постановке вопроса мой первый ответ никак не подходит, я не совсем помню как это в фоксе делается(код может быть некорректный), но смысл такой

insert into table ggg from (select * from pcddl where pw=.t.)

insert into table ggg from (select * from pcdd where pc=.t.)

Кстати ВладимирМ, спасибо за замечание
...
Рейтинг: 0 / 0
03.10.2008, 16:17
    #35575379
гость...
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить данее из двох таблиц в одну??
select * from pcddl where pw=.t. ;
union all ;
select * from pcdd where pk=.t. ;
into cursor ggg
...
Рейтинг: 0 / 0
06.10.2008, 09:50
    #35577306
nensi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить данее из двох таблиц в одну??
Получилось вот так:

select ggg
pk=.f.
pw=.f.
delete all
select pcdd
SCAN FOR pk=.t.
select ggg
LOCATE FOR pcdd.codcx=pcddl.cex
IF !FOUND()
append blank
REPLACE sp WITH ALLTRIM( pcdd.namcx)
ENDIF
select pcddl
locate FOR pcdd.codcx=pcddl.cex AND pw=.t.
DO WHILE FOUND( )
select ggg
REPLACE sp WITH ALLTRIM(sp)+" "+ALLTRIM(pcddl.uname)
select pcddl
CONTINUE
ENDDO
select pcdd

ENDSCAN
*!*set sysmenu to defaul
*!*susp
select ggg
do form qel

Спасибо ОГРОМНОЕ за вашу помощь!
...
Рейтинг: 0 / 0
06.10.2008, 21:55
    #35579201
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить данее из двох таблиц в одну??
Странный какой-то код...
Код: plaintext
1.
select ggg
LOCATE FOR pcdd.codcx=pcddl.cex
locate вообще-то работает с текущей таблицей, а условия из неактивных...

Попробовал я прогнать ваш код - ничего не понял. pcdd.codcx неуникальны? pcddl.cex неуникальны?

Зачем sp=sp+uname? при уникальных pcdd.codcx и pcddl.cex второй locate найдет не более одной записи...

Вообще, у меня ваш код (при уникальных pcdd.codcx и pcddl.cex) выдал имена из отмеченных
записей pcdd и к каждой из них, если есть отмеченный pcdd.codcx=pcddl.cex в таблице pcddl,
дописал еще имя из pcddl. Вам это надо?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select ggg
delete all

select padr(c.namcx, 100 ) from pcdd c ;
 where (c.codcx not in (select d.cex from pcddl d where d.pw=.t.)) AND c.pk=.t. ;
union all (select padr(trim(a.namcx)+" "+b.uname, 100 ) ;
 from pcdd a, pcddl b ;
  where a.codcx=b.cex AND a.pk=.t. AND b.pw=.t.) ;
order by  1  ;
into array tmp

select ggg
append from array tmp fields sp
dime tmp( 1 , 1 )
...
Рейтинг: 0 / 0
07.10.2008, 12:09
    #35579941
nensi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить данее из двох таблиц в одну??
К AndreTM:
ОЧЕНЬ интересный подход, цивилизованый, я бы сказала! Намного лучше моего предыдушего!!!!!!!
СПАСИБО за вашу идею! :)
...
Рейтинг: 0 / 0
07.10.2008, 12:26
    #35579992
nensi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить данее из двох таблиц в одну??
К AndreTMP:
...но есть одно НО! Если я не выберу значение из pcddl а такое может быть, мой код покажет читый грид-что не так пугает пользователя, а Ваш выдает ошибку "Variable "TMP" is not found"
...
Рейтинг: 0 / 0
08.10.2008, 09:26
    #35582096
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить данее из двох таблиц в одну??
nensiК AndreTMP:
...но есть одно НО! Если я не выберу значение из pcddl а такое может быть, мой код покажет читый грид-что не так пугает пользователя, а Ваш выдает ошибку "Variable "TMP" is not found"
Ах, да... начал забывать про особенности массивов в Фоксе :)
Надо вставить в начале кода
Код: plaintext
1.
2.
tmp=.f.
select ggg
...
и в конце поменять
Код: plaintext
1.
2.
3.
4.
5.
...
select ggg
if type('m.tmp')<>"L"
 append from array tmp fields sp
 tmp=.f.
endif
...
Рейтинг: 0 / 0
08.10.2008, 09:40
    #35582126
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить данее из двох таблиц в одну??
Опять задумался и приврал :)) Достаточно только изменить в конце:
Код: plaintext
1.
2.
3.
4.
5.
...
select ggg
if _TALLY> 0 
 append from array tmp fields sp
 dime tmp( 1 )
endif
...
Рейтинг: 0 / 0
09.10.2008, 11:44
    #35585082
nensi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить данее из двох таблиц в одну??
Спасибо за помощь!
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как объединить данее из двох таблиц в одну?? / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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