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

Вниз

Поля   Найти похожие ветки 

 
Просто Я ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.024 c
3-1083072776
Slon_SCG
2004-04-27 17:32
2004.05.23
Автоматическое восстановление БД InterBase после сбоя


4-1081157947
Andery
2004-04-05 13:39
2004.05.23
Создание модального окна


4-1081150613
rimd
2004-04-05 11:36
2004.05.23
HWND and Path


1-1084275102
Fanta
2004-05-11 15:31
2004.05.23
многотерминальное приложение


1-1083917182
snake1977
2004-05-07 12:06
2004.05.23
Поиск по маске