Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Копия таблиц базы с переименованием полей... / 9 сообщений из 9, страница 1 из 1
29.09.2004, 15:19
    #32716907
Andriy Likhodid
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копия таблиц базы с переименованием полей...
Подскажите кто сталкивался с подобной проблемой:
Нужно экспортировать в другую прогу данные, при этом так уж получилось что в ней поля некоторых таблиц называються по другому, либо их вообще нет (структура несовпадает).. Как сделать копироване базы с переименованием полей (изменением структуры)?
...
Рейтинг: 0 / 0
29.09.2004, 15:26
    #32716931
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копия таблиц базы с переименованием полей...
почему не запросом ?
...
Рейтинг: 0 / 0
29.09.2004, 15:29
    #32716940
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копия таблиц базы с переименованием полей...
или как вариант
copy как файл и
alter table
...
Рейтинг: 0 / 0
29.09.2004, 18:01
    #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
30.09.2004, 11:29
    #32718297
Andriy Likhodid
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копия таблиц базы с переименованием полей...
да, все классно! Спасибо!
только есть еще такой ньюанс: в базе названия полей длинные, когда я селектом делаю выборку и формирую новую таблицу с нужными именами полей, длина этих полей обрезается до 10 символов!!! .. незнаю чесно говоря почему..
Как с этим бороться?
...
Рейтинг: 0 / 0
30.09.2004, 11:32
    #32718305
Andriy Likhodid
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копия таблиц базы с переименованием полей...
Andriy Likhodidтакая фигня получается, когда делаешь SELECT name as name_of_field FROM tmptable INTO table newtable. То при открытии таблицы newtable название поля будет name_of_fi
...
Рейтинг: 0 / 0
30.09.2004, 12:22
    #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
01.10.2004, 01:24
    #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
01.10.2004, 09:36
    #32719475
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копия таблиц базы с переименованием полей...
Igor Korolyov
Неверно! Для фокса физическое наличие файла на диске не требуется!
APPEND FROM DBF("CursorAlias") сработает даже если никакого физического
файла с именем DBF("CursorAlias") на диске и не существует!

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


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