powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Перенос
9 сообщений из 9, страница 1 из 1
Перенос
    #32670392
paule
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажите (можно и код) какими опреаторами фокса (2.5) нужно пользоваться, чтобы из одной таблицы значения одних полей перенести в другую таблицу в другие поля.

С фоксом не работал никогда (а вот щас понадобилось), отсюда и вопрос такой дурацкий. Справка в фоксе нормальная, но это тока знать надо какими командами пользоваться, а для того, кто первый рас- совершенно бесполезная
...
Рейтинг: 0 / 0
Перенос
    #32670398
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если тебе надо добавить в существующую таблицу, то необходимы следующие команды:
- select <таблица1> - говорим системе, что работаем с таблицей № 1
- scan <условие> ... endscan - обеспечивает проход по требуемому набору записей в таблице 1
- insert into <таблица2> (<поле1>,...) values (<таблица1>.<поле2>,...) внутри цикла scan ... endscan

Если нужная таблица еще не существует, то я бы посоветовал Select-SQL:

select a.pole1 as pole3,a.pole2 as pole1,... ;
from table1 a ;
where <условие отбора записей> ;
into table table2
...
Рейтинг: 0 / 0
Перенос
    #32670415
paule
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое, буду работать в этом направлении
...
Рейтинг: 0 / 0
Перенос
    #32670766
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если структура у таблиц одинаковая и поля следуют соответственно то можно ещё так
select <tablica1>
go top
scan
scatter to memvar
select <tablica2>
append blank
gather from memvar
select <tablica1>
endscan
или так
select <tablica2>
append from <tablica1>
...
Рейтинг: 0 / 0
Перенос
    #33162495
paule
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имею 2 таблицы. нужно в одну таблицу добавить данные из другой, при условии, что в первой таких записей нет. Идентификация происходит по полю FIO.
Ну тоесть нужно добавить из таблицы 1 в таблицу 2 все записи в которых значение поля FIO уникально, тоесть такого значения нет во второй таблице.

Делаю так

select 3
use tb.dbf
index on tab tag tab
select 1
append from tb FIELDS tab,zech,fio,datr,prof,daprim,dauv for .......

Помогите задать условие.. К примеру buk.fio<>tb.fio не подходит..
...
Рейтинг: 0 / 0
Перенос
    #33162500
pauleИмею 2 таблицы. нужно в одну таблицу добавить данные из другой, при условии, что в первой таких записей нет. Идентификация происходит по полю FIO.
Ну тоесть нужно добавить из таблицы 1 в таблицу 2 все записи в которых значение поля FIO уникально, тоесть такого значения нет во второй таблице.

Делаю так

select 3
use tb.dbf
index on tab tag tab
select 1
append from tb FIELDS tab,zech,fio,datr,prof,daprim,dauv for .......

Помогите задать условие.. К примеру buk.fio<>tb.fio не подходит..
Я бы сделал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
* Предполагаем, что таблица1=tab1, таблица2=tab2
select * from tab1;
into cursor noviy;
where tab1.fio not in (select fio from tab2)
select noviy
do while !eof("noviy")
  insert into tab2(fio,....) values (noviy.fio,....)
  select noviy
  skip  1 
enddo
* В таблице tab2 имеем то, что хотели...
...
Рейтинг: 0 / 0
Перенос
    #33162970
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Только - если в первой таблице записи ф.и.о. - не уникальны - все дубли и добавятся...
Поэтому, либо - нужно добавить в SELECT группирование по ф.и.о. -
select * from tab1;
into cursor noviy;
where tab1.fio not in (select fio from tab2);
group by fio

Либо - проиндексировать уникально:
select noviy
index on fio to temp compact unique

да и вместо do while лучше scan использовать (а алиас в values можно и не указывать - и так берется текущий):
Код: plaintext
1.
2.
3.
scan
  insert into tab2(fio,....) values (fio,....)
  select noviy
endscan
...
Рейтинг: 0 / 0
Перенос
    #33167278
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Crispy!

В таком запросе группировка не может применяться - получится что поле FIO мы имеем определённое, а вот остальные поля - абы что :(
Т.е. тогда надо для оставшихся полей применять агрегатные функции - MAX или MIN например... или СНАЧАЛА избавиться от дублей, а потом выбирать "отсутствующие".

> да и вместо do while лучше scan использовать

Лучше просто

APPEND FROM (DBF("noviy"))

Или в новых версиях вообще красиво

INSERT INTO tb (список полей, ...) SELECT <далее идёт запрос>

Кстати говоря, перед ENDSCAN совсем не нужно SELECT делать - он сам выберет тот курсор, который был активным в момент начала SCAN (т.е. по которому SCAN и ходит).

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Перенос
    #33167704
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi, Igor Korolyov !

Да. В общем-то все верно, конечно. Но в данном случае, если я не ошибаюсь - речь могла бы идти только о полностью идентичных записях (1 ф.и.о. - 1 человек со всеми своими данными - если только дубли вообще там возможны). А для таких записей можно было бы группировать и просто по ф.и.о...
Я, кстати, просто хотел чуть дополнить то, что предложил Сатанислав С. (не моя ошибка - имя так и было написано! :)
А сам бы я наверно в этом случае сделал так - выбрал через SELECT-SQL нужное, а потом APPEND-ом добавил в другую таблицу. Так меньше проблем, если у обеих исходных таблиц разные структуры.
А про новые версии... У автора - фокс 2.5 ...
И еще:
Igor KorolyovКстати говоря, перед ENDSCAN совсем не нужно SELECT делать - он сам выберет тот курсор, который был активным в момент начала SCAN (т.е. по которому SCAN и ходит).
В FPD 2.6 я сталкивался с такой непонятной вещью - (иногда по-крайней мере) если не ставить явно указание на основной алиас - после команды INSERT-SQL (и именно нее) - может не происходить возврата на него! Я так и не понял, почему и когда это происходит, поэтому и оставил там SELECT на всякий случай.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Перенос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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