Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.18;
Скачать: CL | DM;

Вниз

Динамическое реструктурирование таблиц.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
14-1124905300
Веретенников
2005-08-24 21:41
2005.09.18
Выбор ТВ-тюнера


2-1123752605
-=snoop=-
2005-08-11 13:30
2005.09.18
правильная работа с dbf файлом


14-1124880358
dr Tr0jan
2005-08-24 14:45
2005.09.18
Английская пословица


14-1124652244
fedotawa
2005-08-21 23:24
2005.09.18
Чем вам нравится творчество Лукьяненко?


14-1124833465
desam
2005-08-24 01:44
2005.09.18
Зацените!