C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Таблица Paradox, как лучше добавить поле в runtime?
Rius
Отправлено: 01.04.2005, 08:40


Мастер участка

Группа: Участник
Сообщений: 321



1. можно ли добавить поле через компонент TTable?
2. как добавляется в SQL (TQuery) поле типа double (со строкой получается alter table vendors add MyFieldsString char(20), а про double пишет "Invalid use of keyword token DOUBLE.
3. насколько опасна модификация таблицы через alter table, стоит ли действовать через копирование таблицы? Добавление полей предполагается проводить редко, но данные нельзя терять ни в коем случае.
avc*
Отправлено: 01.04.2005, 09:07


Не зарегистрирован







QUOTE

Добавление полей предполагается проводить редко

Может в таком случае пользоваться сторонней программой, умеющей грамотно управлять парадоксом ?
Rius
Отправлено: 01.04.2005, 09:16


Мастер участка

Группа: Участник
Сообщений: 321



Типа Database Desktop? Не катит. Имена полей считываются с устройства, и если их нет в таблице, добавлять должна сама программа, автоматически.
olegenty
Отправлено: 01.04.2005, 09:43


Ветеран

Группа: Модератор
Сообщений: 2412



1. Создашь на лету таблицу, идентичную данной, и копируешь в неё все данные (create table + insert...select)
2. есть варианты: либо drop старой таблицы + create с новой структурой + insert из созданной копии, либо alter table (но я не знаю, убъёт ли это действие данные, или нет, если да, то insert из копии)
3. update добавленного поля/полей некими данными
4. drop копии

или, что мне кажется лучшим решением, создать промежуточную таблицу для хранения мета-мета данных, т.е. просто доработать модель и основную ключевую таблицу вообще руками не трогать. это вредно. вместо этого хранить в некоей таблице список её переменных полей, и в ещё одной (по одной на тип данных) — реальные данные этих полей.
Rius
Отправлено: 01.04.2005, 12:54


Мастер участка

Группа: Участник
Сообщений: 321



olegenty Слишком сложно будет. Alter table кажется через копирование работает, так что будет так. Буду архивировать базу перед такими изменениями.

Как добавить через alter table поле типа double?

Все, нашел. В билдеровском SQL doulbe называется float'ом:
CODE
alter table add MyField float


Отредактировано Rius — 01/04/2005, 16:20
olegenty
Отправлено: 01.04.2005, 16:43


Ветеран

Группа: Модератор
Сообщений: 2412



не, я намекаю, что alter table это вообще не самя лучшая из идей. а вот вариант с ещё несколькими таблицами, где хранятся значения — это как раз то, что нужно. это сложно только в первый раз. один раз сделаешь, будет уже не сложно.
Rius
Отправлено: 01.04.2005, 19:17


Мастер участка

Группа: Участник
Сообщений: 321



olegenty Т.е. вместо такой таблицы: http://img92.exs.cx/img92/3637/untitled26sx.png (7kB)
сделать такую:
http://img104.exs.cx/img104/4083/untitled12jc.png (12kB)
в принципе хорошая мысль, только как показывать сразу несколько полей без SQL? в первом варианте просто скрываются ненужные столбцы.

Вернуться в Работа с базами данных в C++Builder