powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Копия таблиц базы с переименованием полей...
9 сообщений из 9, страница 1 из 1
Копия таблиц базы с переименованием полей...
    #32716907
Andriy Likhodid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите кто сталкивался с подобной проблемой:
Нужно экспортировать в другую прогу данные, при этом так уж получилось что в ней поля некоторых таблиц называються по другому, либо их вообще нет (структура несовпадает).. Как сделать копироване базы с переименованием полей (изменением структуры)?
...
Рейтинг: 0 / 0
Копия таблиц базы с переименованием полей...
    #32716931
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему не запросом ?
...
Рейтинг: 0 / 0
Копия таблиц базы с переименованием полей...
    #32716940
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или как вариант
copy как файл и
alter table
...
Рейтинг: 0 / 0
Копия таблиц базы с переименованием полей...
    #32717468
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
* формируем запрос по структуре совпадающим с файлом назначения
select source.fld1 as output_fld1, source.fld2 as output_fld2, source.fld3 as output_fld3, ...;
from source ;
into cursor tbuffer nofilter

* копируем
select destination
if данные полностью заменяются?
   zap
endif
append from (dbf('tbuffer'))
...
Рейтинг: 0 / 0
Копия таблиц базы с переименованием полей...
    #32718297
Andriy Likhodid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, все классно! Спасибо!
только есть еще такой ньюанс: в базе названия полей длинные, когда я селектом делаю выборку и формирую новую таблицу с нужными именами полей, длина этих полей обрезается до 10 символов!!! .. незнаю чесно говоря почему..
Как с этим бороться?
...
Рейтинг: 0 / 0
Копия таблиц базы с переименованием полей...
    #32718305
Andriy Likhodid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andriy Likhodidтакая фигня получается, когда делаешь SELECT name as name_of_field FROM tmptable INTO table newtable. То при открытии таблицы newtable название поля будет name_of_fi
...
Рейтинг: 0 / 0
Копия таблиц базы с переименованием полей...
    #32718438
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andriy Likhodidда, все классно! Спасибо!
только есть еще такой ньюанс: в базе названия полей длинные, когда я селектом делаю выборку и формирую новую таблицу с нужными именами полей, длина этих полей обрезается до 10 символов!!! .. незнаю чесно говоря почему..
Как с этим бороться?
Никак Это ограничение свободных таблиц. Т.е. таблиц не включенных в контейнер базы данных (DBC).

Можно обойти следующими способами:

1) Формировать не таблицу (INTO TABLE|DBF), а курсор (INTO CURSOR). Как собственно и привел в примере Анатолий.

Недостаток : такой курсор может физически и не создать файла на диске. Как следвие, APPEND FROM выдаст сообщение об ошибке, что такого файла не найдено. Предсказать такую ситуацию очень проблематично. Зависит от многих факторов

2) Создать временную базу данных и создавать новую таблицу сразу в этой временной базе данных:

Код: plaintext
1.
2.
CREATE DATABASE test
SELECT Field1 as VeryLongFildeName FROM MyTab ;
INTO TABLE tabTarget DATABASE test

Недостатки : надо следить за корректностью имен и текущей базой данных (SET DATABASE). Вобщем, нужна повышенная бдительность от программиста, чтобы не перпутать таблицы из разных баз данных

3) Можно вообще не использовать Select-SQL, а делать вставку прямым сканированием:

Код: plaintext
1.
2.
3.
4.
select MyTab
SCAN
	INSERT INTO tabTarget (Field1, Field2, Field3, ...) ;
	VALUES (MyTab.Field10, MyTab.Field20, MyTab.Field30, ...)
ENDSCAN
...
Рейтинг: 0 / 0
Копия таблиц базы с переименованием полей...
    #32719328
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ВладимирМ

> 1) Формировать не таблицу (INTO TABLE|DBF), а курсор (INTO CURSOR).
> Как собственно и привел в примере Анатолий.
> Недостаток: такой курсор может физически и не создать файла на диске.

Совершенно верно.

> Как следвие, APPEND FROM выдаст сообщение об ошибке, что такого файла
> не найдено.

Неверно! Для фокса физическое наличие файла на диске не требуется!
APPEND FROM DBF("CursorAlias") сработает даже если никакого физического
файла с именем DBF("CursorAlias") на диске и не существует!

Другое дело что выборка может не создать реального курсора, а лишь повторно
открыть ту-же таблицу но под другим алиасом - я не уверен что фокс так
сделает если в запросе реально имеются конструкции переименования полей
(cOriginalName AS cNewName) - но всё-же исключать не стал бы. От этой
оптимизации лечит опция NOFILTER в запросе (для очень старых версий
фокса введение дополнительного фиктивного поля типа .T. AS lDummy)

> 2) Создать временную базу данных и создавать новую таблицу сразу в
> этой временной базе данных:

А смысл? Если уж нужно из одной базы в другую - то прям её и указывай как
целевая база - ну разве что надо реально "объединять" данные, а не просто
залить новые...

Posted via ActualForum NNTP Server 1.0
...
Рейтинг: 0 / 0
Копия таблиц базы с переименованием полей...
    #32719475
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Korolyov
Неверно! Для фокса физическое наличие файла на диске не требуется!
APPEND FROM DBF("CursorAlias") сработает даже если никакого физического
файла с именем DBF("CursorAlias") на диске и не существует!

В целом так оно и есть. Но однажды я нарвался именно на ошибку невозможности APPEND FROM (dbf("CursorAlias")). К сожалению, сейчас не вспомню, в чем там было дело. Возможно, действительно забыл NOFILTER.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Копия таблиц базы с переименованием полей...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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