Форум: "Прочее";
Текущий архив: 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.006 c