Форум: "Базы";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
ВнизДинамическое реструктурирование таблиц. Найти похожие ветки
← →
PAI (2005-08-02 15:39) [0]Изначально вопрос возник, после того, как потребовалось в программе добавить несколько полей к существующей
таблице формата ttDBase. После этого посмотрел а получившуюся таблицу в DataBase Desktop- e. А там все поля, кроме
типа String, потеряли свою "типовую" принадлежность.
В общем, вопрос такой:
Можно ли программно создать таблицу типа ttDBase, так, чтобы она адекватно воспринималась Desktop-ом ,
т.е. числовые поля сохраняли свой тип.
И можно ли как-либо программно определять число десят. знаков для полей float?
← →
msguns © (2005-08-02 15:48) [1]1. Desktop ф топку !
2. Что значит "программе потребовалось" ? Она что, такая капризная, программа ?
3. Для реструктурирования использовать SQL DDL (CREATE, ALTER) + переливку из старых таблиц в новые (либо прямые вызова BDE)
4. У float нет понятия "число десят.знаков". Нужное кол-во "выставляется" при отображении на клиенте с помощью TField.DisplayFormat. Для фиксации конечных дробей используются типы BCD или Currency
← →
PAI (2005-08-02 15:57) [2]Ага, в топку, а что делать с клиентом-заказчиком?
О шибко умный, любит полазить по таблицам в Desktope.
А там во всех чиловых полях после реструкта в проге округление
до целого.
А что, Desktop тоже использует TField.DisplayFormat, когда
позволяет указывать "точность" float-ов?
← →
ANB © (2005-08-02 16:08) [3]
> PAI (02.08.05 15:57) [2]
Ф топку, ф топку. См.
> 3. Для реструктурирования использовать SQL DDL (CREATE,
> ALTER) + переливку из старых таблиц в новые (либо прямые
> вызова BDE)
← →
koks (2005-08-02 16:10) [4]PAI.
Я могу ошибиться, но предположу что проблема в "уровнях Dbase".
В свойствах алиаса, который ты устанавливаешь для своих DBF - файлов почитай help по параметру "LEVEL".
Если у тебя изначальные DBF были созданы для одного LEVEL,
А потом ты их перенес в алиас, где прописан другой LEVEL и обращаешься через TTable (а последний все это из алиаса), то могут (нет - наверняка будут) проблемы с конвертацией (причем без сообщения об ошибках).
"Уровень" DBF для каждой таблицы проще всего проверить SQL Explorer-ом
← →
PAI (2005-08-02 16:21) [5]> koks (02.08.05 16:10) [4]
> Я могу ошибиться, но предположу что проблема в "уровнях
> Dbase".
Таблицы древние DBase3, созданы ещё при помощи dbu.exe.
И прекрасно понимаются Desktop-om в любом алиасе, если их не трогать в проге.
После этого и типы и утановленые точности пропадают.
← →
koks (2005-08-02 16:35) [6]Сорри, ввел в заблуждние - давно не юзал DBF.
LEVEL устанавливается не на алиаc, а на драйвер DBsae.
Идешь в BDE Administrator -> Configuration -> Drivers ->DBase
Далее параметр LEVEL устанавливаешь в 3 т.к. вот выдержка из helpa по этоме параметру.
LEVEL Type of table format used to create dBASE temporary tables. Can be 7 for dBASE 7.0 table format, 5 for dBASE 5.0 table format, 4 for dBASE 4.0 table format, or 3 for dBASE III and dBASE III PLUS table formats. Use 25 for FoxPro. Default: 7
Кроче попробуй...
← →
PAI (2005-08-02 16:39) [7]А почему плохо использовать Table.Create c перестроенными
FiedDef- ами ?
Люди, если не сложно, черкните пару строк, о перестройке таблицы SQL-ем. Или ссылочку бросьте. С SQL - ем я плохо знаком, и лит-ры под рукой нет.
Заранее спасибо.
← →
koks (2005-08-02 16:52) [8]Table.Create замочит все данные...
Говорю тебе - установи level.
Нет.. проделай еще вот что - прочуствуешь существо вопроса.
1. Устанавливаешь LEVEL 3 или 4
2. Запускаешь Desktop.
3. Пытаешься создать новую таблицу(любую, но с float - полями)
Как будешь описавать float - поле?....... правильно - N 8 2
4. Выходишь из Desctop.
5. Устанавливаешь LEVEL 7 (кот по умолчанию).
6. Пытаешься еще раз создать такуюу-же таблицу.....
Ну должен почествовать. Если нет - попытайся открыть таблицу, кот создал в п.3.
Кстати, спользование DDL проблему не снимет.
Тебе еще надо будет проследить что за "уровни" стоят у твоего умного заказчика.
← →
PAI (2005-08-02 17:27) [9]koks
В BDE Administrator-е и DeskTope можно многое делать и всё будет прекрасно. Верю, что ты прав с Levela-ми( сейчас время в инете истекает, проверять некогда).
А как в проге? Через SQL проверить уровень старой, потом его установить в новую и перестроить? Или перестраивать старую?
но зачем тогда этот level, если таблица та же?
Запутался...
← →
Desdechado © (2005-08-02 17:46) [10]параметры драйвера можно переопределить в программе через переменную Session
← →
koks (2005-08-03 11:42) [11]1. Проверяешь какой уровень у твоей таблице (если DbaseIII то это 3). Проверить можно в SQL Explorer.
2. Выставляешь такой-же в драйверах. (BDE Administrator).
Это соответствие гарантирует, что твоя программа будет "на правильном уровне" читать DBF-файлы. А что ты с этой таблицей делаешь - берешь данные или перестраиdаешь метаданные - это уже дело второе.
Тебе нужно любым способом избежать ситуации, когда у тебя программа работает с несколькими таблицами и у этих таблиц разный уровень.
В этом случае у тебя (и у заказчика) будут вечные проблемы.
Плюс тот же уровень должен быть выставлен в BDE Administrator.
← →
PAI (2005-08-05 16:48) [12]Спасибо всем откликнувшимся,
особое кокс-у.
> koks (03.08.05 11:42) [11]
>
> Тебе нужно любым способом избежать ситуации, когда у тебя
> программа работает с несколькими таблицами и у этих таблиц
> разный уровень.
> В этом случае у тебя (и у заказчика) будут вечные проблемы.
То, что ты "навёл на уровни", оказалось очень полезно, спасибо!, и проблема как раз упиралась в то, что dbf-файлы создавались в разное время, разными людьми и на разных level-ах.
Придётся, видимо, все приводить к одному.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c