Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.09.21;
Скачать: [xml.tar.bz2];

Вниз

Скопировать таблицу (без данных) в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.007 c
15-1217409210
Загрузка
2008-07-30 13:13
2008.09.21
Загрузка компьютера


15-1216939595
йцукен
2008-07-25 02:46
2008.09.21
Помогите реализовать алгоритм


15-1217470415
Slider007
2008-07-31 06:13
2008.09.21
С днем рождения ! 31 июля 2008 четверг


15-1217179982
Перебежчик
2008-07-27 21:33
2008.09.21
Как это будет на C#?


6-1193081297
Ezik
2007-10-22 23:28
2008.09.21
Удаленное выключение ПК





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский