Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-1124509530
тихий вовочка
2005-08-20 07:45
2005.09.18
Помогите перевести, пожалуйста


9-1116598261
Кефир87
2005-05-20 18:11
2005.09.18
Поворот объекта. Очень просто. Опять туплю...


14-1122692754
dr Tr0jan
2005-07-30 07:05
2005.09.18
Вопрос о сантехнике


2-1123734834
Patrick
2005-08-11 08:33
2005.09.18
Проблема с TStrings


5-1099405102
AZ
2004-11-02 17:18
2005.09.18
Создание ComboBox а для компонента





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский