|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
Подскажите, пожалуйста, как модифицировать структуру таблицы программно. Мне нужно перебрать n-е количество файлов DBF и вставить туда новый столбец (H_DOP), при этом данные не должны потеряться. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2011, 10:56 |
|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
Chek_Fedor, ЕМНИП, вы этот вопрос уже поднимали. Курите заново хелп по copy structure extended + create from ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2011, 11:07 |
|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
Спасибо. Нашел тот скрипт. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2011, 11:18 |
|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
Посмотрите скрипт, пожалуйста Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2011, 12:07 |
|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
Chek_Fedor, Новую структуру в существующий файл??? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2011, 12:17 |
|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
IgorNGChek_Fedor, Новую структуру в существующий файл??? Да, потом в этот файл нужно скопировать записи которые были в tab1. В общем мне нужно добавить столбец в Tab1, без потери данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2011, 12:20 |
|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
Мой моцк был съеден... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
В общем мне нужно добавить столбец в Tab1, без потери данных.Вкратце алкоритм: Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2011, 12:38 |
|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
Я сделал так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2011, 16:56 |
|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
омфг, лучники в шоке. Ещё скажите, что оно работает особенно порадовало это Код: plaintext 1.
Код: plaintext 1. 2. 3. 4. 5.
ЗЫ. Чуть не пропустил: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2011, 19:32 |
|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
tanglirИ вы ещё будете утверждать, что ЭТО работaет? МВАХАХАХАХАХАХАХАХАХАХА!!!!!!! /*безумный демонический хохАД*/ Вообще-то, ЭТО действительно будет работать, если таблица TMP3 создана ранее. Ну, да, много лишних "телодвижений", но ничего такого, что привело бы к ошибкам в работе. Собственно, для FP2.6 принципиально улучшить код проблематично. Разве что, убрать некоторые лишние команды. Исходим из предположения, что TMP3 - это таблица с той структурой, которая должна получиться в итоге у всех таблиц указанной папки. Тогда, если убрать лишнее, имеем Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
Использовать INTO CURSOR для Fp2.x - опасно. Нет гарантии, что получится именно курсор, а не исходная таблица с наложенным фильтром. В данном случае - это критически важно, поскольку исходная таблица просто удаляется. Если структура TMP3 отличается от структуры исходных таблиц только наличием дополнительного столбца, то APPEND FROM вполне уместна. Скопирует то что нужно и куда нужно. Здесь еще можно "пооптимизировать" с алиасами и рабочими областями, чтобы не использовать close all и закрывать таблицы "точечно" через команду USE. Но, в принципе, суть останется той же самой. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2011, 21:44 |
|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
Оператор типа: select *, 0000.00 as H_DOP from tab1 into dbf tab2 сразу может создать dbf нужной структуры. Останется только переименовать таблицу tab2 в tab1. Будет работать практически в 2 раза быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2011, 09:08 |
|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
golsaОператор типа: select *, 0000.00 as H_DOP from tab1 into dbf tab2 сразу может создать dbf нужной структуры. Теоретически. А практически, размерность поля H_DOP придется подбирать методом "научного тыка". Нет никакой гарантии, что размерность этого поля будет, скажем N(7,2), а не N(13,2). Т.е. числовым-то оно будет, но какая будет размерность - без гарантий. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2011, 11:01 |
|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
table1 - table with data htable - table with defined H_DOP column table2 - result table select T.*, H.H_DOP from table1 T, htable H into dbf table2 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2012, 20:45 |
|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
DoctoRJurius , и вы ЭТО пробовали запустить на FPD2.6? Получилось? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2012, 01:21 |
|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
Выдрал из старинного приложения. Проверь... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2012, 09:08 |
|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
AndreTM , yes. success. table1 - table with data (has x records) htable - table with defined H_DOP column (has 1 record with 0.00 value) table2 - result table (has x*1 records) select T.*, H.H_DOP* from table1 T, htable H into dbf table table2.dbf select * from table1, htable into table table2.dbf ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2012, 11:25 |
|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
ВладимирМgolsaОператор типа: select *, 0000.00 as H_DOP from tab1 into dbf tab2 сразу может создать dbf нужной структуры. Теоретически. А практически, размерность поля H_DOP придется подбирать методом "научного тыка". Не придётся. Размерность будет такая как укажите, а именно 7,2 при условии, что не будет UNION. Я этот прием регулярно использую. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2012, 14:22 |
|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
golsaОператор типа: select *, 0000.00 as H_DOP from tab1 into dbf tab2 сразу может создать dbf нужной структуры. Останется только переименовать таблицу tab2 в tab1. Будет работать практически в 2 раза быстрее. Правильно. Не фиг алгоритмизацией заниматься на фоксе. Не для этого он. Только пакетная обработка данных спасет мир. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2012, 14:24 |
|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
thunder2ВладимирМпропущено... Теоретически. А практически, размерность поля H_DOP придется подбирать методом "научного тыка". Не придётся. Размерность будет такая как укажите, а именно 7,2 при условии, что не будет UNION. Я этот прием регулярно использую. Это Вам просто повезло. Неявные преобразования тем и плохи, что их невозможно проконтролировать. Никогда не знаешь какая настройка или последовательность действий приведет к тому, что то, что раньше работало "вдруг" перестает работать. Если Вам требуется точная размерность, то и инструмент для ее установки необходим точный . Вы ведь не знаете почему собственно прибавляется 2 знака к указанной размерности. А почему не 3 или 1? Вам не известны те критерии, по которым выбирается этот "довесок". То, что "я регулярно использую" - не аргумент. Ну, например, сделайте такой тест Код: sql 1. 2.
Несмотря на общее правило, что размерность будет N+2, где N - количество символов в константе, но в данном случае размерность будет N(6,1). Т.е. явно не такая, как Вы надеялись. Другое правило действует. Размерность точно равна заданной константе. Нет, можно, конечно, заняться исследованиями и вывести некое общее правило какая будет размерность в зависимости от "количества пятен на солнце", но это не имеет особого смысла, если есть возможность точного задания размерности. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2012, 15:01 |
|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
ВладимирМ, Бывает иногда пользуюсь конструкцией типа "select 000.0 as nField". Цели как правило замена NULL значений в расчетных полях запросов. Я в хэлпе не находил, но опытным путем установлено что фокс создает поле типа нумерик размерностью такой чтобы это число нулей вошло, под точку отводится отдельный разряд (особенность хранения типа numeric). Например: 0000 - N(4) 0000.0 - N(6,1) 0000.00 - N(7,2) На предмет точного совпадения размерности никогда не обращал внимания, но точно могу сказать что за всю мою практику не было случаев когда бы фокс создал поле меньшего размера или меньшей точности после запятой. Иначе бы были неточности в расчетах или ошибки типа Numeric overflow Если есть уверенность что не может быть меньше, то почему бы не быть уверенным что фокс создает размер поля точно по заданной нулями маске ? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2012, 15:27 |
|
Модификация таблицы FoxPro 2.6
|
|||
---|---|---|---|
#18+
ВладимирМНу, например, сделайте такой тест Код: sql 1. 2.
Несмотря на общее правило, что размерность будет N+2, где N - количество символов в константе С хрена ли валенки упали ? , но в данном случае размерность будет N(6,1). Т.е. явно не такая, как Вы надеялись. Другое правило действует. Размерность точно равна заданной константе. Владимир , по моему, Вы себе противоречите. Вы задали число 0000.0, т.е. 6 - общая длинна и 1 знак для дроби этот рез-тат Вы и получили. Тест Ваш я выполнил, результат ожидаемый. Вы кого и в чем пытаетесь убедить ? Может Вам освежить знания по типу NUMERIC ? Так я напомню Вам. Numeric (N,D) - хранит цело общей длиной N знаков, включая десятичный разделитель и D знаков после десятичного разделителя. Т.е. запись Numeric (10,1) хранит числа общей длинной 10 знаков и 1 знак после запятой. Физически Numeric в DBF таблице вообще строка ! Единственный случай когда такой подход даст сбои - вложенные запросы или UNION. Вот там да, можно получить и не то, что ожидается. И то, если во всех подзапросах и UNOIN'ах указаывать одинаковую размерность, будете получать ожидаемый результат. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2012, 00:22 |
|
|
start [/forum/topic.php?fid=41&msg=37292961&tid=1583892]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 179ms |
0 / 0 |