Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамическое реструктурирование таблиц. [D6]


PAI ©   (2005-08-02 15:39:00) 

Изначально вопрос возник, после того, как потребовалось в программе добавить несколько полей к существующей
таблице формата ttDBase. После этого посмотрел а получившуюся таблицу в DataBase Desktop- e. А там все поля, кроме
типа String, потеряли свою "типовую" принадлежность.
В общем, вопрос такой:
Можно ли программно создать таблицу типа ttDBase, так, чтобы она адекватно воспринималась Desktop-ом ,
т.е.  числовые поля сохраняли свой тип.
И можно ли как-либо программно определять число десят. знаков для полей float?


PAI   (2005-08-05 16:48:00) [1]

Спасибо всем откликнувшимся,
особое кокс-у.

> koks   (03.08.05 11:42) [11]
>
> Тебе нужно любым способом избежать ситуации, когда у тебя
> программа   работает с несколькими таблицами и у этих таблиц
> разный уровень.
> В этом случае у тебя (и у заказчика) будут вечные проблемы.

То, что ты "навёл на уровни", оказалось очень полезно, спасибо!, и проблема как раз упиралась в то, что dbf-файлы создавались в разное время, разными людьми и на разных level-ах.
Придётся, видимо, все приводить к одному.


koks   (2005-08-03 11:42:00) [2]

1. Проверяешь какой уровень у твоей таблице (если DbaseIII то это 3). Проверить можно в SQL Explorer.

2. Выставляешь такой-же в драйверах. (BDE Administrator).

Это соответствие гарантирует, что твоя программа будет "на правильном уровне" читать DBF-файлы. А что ты с этой таблицей делаешь - берешь данные или перестраиdаешь метаданные - это уже дело второе.

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

Плюс тот же уровень должен быть выставлен в BDE Administrator.


Desdechado   (2005-08-02 17:46:00) [3]

параметры драйвера можно переопределить в программе через переменную Session


PAI   (2005-08-02 17:27:00) [4]

koks
В BDE Administrator-е и DeskTope можно многое делать и всё будет прекрасно. Верю, что ты прав с Levela-ми( сейчас время в инете истекает, проверять некогда).
А как в проге? Через SQL проверить уровень старой, потом его установить в новую и перестроить? Или перестраивать старую?
но зачем тогда этот level, если таблица та же?
Запутался...


koks   (2005-08-02 16:52:00) [5]

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 16:39:00) [6]

А почему плохо использовать Table.Create c перестроенными
FiedDef- ами ?

Люди, если не сложно, черкните пару строк, о перестройке таблицы SQL-ем. Или ссылочку бросьте. С SQL - ем я плохо знаком, и лит-ры под рукой нет.
Заранее спасибо.


koks   (2005-08-02 16:35:00) [7]

Сорри, ввел в заблуждние - давно не юзал 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:21:00) [8]

> koks   (02.08.05 16:10) [4]
> Я могу ошибиться, но предположу что проблема в "уровнях
> Dbase".

Таблицы древние DBase3, созданы ещё при помощи dbu.exe.
И прекрасно понимаются Desktop-om в любом алиасе, если их не трогать в проге.
После этого и типы и утановленые точности пропадают.


koks   (2005-08-02 16:10:00) [9]

PAI.

Я могу ошибиться, но предположу что проблема в "уровнях Dbase".
В свойствах алиаса, который ты устанавливаешь для своих DBF - файлов почитай help по параметру "LEVEL".

Если у тебя изначальные DBF были созданы для одного LEVEL,
А потом ты их перенес в алиас, где прописан другой LEVEL и обращаешься через TTable (а последний все это из алиаса), то могут (нет - наверняка будут) проблемы с конвертацией (причем без сообщения об ошибках).

"Уровень" DBF для каждой таблицы проще всего проверить SQL Explorer-ом


ANB   (2005-08-02 16:08:00) [10]


> PAI   (02.08.05 15:57) [2]

Ф топку, ф топку. См.


> 3. Для реструктурирования использовать SQL DDL (CREATE,
> ALTER) + переливку из старых таблиц в новые (либо прямые
> вызова BDE)


PAI   (2005-08-02 15:57:00) [11]

Ага, в топку, а что делать с клиентом-заказчиком?
О шибко умный, любит полазить по таблицам в Desktope.
А там во всех чиловых полях после реструкта в проге округление
до целого.
А что, Desktop тоже использует TField.DisplayFormat, когда
позволяет указывать "точность" float-ов?


msguns   (2005-08-02 15:48:00) [12]

1. Desktop ф топку !
2. Что значит "программе потребовалось" ? Она что, такая капризная, программа ?
3. Для реструктурирования использовать SQL DDL (CREATE, ALTER) + переливку из старых таблиц в новые (либо прямые вызова BDE)
4. У float нет понятия "число десят.знаков". Нужное кол-во "выставляется" при отображении на клиенте с помощью TField.DisplayFormat. Для фиксации конечных дробей используются типы BCD или Currency


Наверх

Титульная страница Поиск, карта сайта Написать письмо