Форум: "Базы";
Текущий архив: 2003.10.20;
Скачать: [xml.tar.bz2];
Внизкуча вопросов в одну тему Найти похожие ветки
← →
Silver_ (2003-09-26 15:22) [0]Сделал прогу, отдал заcазчику тут появляются новые желания
которые влекут за собой изменение структуры БД. Хорошо если имеется личный контакт
с заказчиком пошел к нему да и сделал все изменения, а как быть если контакт
исключителино через интернет а БД весит куча МБ, да ещо конфиденциальность...
Ответ №1. Terminal Server - тут-же вопрос а если "заказчиков" куча
Орвет №2. Хорошо когда просто добавитъ таблицу, поле (CREATE TABLE..., ALTER TABLE ADD <Поле>...)
но что делать если неудачно назвал таблицу, Query, поле;
например появилась новая T.,Q.,П. которая как раз подходит существующему названию
Вот тут-то и появляются куча вопросов как из СВОЕЙ проги проделать
(можно даже командной строкой с Access но я как посмотрел нет у него такого):
(SUBD - MS Access)
+ Create Database
+ Create Table
+ Delete Table
+ Add Field
+ Delete Field
1- Modify Table Name
2- Modify Table Description
3- Create Query
4- Delete Query
5- Modify Query Command
6- Modify Query Name
7- Modify Query Description
8- Modify Field Name
9- Modify Field Type
10- Modify Field Description
11- Modify Field Properties
12- create Group
13- Delete Group
14- Modify Group Permissions
15- Create User
16- Delete User
17- Modify User Permissions
Может я слишком многого хочу но рано или поздно многие с этим столкнутся
(по краиней мере я так думаю). Давайте же за ранее соломки подстелим :-).
- приветствуются ответы (тут или на мыло) на любую часть вопроса (ввиде рабочих комманд,
так как много делается с ALTER TABLE... но правельный синтаксис я пока не нагщупал).
- А также направление куда копать
PS. Отмеченые "+" мной известны и проверены, могу поделится если нужно
← →
Anatoly Podgoretsky (2003-09-26 15:28) [1]Silver_ © (26.09.03 15:22)
Про архивы, про пароли, про SSL чего ни будь слышал?
← →
Sirakuz (2003-09-26 15:47) [2]BDE API:
..Borland Shared\Bde\Bde32.hlp
"DbiDoRestructure changes the properties of a table such as the following: modifying field types or field sizes, adding a field, deleting a field, rearranging fields; or changing indexes, security passwords, or referential integrity."
Единственное правда, "Not currently supported for SQL or Access".
← →
Дмитрий Баранов (2003-09-26 15:55) [3]Садись за ErWIN. Посади людей заказчика пользоваться ErWin. Он умеет делать обратный инжиниринг структуры баз практически любой СУБД, сохранять схему в файл, проводить экспорт-импорт изменений в структуре между двумя БД
← →
Silver_ (2003-09-26 16:00) [4]Не понял как всё это добро мне поможет?
У меня идея состоит в том что(например) встрою в прогу модулъ который будет
реструктуризировать БД. Каждый раз когда высылаю новую версию проги с неи и
список деиствии(комманд для реструктуризации ДБ).
Если честно даже не понял че вы предлагаете.
Ключевое сливо не "Конфиденциальность"
а "реструcтуризация БД" У клиента БЕЗ человеcеского вмешателъства(по заранее заданному сценарию)
2 Siracuz
Пользую ADO
← →
Silver_ (2003-09-26 16:05) [5]с
"Не понял как всё это добро мне поможет?"
Обращался к
> Anatoly Podgoretsky © (26.09.03 15:28) [1]
← →
Alex_Raider (2003-09-26 16:20) [6]У меня идея состоит в том что(например) встрою в прогу модулъ который будет
реструктуризировать БД. Каждый раз когда высылаю новую версию проги с неи и
список деиствии(комманд для реструктуризации ДБ).
- brain dmaged твоя idea.
Пользуй обычные скрипты. База данных должна быть реляционной,
должна стоять на сервере который доступен по IP.
Ходи на сервер. Правь базу...
← →
Silver_ (2003-09-26 18:17) [7]
> Alex_Raider © (26.09.03 16:20) [6]
>
> Ходи на сервер. Правь базу...
> а "реструктуризация БД" У клиента БЕЗ человеческого вмешателъства( по
> заранее заданному сценарию)
> - brain dmaged твоя idea.
ладно тогда не идея а "мысль" :)
← →
Sergey_Masloff (2003-09-27 02:12) [8]Alex_Raider © (26.09.03 16:20) [6]
>>Каждый раз когда высылаю новую версию проги с неи и
>>список деиствии(комманд для реструктуризации ДБ).
>- brain dmaged твоя idea.
>Пользуй обычные скрипты.
Ну а почему скриптом нельзя модифицировать базу? ;-)
>База данных должна быть реляционной,
>должна стоять на сервере который доступен по IP.
>Ходи на сервер. Правь базу...
Ага, щаз... по IP доступна... ходи на сервер... У меня например несколько сот установок программы, от Южно-сахалинска до Калининграда. И число постоянно растет. А программа молодая (2 года всего) и постоянно развивается. Не устану я на столько серверов лазить? Даже если бы они и были доступны и кто-то меня на них пустил? ;-)
Так что именно так: при рассылке новой версии рассылается и скрипт (пользователь собственно не знает что это скрипт) в котором подсчитана контрольная сумма (чтобы ручками не поправили чего) и подгружается. Пока не подгрузится новая версия клиента не работает. И ничего, все довольны. Ну почти довольны ;-)
Правда насчет Аксеса не знаю, с ним такое в лоб не сделать.
← →
sniknik (2003-09-27 09:54) [9]> Правда насчет Аксеса не знаю, с ним такое в лоб не сделать.
без проблем, все то же самое но только по одной команде на запрос т.е. скрипт приходится самостоятельно на команды разбивать и выполнять из своей проги, что тоже не проблема в свете (> Пользую ADO) . как разделитель обычно использую ‡† (просто нигде не видел подобного в запросах, а вообще можно любой символ или свой формат скриптов).
← →
Sergey_Masloff (2003-09-27 10:21) [10]sniknik © (27.09.03 09:54) [9]
>без проблем, все то же самое но только по одной команде на >запрос т.е. скрипт приходится самостоятельно на команды разбивать
Ну я про то же. В смысле что это не совсем уж "в лоб" когда кнопку нажал и.... Я кстати когда для IB это делал компонента который скрипт выполняет не было еще и я сам именно описаным тобой путем ;-) пошел. Даже написал компонент который скрипт на отдельные запросы разбирал и записывал покомандно в базу.
← →
Anatoly Podgoretsky (2003-09-27 10:52) [11]Silver_ © (26.09.03 16:05) [5]
Очень хорошо в этом случает "БД весит куча МБ, да ещо конфиденциальность" поможет и с размером и с конфиденциальностью. Если не не знаешь, то архивы уменьшают размер пересылаемой информации, пароли усиливают конфиденциальность, а SSL считай вообще не пробиваемая штука для конфиденциальности.
А как можно преобразовывать систему без вмешательства пользователя тебе уже указали, очень простая задачка для программиста, как правило работа минут на придцать, написать конвертор преобразования.
← →
Silver_ (2003-09-29 12:05) [12]
> Anatoly Podgoretsky © (27.09.03 10:52) [11]
SSH не юзал. Про всё остальное думаеш много народу не знает :) (только без обид)
Так и собираюсь выполнять ПО ОДНОЙ командe, необходимое количество команд(раз) для
получения нужной структуры.
В том-то и дело что говорят команды, скрипты... Обратите внимание на конец вопроса
- приветствуются ответы (тут или на мыло) на любую часть вопроса ( ввиде рабочих комманд,
так как много делается с ALTER TABLE... но правельный синтаксис я пока не нащупал).
- А также направление куда копать
> Sergey_Masloff (27.09.03 02:12) [8]
> sniknik © (27.09.03 09:54) [9]
Правельно смекнули но вопрос не решенным остался ... :(
← →
Silver_ (2003-09-29 12:17) [13]
> очень простая задачка для программиста, как правило работа
> минут на придцать
видимо не очень :о))
← →
Anatoly Podgoretsky (2003-09-29 12:21) [14]Ну эта задача для программиста.
← →
konst (2003-09-29 12:37) [15]Создай новую таблицу по нужной тебе структуре - перегони туда данные, струю дроп, новую переименовывай :)
← →
Silver_ (2003-09-29 13:24) [16]
> Anatoly Podgoretsky © (27.09.03 10:52) [11]
А почему вы решили что юзер хочет со мной делиться своей инфой :)
(Моя прога для бухгалтерии). Передавать БД мне никто не намерен, а реструктуризацию мне необходимо произвести (для добавления новых возможностей).
Есть конкретные вопросы 1 - 17
Не могу составить правельные SQL команды, чтоб произвести вышеуказаные действия
Ожидаю ответов типа:
7. ...
8. ALTER TABLE My_TableName ALTER FieldName_1 TO FieldName_2
9. ...
Только синтаксис-то не правельный. Как правельно будет не знаю и никак не получаецеа составить, и литературы ноль, того-то и спрашиваю может кто занет
> konst (29.09.03 12:37) [15]
a поля AutoIncrement Как с ними быть :(. В связях такая каша будет (никаких соотвецтвий не будет потом)
> Anatoly Podgoretsky © (29.09.03 12:21) [14]
> Ну эта задача для программиста.
видимо вы точно знаете куда копать.
Почему-то до сих пор не получил ни одного практически используемого ответа. Значит ли это что сюда программисты не заглядывают :(.
← →
Jeer (2003-09-29 13:34) [17]>Почему-то до сих пор не получил ни одного практически >используемого ответа. Значит ли это что сюда программисты не >заглядывают :(.
Сюда часто заглядываю и те, кто только считает себя программистом.
>a поля AutoIncrement Как с ними быть
Лучше без них обходиться вообще.
> Ожидаю ответов типа:
Ожидаем, что купишь книжки, прежде чем за кодинг садиться.
← →
Akni (2003-09-29 13:39) [18]
> 8. ALTER TABLE My_TableName ALTER FieldName_1 TO FieldName_2
в этом случае логика такая:
1. ALTER TABLE My_TableName ADD COLUMN FieldName_2 data_type
2. UPDATE My_TableName SET FieldName_2 = FieldName_1
3. удаление всех индексов, в которых указано поле FieldName_1
4. ALTER TABLE My_TableName DROP FieldName_1
5. новое создание индексов с полем FieldName_2
Ну а если FieldName_1 фигурирует еще и в Primary Key / Foreign Key, то еще соответственно удаление/пересоздание ключей и связей между таблицами
> и литературы ноль
А Help из Access"а и SQL? Там синтаксис вполне нормально описан
← →
Kadr (2003-09-29 13:51) [19]2Sergey_Masloff (27.09.03 10:21) [10]
а почему не использовать
isql -input test.sql
← →
Silver_ (2003-09-29 14:21) [20]
> А Help из Access"а и SQL? Там синтаксис вполне нормально
> описан
Может у меня корявый но там описывается как в самом Access сделать а не через SQL.
Пункты 1,2,4 тоже обдумывал но ведь в вопросе есть перееминование не тока Поля но и таблицы (в случае неудачного названия, то же с AutoIncrement полями нельзя снимать со щетов такую ситуацию, я просто задал все вопросы в эту тему)
> Jeer © (29.09.03 13:34) [17]
я обратился к Anatoly podgoretsky ведь он решил что я не программер(при этом не предложив ничего для решения поставленного вопроса), но почему-то даже вместе не можем найти выход из положения.
Зачем же сушествует этот форум как не для решениа задач на которых не можем сами найти ответа.
> Ожидаем, что купишь книжки, прежде чем за кодинг садиться.
Значит ли это что всем надо взять на вооружение этот совет и не доставать остальных вопросами. И вобще забыть про этот и другие форумы?
Да и потом если это так просто (Только я торможу), почему бы просто не показать правельный ответ, или указать куда копать
вместо того чтоб говорить "...вопрос легкий..."
Заметите что почти все об этом говорят но решение(примеров) не дают кроме
Sergey_Masloff (27.09.03 10:21) [10]
Akni © (29.09.03 13:39) [18]
но тоже не совсем то
> Kadr © (29.09.03 13:51) [19]
Можно подробней
← →
Anatoly Podgoretsky (2003-09-29 14:35) [21]Silver_ © (29.09.03 13:24) [16]
Нет не значит, поскольку ответы тоже только для программистов.
← →
kadr (2003-09-29 14:49) [22]2Silver_ © (29.09.03 14:21) [20]
используй IB/FB тогда можно поподробнее
а так - оптимальный выход с erwin
>Передавать БД мне никто не намерен, а реструктуризацию мне >необходимо произвести (для добавления новых возможностей).
сделай новую базу и слей в нее инфу из старой
← →
Silver_ (2003-09-29 14:55) [23]isql
Но это для Interbase, или я не прав. у меня Help по Interbase есть, я пытаюсь из него собрать нужный мне SQL синтаксис для Access но пока не получается
А вы поделитесь своими ответами, я уж разберусь.
А то, кроме утверждения что я не программер, от вас ничего больше приходит.
А любому что задает здеси вопросы можно прикрепить клеймо "Не Программер" и вы, должно быть, действительно верите что это так.
Я не собираюусь спорить с вами на эту тему ведь вы сами не знаете ответа на поставленные пункты вопроса, иначе давно хоть один стоющий совет дали бы, я по крайней мере это признаю :)
← →
kadr (2003-09-29 15:13) [24]буду не оригинален - повторюсь
сделай новую базу и слей в нее инфу из старой
← →
Jeer (2003-09-29 15:25) [25]Ответы знают и привели тебе советов здесь немало.
Могу еще один дать, свой (впрочем, что-то похожее здесь уже говорили).
В свое время делал так:
Вместе с новой версией софта придается справочник переходов
таблиц и полей из старой в новую.
На автомате при инсталляции новой версии софта (или отдельной утилитой) производится
определение структуры существующей базы и конвертирование
данных из старой в новую в соответствии со справочником переходов.
На одном дыхании об этом не расскажешь - садись и думай.
А насчет синтаксиса - сам разберешься
← →
Silver_ (2003-09-30 12:57) [26]Согласен есть советы и некоторые реально воплотимы. Но больно уж мучительное, не исключающее массу ошибок видется воплощение.
Например:
> kadr © (29.09.03 15:13) [24]
> буду не оригинален - повторюсь
> сделай новую базу и слей в нее инфу из старой
Тогда придется переписывать ссылки в таблицах для сохранения ссылочной целосности
-- Старая БД --
Table_1
IDField (Autoinc) | DataField(Char(20))
4 |Row 1
5 |Row 2
7 |Row 3
9 |Row 4
-- Новая БД --
Table_1
IDField (Autoinc) | DataField(Char(20))
1 |Row 1
2 |Row 2
3 |Row 3
4 |Row 4
Если Table_1 справочник то ... :(.
А переписивать во всех таблицах ссилочную инфу ради простого переименованиа таблицы(например) это же просто жуть, да еще не исключены ошибки(забыл в одной таблице откорреcтировать ссылки), не станте же вы исклиучати это.
Вобщем новая БД(Таблица) не выход. Не могу поверить что в SQL Access-а не вставили та такую вещь (в IB, SyBase по ходу есть). Да и тут наверное есть, просто надо знать где искать. Я вот не заю :((
← →
Anatoly Podgoretsky (2003-09-30 13:13) [27]Так у тебя что ссылки через автоинкриментное поле, тогда это могила, не с перекачкой, а по всем статьям.
в IB нет автоинкриментных полей!
← →
Silver_ (2003-09-30 13:27) [28]в IB нет автоинкриментных полей!
я юзаю не IB а Access и этом было сказано с самого начала. Просто я пытаюсь на базе IB примеров получить синтаксис для Access-а, так как там, по крайней мере, у меня примеров нету
← →
Silver_ (2003-09-30 13:33) [29]Вобщем нашел я один выход, правда через ж. но всё-же выход. Правда есть пару НО:
С помощью команды "SELECT * INTO NewTable FROM OldTable" где с помощью следующего метода
вместо * - OldTable.OldFieldName AS NewFieldName, ... можно добитьтся нужного мне эффеcта. Теперь про те самые НО
1. Нельзя сделать что-то вроде "SELECT * INTO A FROM A". Выход видется только такой
- SELECT !нужные мне правки! INTO A FROM Temp_A
- Dobavlenie, udalenie, ...(это уже знаю как) полей из Temp_A
- DROP TABLE A
- SELECT * INTO A FROM Temp_A
- DROP TABLE Temp_A
Особо страшного здесь ничего нет. Но на то мы и программеры чтоб предвидеть...
- А что если "А" настолько "большая" что занимает больше свободного места на диске,
отсюда виход требовать от юзера на всякий случай свободного места не меньше половина размера базы,
для простого переименования Таблицы, Поля. Не хило :)
ВОПРОС: Можно ли уснать Величину Таблицы которая она знимает на диске в МБ. Дабы не начинать операцию если места не достаточно.
2. Description не переписываются.
ВОПРОС: Как этого(копирования description) добиться.
Правда это не так уж существенно, если прога разрабатывается совместно с другими программистами то им можно послать обьяснение как править БД, а для юзера это и вобще не нужно.
Это ведет лишь к тому что придется забыть о желании использовать данное описание для простого пояснения юзеру о назначении данного поля.
3. Нерешенными остаются следующие вопросы
3- Create Query
4- Delete Query
5- Modify Query Command
6- Modify Query Name
7- Modify Query Description
← →
Anatoly Podgoretsky (2003-09-30 13:35) [30]Вот твои слова
не вставили та такую вещь (в IB, SyBase по ходу есть).
так вот там такой вещи нет.
Автоинкриментные поля сильно препятсвуют реструктиризации бахы и не дай бог база собъется, тогда это верная могила.
← →
Silver_ (2003-09-30 14:19) [31]> не вставили такую вещь (в IB, SyBase по ходу есть).
Имелось ввиду не AutoIncrement поля а те самые возможности которые мне нужны (1-11)
(насчет 4-7 не в курсе(не пробовал пока))
PS. а у SyBase AutoIncrement поле какраз можо сделать без всяких Trigger-ов и других мучений:
Data Type = integer; Default = autoincrement
← →
sniknik (2003-09-30 15:23) [32]Silver_ © (30.09.03 12:57) [26]
> Тогда придется переписывать ссылки в таблицах для сохранения ссылочной целосности
> -- Старая БД --
> Table_1
> IDField ( Autoinc)
не придется, insert into в access позволяет замещать автоинкрементное поля. получиш полную копию. даже если сначала номера не заняты упаковка базы выставит автоинкрементные поля по мокимальному значению. (обязательная операция будет после скрипта)
Silver_ © (30.09.03 13:33) [29]
> 1. Нельзя сделать что-то вроде "SELECT * INTO A FROM A". Выход видется только такой
именно вот так и можно, ты просто не пробовал.
>Особо страшного здесь ничего нет. Но на то мы и программеры чтоб предвидеть...
> - А что если "А" настолько "большая" что занимает больше свободного места на диске,
> отсюда виход требовать от юзера на всякий случай свободного места не меньше половина размера базы,
> для простого переименования Таблицы, Поля. Не хило :)
ничего требовать не надо, надо делать запросы из одной базы в другую, и она вырастет не больше чем исходная. (перекресные запросы между базами описаны в вышеупомянутом хелпе в разделе "IN")
> 2. Description не переписываются.
если уж необходимо то переписать можно, прочитай про получение схем в ADO (так например имена таблиц и полей получают), не найдеш поищу я гдето делал.
> 3. Нерешенными остаются следующие вопросы
3- Create Query
...
это что шутка? как составить запрос это проблема? или под квери понимаеш Access-овский как там в форме дано? так это View либо процедура (в извращенном понятии Access) по ним и смотри в вышеупомянутой справке.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.10.20;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.01 c