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

Вниз

Скопировать таблицу (без данных) в FB.   Найти похожие ветки 

 
TUserClass ©   (2008-07-28 10:13) [0]

Доброго всем понедельника!

Интересует вопрос - можно ли получить ... эээммм ... так сказать "конструктор" таблицы, зная ее имя? Т.е. я на сервер посылаю имя таблички, а он мне возвращаяет CREATE TABLE ...


 
brother ©   (2008-07-28 10:13) [1]

тебя интересует структура без данных?


 
TUserClass ©   (2008-07-28 10:15) [2]

угу....получить запрос, создающий таблицу с такой же структурой (ну естессно с другим именем)... :)


 
brother ©   (2008-07-28 10:23) [3]

однако нет(


 
Sergey13 ©   (2008-07-28 10:23) [4]

> [2] TUserClass ©   (28.07.08 10:15)

А тебе нужен собственно скрипт или надо создать копию таблицы (кстати зачем?)?


 
Petr V. Abramov ©   (2008-07-28 10:23) [5]

create table NEW_TABLE as
select * from
from SOURCE_TABLE
where 2*2 = 4.5


 
brother ©   (2008-07-28 10:24) [6]

> where 2*2 = 4.5

это что?

> create table NEW_TABLE as
> select * from
> from SOURCE_TABLE

оно копию создаст однако


 
TUserClass ©   (2008-07-28 10:29) [7]


> Petr V. Abramov ©   (28.07.08 10:23) [5]

А он без данных создаст?

.....

> where 2*2 = 4.5

Я так полагаю, это чтоб без данных создалось?? :)


> Sergey13 ©   (28.07.08 10:23) [4]

Можно запросом, а можно и просто копию..Просто есть таблица "по умолчанию", но юзеры могут создавать новые с той же структурой


 
Медвежонок Пятачок ©   (2008-07-28 10:30) [8]

ага создаст. а так же триггееры, индексы и констрейнты.

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


 
Anatoly Podgoretsky ©   (2008-07-28 10:31) [9]

> brother  (28.07.2008 10:13:01)  [1]

Вообще то то чего он хочет называется скрипт.


 
brother ©   (2008-07-28 10:31) [10]

> но юзеры могут создавать новые с той же структурой

странно... это то зачем???


 
brother ©   (2008-07-28 10:32) [11]

> Вообще то то чего он хочет называется скрипт.

плучающий структуру БД )


 
TUserClass ©   (2008-07-28 10:33) [12]


> brother ©   (28.07.08 10:31) [10]

Ну блин...конешно можно добавить поле в таблицу, по которому можно будет идентифицировать, кому что принадлежит - но заказчик захотел именно так...(((


 
Ega23 ©   (2008-07-28 10:34) [13]

Системные таблицы RDB$Чего-то-там


 
brother ©   (2008-07-28 10:34) [14]

> но заказчик захотел именно так...(((

значит структура то уже определена? если так, создавай вручную новую таблицу)


 
TUserClass ©   (2008-07-28 10:37) [15]


> brother ©   (28.07.08 10:34) [14]

т.е. ввести константу типа string, в которой будет

const
 NewTableQuery = "Create table %s /*и т.д.*/";

....

 DoQuery (Format (NewTableQuery, [NewTableName]));

???


 
Anatoly Podgoretsky ©   (2008-07-28 10:42) [16]

> brother  (28.07.2008 10:24:06)  [6]

А автор и сам не знает, что хочет, вопросы он пока задавать не научился еще и видимо это произойдет не скоро.


 
TUserClass ©   (2008-07-28 10:45) [17]


> Anatoly Podgoretsky ©   (28.07.08 10:42) [16]

Давайте по делу, а...Если кому не понятно, перевожу в упрощенном режиме...Есть кнока, апосля нажатия должна создаться таблица - точная копия определенной таблицы. Либо мне нуно получить запрос создания этой таблицы и поменять в нем имя и выполнить его, либо каким-либо другим способом создать копию таблицы без данных.


 
Anatoly Podgoretsky ©   (2008-07-28 10:49) [18]

> TUserClass  (28.07.2008 10:45:17)  [17]

> перевожу в упрощенном режиме

Не надо в упрощенном, надо нормально!
А то и отвечать тоже будем в упрощенном, а не нормально.


 
TUserClass ©   (2008-07-28 10:51) [19]


> Anatoly Podgoretsky ©   (28.07.08 10:49) [18]

Ну я уж не знаю, как более понятно написать :)))


 
Anatoly Podgoretsky ©   (2008-07-28 10:56) [20]

Не только верим, но и видим.


 
TUserClass ©   (2008-07-28 10:57) [21]

Вобщем...буду придеоживаться [14].


 
Petr V. Abramov ©   (2008-07-28 10:58) [22]


> > where 2*2 = 4.5
>
> Я так полагаю, это чтоб без данных создалось?? :)

да


> brother ©   (28.07.08 10:24) [6]
> оно копию создаст однако

Скопирует таблицу (без данных) в FB.


 
Правильный$Вася   (2008-07-28 10:59) [23]


> конешно можно добавить поле в таблицу, по которому можно
> будет идентифицировать, кому что принадлежит - но заказчик
> захотел именно так.

интересно, а заказчик тебе диктует, как обработчики на кнопки писать, какой алгоритм сортировки использовать, как переменные называть?

дурость это

если заказчик не понимает реляционной алгебры, то нечего ему совать свой алюминиевый пятак в програмерские дела
заказчик должен требовать функциональность и, возможно, архитектурные решения, но уж никак не детали реализации

итог: плодить одинаковые таблицы под каждого пользователя, да еще и по кнопке из программы - я б за такое на молочно-клизменную диету посадил бы


 
TUserClass ©   (2008-07-28 11:04) [24]


> Правильный$Вася   (28.07.08 10:59) [23]


Ну что ж - тогда советуете прост поле добавить?


 
Anatoly Podgoretsky ©   (2008-07-28 11:05) [25]

> Правильный$Вася  (28.07.2008 10:59:23)  [23]

Не волнуйся, он и сам на эту клизму сядет, если повезет конечно и он сможет как то реализовать.


 
Anatoly Podgoretsky ©   (2008-07-28 11:07) [26]

> TUserClass  (28.07.2008 11:04:24)  [24]

Пользователю, по кнопке?


 
TUserClass ©   (2008-07-28 11:12) [27]


> Anatoly Podgoretsky ©   (28.07.08 11:07) [26]

Неее....прост он добавляет новый проект (нажатием на кнопочку)- новая таблица не будет создаваца, а при добавлении новой записи, она пишется в ту же таблицу, только с неким идентификатором (создам для него новое поле)...А при просмотре будем в запрос добалять WHERE NEKII_IDENTIFIKATOR = [Название_проекта] ...


 
Loginov Dmitry ©   (2008-07-28 23:51) [28]


>[5] Petr V. Abramov ©   (28.07.08 10:23)
> create table NEW_TABLE as
> select * from
> from SOURCE_TABLE
> where 2*2 = 4.5


это точно из FB?   ;)


 
MsGuns ©   (2008-07-28 23:58) [29]

>TUserClass ©   (28.07.08 10:13)  
>Т.е. я на сервер посылаю имя таблички, а он мне возвращаяет CREATE >TABLE ...

Веселый сервер однако ;)
Ты ему "А дай-ка мне пивка", а он "А не пошел бы ты в пивнуху"

Вообще-то сервер предназначен несколько для других целей


 
Petr V. Abramov ©   (2008-07-28 23:59) [30]


> Loginov Dmitry ©   (28.07.08 23:51) [28]

один from ессно лишний.


 
PEAKTOP ©   (2008-07-29 06:09) [31]

> TUserClass ©   (28.07.08 10:13)

Вообще-то имеется способо создания клона таблицы средствами "голого" SQL. Поставленный Вами вопрос в данном случае наводит на мысли: а все ли правильно в консерватории, если возникла подобная задача.

Есть системные таблицы (RDB$*), выполнив запрос к которым можно получить структуру и соответственно SQL-скрипт создания таблицы. Писать подобную фигню, занимающуюся анализом доменов из RDB$RELATION_FIELDS, поиском ограничений из RDB$RELATION_CONSTRAINTS и подключением триггеров из RDB$TRIGGERS за Вас никто не будет. Рекомендую почитать руководство к Interbase 6.0 на сайте Димы Кузменко (http://www.ibase.ru/), оно хоть порядком и устарело, но по системным таблицам пока еще актуально.

Кстати, о триггерах. Ну, я понимаю что могут быть в таблице триггеры для создания автоинкрементных полей - тут все просто. А если есть в триггерах какая-то логика (например, BEFORE DELETE -> DELETE записи из другой таблицы), ее как вы "клонировать" будете ?

Вы спрашивали, как это можно сделать. Вот Вам ответ:
1) Создать хранимую процедуру, которой можно передавать имя клонируемой таблицы
2) В процедуре выполнить запросы к системным таблицам и сформировать атомарные SQL-скрипты создания таблицы и других объектов относящихся к ней (ограничений, триггеров).
3) Выполнить полученные атомарные SQL-скрипты через EXECUTE STATEMENT.
4) Переподключить клиентское приложение к базе данных (да. а Вы как думали, кеш метаданных у Вас еще старый и новосозданных объектов клиентское приложение еще не увидит).

И еще: не рекомендую делать отладку этой хранимой процедуры на рабочей БД. И - удачной Вам отладки. :)


 
Loginov Dmitry ©   (2008-07-29 07:59) [32]

> один from ессно лишний.


я не о FROM, а о самом факте понимания данной конструкции текущей версией сервера FB.


 
Petr V. Abramov ©   (2008-07-29 10:45) [33]


> Loginov Dmitry ©   (29.07.08 07:59) [32]

where t.FIELD1/t.FIELD1*2*2 = 4.8
:)
ессно, t.FIELD1 надо еще на ноль проверить


 
Loginov Dmitry ©   (2008-07-29 11:16) [34]


> ессно, t.FIELD1 надо еще на ноль проверить


я не про WHERE, а про CREATE TABLE  :)))


 
oldman ©   (2008-07-29 11:37) [35]


> Скопировать таблицу (без данных)


Скопировать с данными и очистить
:)


 
Petr V. Abramov ©   (2008-07-29 11:54) [36]


> Loginov Dmitry ©   (29.07.08 11:16) [34]

вроде б стандарт...
fb под рукой нет чтоб проверить



Страницы: 1 вся ветка

Текущий архив: 2008.09.21;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.021 c
15-1217229349
Пробежал...
2008-07-28 11:15
2008.09.21
Хранилище данных


15-1217591906
oldman
2008-08-01 15:58
2008.09.21
Завтра выходной, будут не все. Примите поздравления заранее...


15-1217106597
wl
2008-07-27 01:09
2008.09.21
Minna No Nihongo


2-1217913860
lewka
2008-08-05 09:24
2008.09.21
Размер HTML- кода (трафик)


1-1198507695
312kbps
2007-12-24 17:48
2008.09.21
Control has no parent window