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

 
Добавление поля
Евгенй
Отправлено: 28.12.2004, 22:25


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







Как должен выглядеть запрос на добавление поля (полей) в существующую таблицу ? Не получается правильно составить запрос, постоянно вылетает ошибка... Подскажите.
AVC
Отправлено: 29.12.2004, 08:58


Ветеран

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



Alter table "Схема"."Таблица" Add (имя_поля тип ограничения)

Вам это действительно нужно? Это, обычно, настолько редкая операция что проще использовать какое либо средство управления вашей БД.
Евгений
Отправлено: 03.01.2005, 21:25


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







Спасибо, бубу пробовать.
Евгений
Отправлено: 07.01.2005, 17:08


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







Запрос выглядит следующим образом:
ALTER TABLE 12345 ADD (L1 float)

При выполнении запроса вылетает ошибка 'Ошибка синтаксиса при определении поля'. Как всё таки с этим справиться ?
Guest
Отправлено: 07.01.2005, 23:38


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







А что за база данных ?
Есть ли в ней тип поля float ?
Евгений
Отправлено: 08.01.2005, 21:35


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







С добавлением поля разобрался. Не надо ставить круглые скобки и тогда всё получается.
Но вот теперь возникла задача в переименовании поля. Каким запросом это можно сделать ?
AVC
Отправлено: 10.01.2005, 09:35


Ветеран

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



QUOTE
задача в переименовании поля. Каким запросом это можно сделать ?

Очень зависит от сервера
Sybase: ALTER TABLE [ owner .]table-name RENAME column-name TO new-column-name
Если отдельной команды нет то можно так:
создается новое поле, копируются данные, старое убивается.

Еще раз подумайте Вам действительно это нужно? Это не просто редкая, но еще и опасная операция. После неё требуется пересмотр всех элементов базы и скриптов клиента. Имя (поля, таблицы, представления и т.д.) — это единственное, что однозначно идентифицирует объект.
Евгений
Отправлено: 10.01.2005, 16:02


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







Знаю, что эта процедура редко используется, но сейчас это нужно.
Подключаюсь через ADO. База MS Access.
Попробовал приведённый Вами SQL запрос — не вышло, ошибка синтаксиса. Как быть ?
avc*
Отправлено: 10.01.2005, 16:57


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







Вариант 2 работает всегда.
Евгений
Отправлено: 11.01.2005, 21:50


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







Задача состоит в следующем: в таблице создаются поля с именами A1, A2, A3, ..., A10, ... по порядку. Количество полей может быть произвольным. Затем из этой таблицы удаляется, например, поле А3. После чего в таблице остаются поля А1, А2, А4, ..., А10, ... т.е. один номер как бы пропущен. После процедуры удаления мне необходимо привести таблицу к виду А1, А2, А3, ... , т.е. поля с именем А4 и выше переименовать на поля с именем на 1 меньше, чтобы имена опять следовали друг за другом. А1, А2, А3 и т.д.
Поэтому с процедурой копирования можно решить проблему эту, но получится довольно громоздко...
Но всё равно спасибо за помощь и совету !
Bond
Отправлено: 12.01.2005, 01:58


Станционный диспетчер

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



Очень все как-то намудрено. Можно поля вообще не трогать, а просто переносить значения столбцов. Ничего не убивая, не переименовывая и не создавая.
full_lamer
Отправлено: 12.01.2005, 08:59


Машинист паровоза

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



есть проще вариант... заведи вторую таблицу где веди учет какое поле удалено и какое оно имеет имя. и потом просто делать два обращения вначале к таблице имен потом к нужной таблице. тоже несколько громоздко — зато безболезнено. но это мое мнение.
AVC
Отправлено: 12.01.2005, 10:00


Ветеран

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



Совершенно не понимаю такой постановки задачи (переименовывание столбцов после удаления)
Согласен с full_lamer. Мне тоже это кажется наиболее разумным решением.

А вообще для SQL характерно очень легкое переименование полей использованием конструкции as
Например Select A10 as A1 — вот вы и переименовали smile.gif и все запросы более высокого уровня будут видеть данные колонки A10 под именем A1
Разберитесь вам нужно физическое переименовывание или логическое.

PS. Раз вы столкнулись с такой проблемой, то скорее всего у вас плохо проработана структура базы.

Отредактировано AVC — 12/01/2005, 10:05
Евгений
Отправлено: 12.01.2005, 22:57


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







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

Спасибо всем за помощь.

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