Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
3 / 3 / 1
Регистрация: 14.12.2010
Сообщений: 36

База данных как объект

13.01.2011, 12:32. Показов 1609. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте снова. Заранее извиняюсь если не в ту ветку. Вообщем пишу на С++ Builder'e программу для работы с базами. Задача в следующем - представить нужные элементы БД в виде объектов. Нужно сделать что-то типа ORM. Т.е. пользователь выбирает БД, выбирает таблицу, выбирает поле и вводит значение этого поля. Далее программа должна вытащить из базы всю нужную структуру (связи) и связанные данные и записать в структуру. И дальше программа уже будет работать с этой структурой, а не с базой данных. Проблема в том что никак не могу спроектировать нормальный вид структуры для хранения связей и данных. Вероятно даже это должны быть две связанные структуры... не знаю. Может у вас есть какие-нибудь мысли по поводу как она должна выглядеть, какие в ней/них должны быть поля, методы...? Заранее спасибо! =)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.01.2011, 12:32
Ответы с готовыми решениями:

Как называется база данных в C++ Builder
Не нашел в интернете... База данных в C++ Builder называется объектно-ориентировочная?

Пожалуйсто объясните как присоединить к проекту база данных (.accdb)
Пожалуйсто объясните как присоединить к проекту база данных (.accdb) и какие компоненти использовать чтоб работать с базои, в нисти...

Как создать объект оператором new, если имеется только тип указателя на объект, переданный через шаблон?
Есть шаблон. Точно известно, что его параметр Т это указатель. Как с помощью new создать переменную типа *T ? Код приведенный ниже дает...

15
 Аватар для AlexSt
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
13.01.2011, 14:35
Цитата Сообщение от BlackStranger Посмотреть сообщение
Может у вас есть какие-нибудь мысли по поводу как она должна выглядеть, какие в ней/них должны быть поля, методы...? Заранее спасибо! =)
Сама структура вроде бы никак и ни от кого не зависит, возможно тебе нужно написать функции для связи 2 структур, О_о , тут мне кажется проще работать с базой, ведь там все связано, да и сервер бд сделает за тебя все необходимые задачи, ну если я правильно понял вопрос.
Там из вопрса я понял что ты немного противоречишь себе, ты либо пиши программу для работы со структурами либо для работы с БД,
Цитата Сообщение от BlackStranger Посмотреть сообщение
Т.е. пользователь выбирает БД, выбирает таблицу, выбирает поле и вводит значение этого поля.
в принципи пользователь выполняя такие действия, заполняет запрос, причем конкретный, значение поля и связи, сответсвенно субд сама тебе выдаст конкретные данные.
работай с этими данными, результат после обработки отправляешь субд.

Добавлено через 16 минут
Материал из википедии:
Использование реляционной базы данных для хранения объектно-ориентированных данных приводит к семантическому провалу, заставляя программистов писать программное обеспечение, которое должно уметь как обрабатывать данные в объектно-ориентированном виде, так и уметь сохранить эти данные в реляционной форме. Эта постоянная необходимость в преобразовании между двумя разными формами данных не только сильно снижает производительность, но и создает трудности для программистов, так как обе формы данных накладывают ограничения друг на друга.

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

ты один пишешь такую крутую прогу?
0
3 / 3 / 1
Регистрация: 14.12.2010
Сообщений: 36
13.01.2011, 14:51  [ТС]
Нене... возможно Вы меня не так поняли. Нет противоречий! Мне нужно работать с базой, но предварительно перегоняем все, что надо в объект! И в итоге я работаю именно с объектом (не знаю структура/класс - один фиг по сути), в котором будут хранится данные и связи. Ну, например, один из вариантов такой:
C++
1
2
3
4
5
6
7
8
struct TTableDB
{
UnicodeString tableName;               // имя таблицы
UnicodeString primaryKey;              // первичный ключ
std::vector<UnicodeString> columns;    // вектор названий столбцов
std::list< std::vector<Variant>>rows;  // список записей таблицы, удовлетворяющих запросу пользователя 
std::list< TTableDB* > relTables;      // список таблиц связанных с текущей
};
Мой вариант мне не шибко нравится, т.к. в последствии тяжело с ним работать, да и реализовать непросто. Вот я и хочу узнать может какие-нибудь нормальные варианты есть, как описать такую структуру?

Добавлено через 2 минуты
Да я пишу один.
0
 Аватар для AlexSt
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
13.01.2011, 15:11
Цитата Сообщение от BlackStranger Посмотреть сообщение
И в итоге я работаю именно с объектом (не знаю структура/класс - один фиг по сути),
структура, обьект, класс, разные вещи.
Сказал примерно щас так," молекула, бактерия, человек, по сути одно и тоже"
0
3 / 3 / 1
Регистрация: 14.12.2010
Сообщений: 36
13.01.2011, 15:17  [ТС]
Не цепляйтесь к словам, пожалуйстa! =) Я имел ввиду что разница между структурой и классом не такая уж и большая (насколько я знаю - разница между ними только в модификаторах доступа, установленных по умолчанию) и в данном случае без разницы что использовать!
0
 Аватар для AlexSt
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
13.01.2011, 15:20
даже низнаю чем тебе помоч, опиши задачу по подробнее, ну как на экзаменах здают.
0
3 / 3 / 1
Регистрация: 14.12.2010
Сообщений: 36
13.01.2011, 21:02  [ТС]
А что именно непонятно? Задача подробно описана в сообщениях 1 и 3. Есть БД. Есть пользователь, который выбирает таблицу из этой БД, выбирает поле и вводит значение этого поля. Нужно взять из БД все данные удовлетворяющие данному условию. Затем мы для этой таблицы смотрим ее связи и вытаскиваем удовлетворяющие условию данные из связанных таблиц. Эти данные нужно хранить в памяти в каком-либо удобном виде. Мне кажется удобнее всего использовать struct. И вся дальнейшая работа с этими данными уже должна происходить через этот struct. Проблема в том, что я не могу понять как должен выглядеть этот самый struct! Пример того, что я хочу получить я привел в сообщении 3, но мне он не нравится. Понятен смысл задачи?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
13.01.2011, 23:50
BlackStranger, а можно вопрос зачем, если это уже давно реализовано в классах, наследующих TDataSet, если уж так надо, то объекты этих классов поместите в структуру или класс, как вам уже удобнее... а вообще структура БД можно получить sql-запросами, просто надо почитать мануал по конкретной субд
0
3 / 3 / 1
Регистрация: 14.12.2010
Сообщений: 36
14.01.2011, 12:47  [ТС]
Нет, структуру самой БД получить не проблема.
объекты этих классов поместите в структуру или класс
- вот это интересная идея. Сейчас подумаю над этим =)

Добавлено через 5 часов 12 минут
Вообщем не знаю... пока остановился на таком варианте. Создаем свое n-арное дерево (или юзаем TTreeView) и в его узлы кидаем struct'ы такого вида:
C++
1
2
3
4
5
6
7
struct TTableDB
{
   UnicodeString             name;
   UnicodeString                     primaryKey;
   std::vector<UnicodeString>        columns;
   std::list< std::vector<Variant> > rows;
};
Связанность будет обеспечивать само дерево и где-то еще хранить ссылки на связанные таблицы не придется. Как Вы думаете сделать так, или еще подумать? =)
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
14.01.2011, 13:28
BlackStranger, вы хотите сотворить подобие пакетов по работе с базами? просто непонятно, зачем вам такое городить, да и дерево связей звучит слегка сомнительно
0
3 / 3 / 1
Регистрация: 14.12.2010
Сообщений: 36
14.01.2011, 14:54  [ТС]
Да на самом деле я понимаю, что тут у меня уже бред пошел =)
Просто надо работать с базой как с объектом. Получили нужные данные из базы, записали в память. Все. Базу больше не трогаем.
0
 Аватар для AlexSt
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
14.01.2011, 15:29
Цитата Сообщение от BlackStranger Посмотреть сообщение
Да на самом деле я понимаю, что тут у меня уже бред пошел =)
Просто надо работать с базой как с объектом. Получили нужные данные из базы, записали в память. Все. Базу больше не трогаем.
Я смысл невижу данных операций О_о, у вас слишком нагружена субд, что вы пишите "толстый клиент"?
0
3 / 3 / 1
Регистрация: 14.12.2010
Сообщений: 36
14.01.2011, 15:41  [ТС]
AlexSt, знаете есть такое слово "надо". Ну если мне нужно именно так сделать, что я поделаю! =)

Добавлено через 1 минуту
В базе около 500 таблиц, но не только из-за этого я так делаю. Просто так нужно.
0
 Аватар для AlexSt
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
14.01.2011, 17:33
Цитата Сообщение от BlackStranger Посмотреть сообщение
В базе около 500 таблиц, но не только из-за этого я так делаю. Просто так нужно.
Если у вас нагружена субд, то вы делаете правильно а если нет, то "нужно" , это не правильно .
а программировать нужно правильно.
Логика она такая чтука, либо она есть либо её нет.
Больше ничем непомагу, так как не выполнял такие задачи.

Добавлено через 1 час 47 минут
Хотел бы узнать итог решения проблеммы, отпиши если несложно, как справился и тп. Самому интересно просто, ниразу не писал "толстый клиент" для работы с БД.
0
3 / 3 / 1
Регистрация: 14.12.2010
Сообщений: 36
14.01.2011, 19:18  [ТС]
Окей, отпишусь =)
0
3 / 3 / 1
Регистрация: 14.12.2010
Сообщений: 36
24.01.2011, 11:18  [ТС]
Вообщем, вышеобозначенная проблема была решена созданием двух связанных структур, которые имеют следующий вид:
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct TRow
{
    std::map<UnicodeString, Variant>        records;
    std::list< boost::shared_ptr <TTable> >     tables;
        // ...
};
struct TTable
{
    UnicodeString                   name;
    std::list< boost::shared_ptr <TRow> >       rows;
        // ...
};
Добавлено через 1 минуту
Сильно не критикуйте =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.01.2011, 11:18
Помогаю со студенческими работами здесь

Подсобите примерами - база данных без базы данных
Доброго времени суток! Есть следующая задача - курсовой по программированию с использованием баз данных (но вся фишка состоит в том, что...

Обновление невозможно. База данных или объект доступны только для чтения
Пишу в макросе Excel нижеприведенный код для соединения с именованным диапазоном активной книги, и при попытке обновить поле получаю : ...

Обновление базы и ошибка: Обновление невозможно. База данных или объект доступны только для чтения.
Помогите пожалуйста! asp не может обновить базу. Про ошибку говорит Microsoft OLE DB Provider for ODBC Drivers (0x80004005) ...

База данных, основанная на службах vs База данных SQL Server
Доброго времени суток. Делал я, значит, Data Access Layer для ASP.NET MVC проекта. Создал обычную библиотеку классов, моделей туда...

Как подключиться к базе данных на Wpf. База данных Sql Server
Раньше работал с Windows Worms, и то не долго. Щас хочу перейти на WPF. Я в этом деле еще новичок. Не могли бы вы объяснить как...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
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. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru