![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поля [D6, Access]
Просто Я © (2004-04-27 14:31:00)Реально ли:
1)Переименовать поле NO на NO_NO сохранив данные этого поля?(через запрос)
Пробовал через alter...., но тут получается удалять (drop), а потом создавать (add), заново это поле, данные удаляются. Может создавать отдельное поле, туда копировать (записей 100-200 не больше), удалять поле, создавать, а затем копировать данные в уже переименнованное поле???
(select pok_a, pok_b....pok_XX from pok)
2)Имееться 38 полей, необходимо отобразить 37, как подставить 37 полей в select, не перечисляя все 37. Может "*" , "-" то поле которое не нужно?
YurikGl (2004-04-28 00:11:00) [1]Честно, - не знаю. Все что могу предложить, - динамическое формирование строки, т.е. последовательно проходимся по списку полей и добавляем их в select. Что-то типа
st:='Select '
for i:=1 to 37 do
st:=st+..fields[i].name+','
и т.п.
В итоговом запросе все равно все перечисляется.
fields[i].name скорее всего не так пишется, но что-то подобное.
Второй вариант, - написать в запросе * а в объекте TQuery, дважды на него кликнув, сначала отобразить все поля, потом просто удалить ненужное поле.
З.Ы. Спать ухожу :)
Просто Я (2004-04-28 00:00:00) [2]YurikGl © (27.04.04 23:53) [28]
А я то думаю ну при чем тут вычисляемое поля, все перерыл, а тут она в резервации, не знал этого, короче блин! Ну ладно придумаем что-нить, точнее придумал.
На второй вопрос что-нить знаешь?
YurikGl (2004-04-27 23:53:00) [3]Проверил, в IB такого нет.
YurikGl (2004-04-27 23:49:00) [4]Можешь сделать select no from table, даже если в table нет такого поля.
YurikGl (2004-04-27 23:46:00) [5]Соглашусь с Курдль © (27.04.04 15:31) [14]
Expr1000 называется, обычно, вычисляемое поле, такое как sum или avg. Странно, что тебе позволили назвать поле no.
Видимо, в синтаксисе SQL для Access это слово что-то означает. В справке, с ходу, я этого не нашел.
Просто Я (2004-04-27 23:03:00) [6]YurikGl © (27.04.04 22:46) [24]
вот здесь про него Просто Я © (27.04.04 15:29) [13]
YurikGl (2004-04-27 22:46:00) [7]> Ты встречался с таким полем в Access?
Каким именно?
Просто Я (2004-04-27 22:44:00) [8]YurikGl © (27.04.04 22:39) [22]
Пасиба, думал над этим, даже делал, но это геморой, пока еще поищу.
Ты встречался с таким полем в Access? Просто Я © (27.04.04 15:29) [13]
YurikGl (2004-04-27 22:39:00) [9]Пример. Пусть имеется таблица
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 на уровне таблицы;
• столбец использовался в иных компонентах БД - в просмотрах, триггерах, в выражениях для вычисляемых столбцов.
Все! вышесказанное свидетельствует о том, что в случае необходимости изменения атрибутов столбца или в случае удаления столбца, сначала необходимо тщательно проанализировать, какие последствия для таблицы и базы данных в целом может повлечь такое изменение или удаление.
Извиняйте, если какие символы не так распознались.
YurikGl (2004-04-27 22:28:00) [10]Щас сосканирую и выставлю целиком пример.
Просто Я (2004-04-27 22:22:00) [11]YurikGl © (27.04.04 21:40) [19]
Кажись я так и писал, тока позапутанней, это же сложновато будет осушествить на полях где имеються много (млн) записей, я думаю что все же это предусмотрели.
.....продолжаю поиске по всем источникам.
YurikGl (2004-04-27 21:40:00) [12]Сначала создаешь новый столбец. Потом копируешь update stolb set NewSt=OldSt, потом удаляешь старый.
Переписал из книги Delphi3 и создание приложений БД
Просто Я (2004-04-27 20:13:00) [13]Erik © (27.04.04 17:17) [17]
Такой млин умный, и где такие рождаются???А по-существу сказать не судьба.
Erik (2004-04-27 17:17:00) [14]Зайди в MSAccess и все у тебя получится.
Просто Я (2004-04-27 15:39:00) [15]Курдль © (27.04.04 15:31) [14]
А что же приselect * from pokup, и поле и данные отображаеться нормально.
Соловьев (2004-04-27 15:36:00) [16]
> select no from pokup ,пишу в SQL Explorer, поле вместо нормального
> отображения поля, заголовок поля становиться Expr1000
ну так напиши
select [no] as no_no from pokup
Курдль (2004-04-27 15:31:00) [17]
> no
Скорее всего это зарезервированное слово!
Просто Я (2004-04-27 15:29:00) [18]Соловьев © (27.04.04 15:17) [10]
Эээ, мне нужно переменовать поле не таблицы с которой работаю, а из которой идет копирование.
Все это возникла из непонятного поведения поля с именем "no"(текстовое, размер-50), при запросе
select no from pokup,пишу в SQL Explorer, поле вместо нормального отображения поля, заголовок поля становиться Expr1000 и все значения 0, если переменовать это же поле, хотя бы в "no_no", все отображаеться нормально.
sniknik (2004-04-27 15:23:00) [19]> это ограничения провайдера?
скорее сервера БД.
> Может БДЕ - может такую штуку провернуть?
ну если через него работать с тем же pervasive то может.
Соловьев (2004-04-27 15:18:00) [20]
> sniknik © (27.04.04 15:16) [9]
это ограничения провайдера? Может БДЕ - может такую штуку провернуть?