Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/12: Рейтинг темы: голосов - 12, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 5

Как программно поменять структуру уже имеющегося DB файла?

10.06.2011, 20:00. Показов 2540. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Вопрос в следующем: есть n-ое количество DB файлов, в которых надо поменять структуру (и тип полей и наименование полей).
Как это сделать программно?
Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.06.2011, 20:00
Ответы с готовыми решениями:

CMD. Создание папки с названием равным типу уже имеющегося файла в том месте где создана папка
у меня пока есть только вот эта строчка которая записана в "пакетный файл Windows" : if exist %cd%\lol\*.txt md %cd%\lol\txt ...

Как создать новый массив из уже имеющегося массива ?
Здравствуйте, помогите пожалуйста. У меня есть какой то массив, пусть будет . Мне надо из этого массива создать новый массив, где будет...

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

9
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
10.06.2011, 23:56
ALTER TABLE
0
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 5
15.06.2011, 01:02  [ТС]
пишу:

C++
1
2
3
   Query1->Close();
   Query1->SQL->Text = "ALTER TABLE INDEKS ALTER COLUMN Nazwa2 varchar2(100) not null";
   Query1->ExecSQL();
ругается на ALTER (((

Добавлено через 1 час 57 минут
странно, вот играюсь, и наблюдаю, что добавляет и удаляет колонку - нормально, НО вот изменить или тип или идентификатор колонки -
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
15.06.2011, 09:37
1. не во всех СУБД можно переименовать колонку, в некоторых только завести новую, а потом удалить старую
2. для изменения типа поля многие СУБД требуют, чтобы эта колонка была пустой (без данных), чтобы предварительно не заниматься проверкой того, все ли данные удовлетворяют новому типу
3. в большинстве случаев создавать таблицы, а тем более менять их параметры из программы - признак дурного тона и плохого проектирования приложения. По хорошему таблицы создаются каким-либо штатным инструментом, а потом в клиентской программе идет только работа с данными
0
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 5
15.06.2011, 10:31  [ТС]
3. в большинстве случаев создавать таблицы, а тем более менять их параметры из программы - признак дурного тона и плохого проектирования приложения. По хорошему таблицы создаются каким-либо штатным инструментом, а потом в клиентской программе идет только работа с данными
я понимаю, НО, суть в том, что у меня есть некая БД (содержащаяся в *.DB файлах), и мне надо её "перекрутить", чтобы я смог её использовать в своей программе (с новой структурой и т.п.) и чтобы потом не было претензий.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
15.06.2011, 10:46
Delphi
1
1. не во всех СУБД можно переименовать колонку, в некоторых только завести новую, а потом удалить старую
Пример в студию ! Не путаете ли Вы ограниченность СУБД с ограниченностью некоторых тулзов ?

Delphi
1
2. для изменения типа поля многие СУБД требуют, чтобы эта колонка была пустой (без данных), чтобы предварительно не заниматься проверкой того, все ли данные удовлетворяют новому типу
Не "многие", а все ! Но требуют только в том случае, если новый тип данных не совместим полностью со старым и реструктуризация таблицы приведет (может привести - везде по-разному) к потере данных. Например при увеличении ширины символьного поля или точности дробного числа сервер "проглотит" запрос без возражений. Однако блокирована будет попытка изменить тип поля, на который имеются внешние ссылки либо он сам ссылается на что-либо. Крайне негативно сервера относятся и к попытке изменить тип поля, являющегося (или входящим в состав) PRIMARY KEY - еще один весомый аргумент в пользу доктрины "суррогатов" в вечном холиваре "натив - суррогат"

Delphi
1
3. в большинстве случаев создавать таблицы, а тем более менять их параметры из программы - признак дурного тона и плохого проектирования приложения. По хорошему таблицы создаются каким-либо штатным инструментом, а потом в клиентской программе идет только работа с данными
И создавать, и тем более менять таблицы из программ (другой вопрос - КАКИХ программ !) - это не "дурной" тон, а жизненная необходимость, сплошь и рядом бытующая среди вполне популярных программ (1С например) и говорящая только о том, что и программа и база ЖИВУТ, т.е. активно используются ГОДАМИ !
Но с Вами нужно согласиться когда речь идет например об отлаженном (или выдаваемым за таковой) проект прикладного уровня (не универсального как 1С, а предназначенного для решения ТОЛЬКО ОДНОЙ ПРОБЛЕМЫ).
Для топикстартера это, уверен, актуально. Но для общего развития посчитал не лишним прокомменировать

По теме: Мануалы по SQL писаны не для джидаев ?

Добавлено через 2 минуты
Delphi
1
я понимаю, НО, суть в том, что у меня есть некая БД (содержащаяся в *.DB файлах), и мне надо её "перекрутить", чтобы я смог её использовать в своей программе (с новой структурой и т.п.) и чтобы потом не было претензий.
Используйте тулзу (многие советуют для dbf юзать чудуюду "Database DeskTop", а я бы посоветовал найти в инете более хороший инструмент - их там в достатке, причем основаная масса шараварная)
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
15.06.2011, 11:08
Цитата Сообщение от MsGuns
Delphi
1
1. не во всех СУБД можно переименовать колонку, в некоторых только завести новую, а потом удалить старую
Пример в студию ! Не путаете ли Вы ограниченность СУБД с ограниченностью некоторых тулзов ?
За все СУБД не скажу, но например, в Oracle переименование колонки появилось только в 9 версии. Да и дело не в тулзах, если такой конструкции SQL принципиально не было.

Цитата Сообщение от MsGuns
Delphi
1
2. для изменения типа поля многие СУБД требуют, чтобы эта колонка была пустой (без данных), чтобы предварительно не заниматься проверкой того, все ли данные удовлетворяют новому типу
Не "многие", а все ! Но требуют только в том случае, если новый тип данных не совместим полностью со старым и реструктуризация таблицы приведет (может привести - везде по-разному) к потере данных. Например при увеличении ширины символьного поля или точности дробного числа сервер "проглотит" запрос без возражений.
Дело не только в потере данных. Многие вопросы при "изготовлении" СУБД решаются, исходя из производительности. Например, просмотреть данные в миллион/несколько миллионов записей, чтобы убедиться, что какое-то одно значение не позволит произвести изменение не очень рационально. Поэтому Oracle, например, не даст сделать на непустой колонке изменение varchar2 -> number, даже если все данные вполне числовые - он просто не будет заниматься проверкой допустимости

Цитата Сообщение от MsGuns
Delphi
1
3. в большинстве случаев создавать таблицы, а тем более менять их параметры из программы - признак дурного тона и плохого проектирования приложения. По хорошему таблицы создаются каким-либо штатным инструментом, а потом в клиентской программе идет только работа с данными
И создавать, и тем более менять таблицы из программ (другой вопрос - КАКИХ программ !) - это не "дурной" тон, а жизненная необходимость, сплошь и рядом бытующая среди вполне популярных программ (1С например) и говорящая только о том, что и программа и база ЖИВУТ, т.е. активно используются ГОДАМИ !
Но с Вами нужно согласиться когда речь идет например об отлаженном (или выдаваемым за таковой) проект прикладного уровня (не универсального как 1С, а предназначенного для решения ТОЛЬКО ОДНОЙ ПРОБЛЕМЫ).
Опять же, зависит от проектирования. Например, система ERP-уровня OeBS. Там можно добавлять пользовательские расширения и даже создавать таблицы для этих расширений. Но никогда не приходится изменять те таблицы, которые поставляются вместе с системой. Если надо добавить к сущности доп. атрибут, то под это зарезервированы колонки. Хорошо это или плохо - отдельная статья, но возможность не менять существующие таблицы имеется
0
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 5
15.06.2011, 11:10  [ТС]
спользуйте тулзу (многие советуют для dbf юзать чудуюду "Database DeskTop"
Как щас: есть некая БД (порядка 300 файлов), я её "взял на время" )), разобрал структуру, связи и т.п. Написал свою программу, которая тащит оттуда данные. В некоторых полях этой БД - указан тип Memo + идентификаторы полей имеют ЗАМЕТНО специфические названия.
Писал программу сначала для себя, для домашнего пользования. А вот теперь захотелось её продавать.
Так вот: чтобы ко мне не возникало вопросов "со стороны" - мне необходимо как переименовать сами файлы БД, так и переименовать поля и кое-где поменять типы данных. А я эти изменения уже учту у себя в программе.

P.S. я пользовал DataBase, которой я изменял и идентификатор и тип поля Memo на строку (255), правда он меня переспрашивал о перемене, но делал и всё нормально. Но так играться с порядка 300 файлов - сами понимаете. Вот и возникла идея написать небольшую прогу, чтобы перекрутить мне базу.
0
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 5
16.06.2011, 19:40  [ТС]
я так понимаю что проблема неразрешимая? (((
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
17.06.2011, 12:09
Вам еще в [2] был дан ответ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.06.2011, 12:09
Помогаю со студенческими работами здесь

Добавление текста в Мемо из файла (с сохранением уже имеющегося текста)
procedure TForm1.FormCreate(Sender: TObject); begin if FileExists('c:\1.txt') then Memo1.Lines.LoadFromFile('c:\1.txt') else ...

Как поменять программно иконку файла?
Добрый день/вечер, такой вопрос: каким способом можно поменять иконку у скомпилированного exe файла? Допустим 2 программы с разными...

Как программно поменять иконку файла?
как программно поменять иконку файла?

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

Как вставить код в инпут, без потери уже имеющегося текста, при клике по картинке?
Добрый день. Подскажите пожалуйста как вставить код в инпут, без потери уже имеющегося текста, при клике по картинке?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru