Форум: "Базы";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
ВнизПоля Найти похожие ветки
← →
Просто Я © (2004-04-27 14:31) [0]Реально ли:
1)Переименовать поле NO на NO_NO сохранив данные этого поля?(через запрос)
Пробовал через alter...., но тут получается удалять (drop), а потом создавать (add), заново это поле, данные удаляются. Может создавать отдельное поле, туда копировать (записей 100-200 не больше), удалять поле, создавать, а затем копировать данные в уже переименнованное поле???
(select pok_a, pok_b....pok_XX from pok)
2)Имееться 38 полей, необходимо отобразить 37, как подставить 37 полей в select, не перечисляя все 37. Может "*" , "-" то поле которое не нужно?
← →
Reindeer Moss Eater © (2004-04-27 14:34) [1]нереально
← →
Просто Я © (2004-04-27 14:40) [2]Reindeer Moss Eater © (27.04.04 14:34) [1]
нереально
Обрадовал, спасибо.
← →
Соловьев © (2004-04-27 14:43) [3]
> Просто Я © (27.04.04 14:40) [2]
реально, это Reindeer Moss Eater © пошутил :)
select NO as NO_NO
from table
← →
Курдль © (2004-04-27 14:43) [4]
alter TABLE_1 add FIELD_2 integer
/
insert into TABLE_1 (FIELD_2)
select TABLE_1 FIELD_1
/
alter TABLE_1 drop FIELD_1
/
← →
Соловьев © (2004-04-27 14:46) [5]Неужели такое не канает?
ALTER TABLE <имя таблицы> ALTER <поле1> TO <поле2>
← →
Reindeer Moss Eater © (2004-04-27 14:50) [6]То, про что спрашивалось - нереально.
Про другое я речь не вел.
← →
Просто Я © (2004-04-27 14:57) [7]Соловьев © (27.04.04 14:46) [5]
DM.ADOCommand1.CommandText:="alter table pokup ALTER no to no_no";
Что-то не канает.
← →
Просто Я © (2004-04-27 15:04) [8]Соловьев © (27.04.04 14:43) [3]
Переименовать не на время отображения, а переименовать поле.
← →
sniknik © (2004-04-27 15:16) [9]Соловьев © (27.04.04 14:46) [5]
> Неужели такое не канает?
не всезде, в pervasive можно, но чаще нельзя.
← →
Соловьев © (2004-04-27 15:17) [10]
> Просто Я © (27.04.04 15:04) [8]
от этого завист работа программы?
← →
Соловьев © (2004-04-27 15:18) [11]
> sniknik © (27.04.04 15:16) [9]
это ограничения провайдера? Может БДЕ - может такую штуку провернуть?
← →
sniknik © (2004-04-27 15:23) [12]> это ограничения провайдера?
скорее сервера БД.
> Может БДЕ - может такую штуку провернуть?
ну если через него работать с тем же pervasive то может.
← →
Просто Я © (2004-04-27 15:29) [13]Соловьев © (27.04.04 15:17) [10]
Эээ, мне нужно переменовать поле не таблицы с которой работаю, а из которой идет копирование.
Все это возникла из непонятного поведения поля с именем "no"(текстовое, размер-50), при запросеselect no from pokup
,пишу в SQL Explorer, поле вместо нормального отображения поля, заголовок поля становиться Expr1000 и все значения 0, если переменовать это же поле, хотя бы в "no_no", все отображаеться нормально.
← →
Курдль © (2004-04-27 15:31) [14]
> no
Скорее всего это зарезервированное слово!
← →
Соловьев © (2004-04-27 15:36) [15]
> select no from pokup ,пишу в SQL Explorer, поле вместо нормального
> отображения поля, заголовок поля становиться Expr1000
ну так напиши
select [no] as no_no from pokup
← →
Просто Я © (2004-04-27 15:39) [16]Курдль © (27.04.04 15:31) [14]
А что же приselect * from pokup
, и поле и данные отображаеться нормально.
← →
Erik © (2004-04-27 17:17) [17]Зайди в MSAccess и все у тебя получится.
← →
Просто Я © (2004-04-27 20:13) [18]Erik © (27.04.04 17:17) [17]
Такой млин умный, и где такие рождаются???А по-существу сказать не судьба.
← →
YurikGl © (2004-04-27 21:40) [19]Сначала создаешь новый столбец. Потом копируешь update stolb set NewSt=OldSt, потом удаляешь старый.
Переписал из книги Delphi3 и создание приложений БД
← →
Просто Я © (2004-04-27 22:22) [20]YurikGl © (27.04.04 21:40) [19]
Кажись я так и писал, тока позапутанней, это же сложновато будет осушествить на полях где имеються много (млн) записей, я думаю что все же это предусмотрели.
.....продолжаю поиске по всем источникам.
← →
YurikGl © (2004-04-27 22:28) [21]Щас сосканирую и выставлю целиком пример.
← →
YurikGl © (2004-04-27 22:39) [22]Пример. Пусть имеется таблица
CREATE TABLE SOTR(
ID_SOTR INTEGER NOT NULL PRIMARY KEY,
FIO CHAR(10) COLLATE PXW_CYRL,
OTDEL VARCHAR(IO) COLLATE PXW_CYRL,
DOLJNOST CHAR (10) COLLATE PXW CYRL
);
Пусть необходимо изменить характеристики столбца FIO, изменив тип столбца с CHAR(1O) на VARCHAR(25). Тогда:
1. Добавляем в таблицу новый временный столбец FIO_TMP, полностью повторяющий характеристики изменяемого столбца FIO:
ALTER TABLE SOTR
ADD FIOJTMP CHAR(1O) CHARACTER SET WIN1251 COLLATE PXW_CYRL;
2. Копируем данные из FIO в FIO_TMP:
UPDATE SOTR SET FIO_TMP = FIO;
3. Удаляем столбец FIO:
ALTER TABLE SOTR DROP FIO;
4. Создаем новый столбец FIO с необходимыми характеристиками:
ALTER TABLE SOTR
ADD FIO VARCHAR(25) COLLATE PXW_CYRL;
5. Переписываем данные из временного столбца FIO_TMP в новый столбец FIO:
UPDATE SOTR
SET FIO = FIO_TMP;
6. Удаляем временный столбец FIO_TMP:
ALTER TABLE SOTR DROP FIO_TMP;
ЗАМЕЧАНИЕ. Следует помнить, что изменение характеристик столбца, а также удаление столбца может закончиться неудачей, если:
• столбец приобретает атрибуты PRIMARY KEY или UNIQUE, но старые значения в столбце нарушают требования уникальности данных;
• удаляемый столбец входил как часть в первичный или внешний ключ, что привело к нарушению ссылочной целостности между таблицами;
• столбцу были приписаны ограничения целостности CHECK на уровне таблицы;
• столбец использовался в иных компонентах БД - в просмотрах, триггерах, в выражениях для вычисляемых столбцов.
Все! вышесказанное свидетельствует о том, что в случае необходимости изменения атрибутов столбца или в случае удаления столбца, сначала необходимо тщательно проанализировать, какие последствия для таблицы и базы данных в целом может повлечь такое изменение или удаление.
Извиняйте, если какие символы не так распознались.
← →
Просто Я © (2004-04-27 22:44) [23]YurikGl © (27.04.04 22:39) [22]
Пасиба, думал над этим, даже делал, но это геморой, пока еще поищу.
Ты встречался с таким полем в Access? Просто Я © (27.04.04 15:29) [13]
← →
YurikGl © (2004-04-27 22:46) [24]> Ты встречался с таким полем в Access?
Каким именно?
← →
Просто Я © (2004-04-27 23:03) [25]YurikGl © (27.04.04 22:46) [24]
вот здесь про него Просто Я © (27.04.04 15:29) [13]
← →
YurikGl © (2004-04-27 23:46) [26]Соглашусь с Курдль © (27.04.04 15:31) [14]
Expr1000 называется, обычно, вычисляемое поле, такое как sum или avg. Странно, что тебе позволили назвать поле no.
Видимо, в синтаксисе SQL для Access это слово что-то означает. В справке, с ходу, я этого не нашел.
← →
YurikGl © (2004-04-27 23:49) [27]Можешь сделать select no from table, даже если в table нет такого поля.
← →
YurikGl © (2004-04-27 23:53) [28]Проверил, в IB такого нет.
← →
Просто Я © (2004-04-28 00:00) [29]YurikGl © (27.04.04 23:53) [28]
А я то думаю ну при чем тут вычисляемое поля, все перерыл, а тут она в резервации, не знал этого, короче блин! Ну ладно придумаем что-нить, точнее придумал.
На второй вопрос что-нить знаешь?
← →
YurikGl © (2004-04-28 00:11) [30]Честно, - не знаю. Все что могу предложить, - динамическое формирование строки, т.е. последовательно проходимся по списку полей и добавляем их в select. Что-то типа
st:="Select "
for i:=1 to 37 do
st:=st+..fields[i].name+","
и т.п.
В итоговом запросе все равно все перечисляется.
fields[i].name скорее всего не так пишется, но что-то подобное.
Второй вариант, - написать в запросе * а в объекте TQuery, дважды на него кликнув, сначала отобразить все поля, потом просто удалить ненужное поле.
З.Ы. Спать ухожу :)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.035 c