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

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

13.01.2011, 12:32. Показов 1618. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru