| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Как работают с базами данных в Visual C++? |
| Автор: Дмитрий Т 24.6.2006, 11:32 |
| Программирую в основном на Borland C++ Builder, а невизуальные проекты на Visual C++, но хочется осесть на чём-то одном. Большая часть программ у меня связана с базами данных и отсюда вопрос: "Как работают с базами данных в Visual C++?". Пролистав книги на эту тему удивился как мало этому уделено внимания. Для Borland C++ Builder и Delphi есть даже отдельные труды, а тут по два слова и нигде не встретил примеров построения сложного GUI для работы с информацией из баз данных... У Borland C++ Builder есть куча визуальных компонентов которые заточены на работу с БД. Visual C++ такого не наблюдаю... Может не знаю где смотреть? С ODBC, OLE DB, ADO в общих чертах разобрался, но нет понимания цельной системы, т.е. непонимаю как автоматизировать показ информации из БД и занесение в БД? В Borland например достаточно взять нужный компонет нижнего уровня (например позволяющий работать с MySQL), потом связать с промежуточным (DataSource) и последний шаг - указать этот DataSource в специализированных визуальных компонентах. При этом существуют такие визуальные компоненты, как навигатор (набор кнопок для перемещения по выбранным данным), визуальные построители SQL запросов, чтоб пользователь мог делать любую выборку, сетки в которых можно задавать щелчком по заголовку столбца сортировку по этому полю (SQL меняется автоматически). А как сделать полноценную программу, ориентированную на БД, с помощью Visual C++? |
| Автор: DeadSoul 24.6.2006, 11:53 |
| См. классы CDatabase\CDaoDatabase и CRecordset\CDaoRecordset |
| Автор: Дмитрий Т 24.6.2006, 13:36 | ||
Это я видел, а как показывать? Я кроме CRecordView ничего не нашёл, а как редактировать записи? Как сделать выпадающие списки содержащие данные из связанных таблиц? Как сделать сетку (таблицу) и др. полезные элементы? |
| Автор: DeadSoul 24.6.2006, 17:34 |
| Дмитрий Т, я все делал руками |
| Автор: Дмитрий Т 24.6.2006, 18:48 | ||
Это означает дополнительные траты времени, а для меня сейчас это слишком дорогое удовольствие... Может есть коммерческие компоненты восполняющие этот пробел? |
| Автор: Дмитрий Т 26.6.2006, 20:12 | ||
Да, там полно классов для баз данных... А кто-нибудь может порекомендовать что-то лично опробованное? |
| Автор: DeadSoul 26.6.2006, 20:46 | ||
Я тут пас. |
| Автор: КУБ 27.6.2006, 13:56 |
| Зайди сюда http://worldcpp.vingrad.ru/ Потом зайди в раздел "Базы данных" Потом в "Как сделать базу данных?Очень просто!" И увидиш простой пример на Visual C++. Дерзай |
| Автор: Coocky 27.6.2006, 14:06 | ||||
Неа. Чел не хочет научится работать с БД VC++. Ему нужен халявный полнофункциональный грид (единственое ,чем могут похваться Билдер и Делфятина Но такого, братан,нет. Со мной рядом делфятник сидит. Да ,с БД он работает быстро. Кинул грид на форму-и все. Только мышкой щелкает, да пару функций прописывает. Зависть берет...Пока проблемы не начнутся, или расширить функциональность надо. Вот тут он и тухнет. И мышка не спасает ... Тут уж не пощелкаешь. |
| Автор: Dart 27.6.2006, 16:04 |
| Посмотри http://forums.progers.net.ru/showthread.php?t=45. Это если хочешь OLE DB |
| Автор: Дмитрий Т 27.6.2006, 19:09 | ||||
| Благодарю КУБ и Dart за ссылки - посмотрел, буду пробовать, чтоб понять в чём смысл такой бедности компонентов в этой области. Неужели основная масса программ для баз данных пишется на Delphi
А жаль, я бы купил набор человеческих компонентов для MySQL. Сейчас смотрю crlab.com, но грид у них похоже только для бюилдера, собираюсь попробовать их демки.
Неуч он у тебя |
| Автор: Дмитрий Т 29.6.2006, 05:37 | ||
Нашёл гриды. Вот пара понравившихся: платный: http://www.theultimatetoolbox.com/ бесплатный: http://www.codeproject.com/miscctrl/datagrid.asp но есть и другие. |
| Автор: Dart 29.6.2006, 09:37 | ||
Так он поэтому и бесплатный
Кроме сетки там ничего нет, так что нету счастья Если хочешь, давай мыло, есть у меня кое-какие наработки, на следующей неделе вышлю (бесплатно), вот только работу одну доделаю. |
| Автор: DeadSoul 29.6.2006, 21:37 | ||
Я тебя разочарую. Нрида подходящего тебе никогда не существует. СОВСЕМ некогда. А 500 баксов при серьезной разработке - это не еньги(2 недели работы опытного программиста) |
| Автор: Nuzur 30.6.2006, 12:34 | ||
| Так а в чом проблема я не понимаю? Есть AdoDc кидаете его на свое окошко там можно строку подключения собрать как на лету так и перед запуском приложения. Если нужен грид то у меня есть бесплатный( тоесть есть бесплатная и платные версии, я всегда бесплатной пользовался так что скока стоит не скажу), он ActiveX. Если нуна можу подкинуть там ограничение на 1000 строк вроде... Я сам с Дельфятинки переходил. Вначале было много неясностей но теперь мне дажу удобней и понятней все стало. Переход занял не много.
Ну дык в чем проблема то? А за сколько вы хотели хорошую гридину за 10 баксов что-ли? |
| Автор: takedo 30.6.2006, 12:51 |
| Вопрос то был в том, чтобы дать человеку определиться, на чем ему остановиться. Вообще я думаю, что лучше уж на Buildere пусть сидит человек, так как если чего посложнее надо делать это и на билдере можно сбацать, только сложновато все и неявно. Я тоже на билдере начинал, если надо было что быстро сбацать- красота, а как посложнее, так это как Coocky рассказывал... Правда я тогда имел вообще очень смутные представления программирования под виндовс |
| Автор: En_t_end 30.6.2006, 20:36 |
| Предлагаю оболочку написать самому |
| Автор: MURYONOK 2.7.2007, 18:57 |
| возник следующий вопрос, связанный с бд в визуале: известна только первая таблица из базы, её успешно получается связать с компонентами, но вот остальные таблицы свзять не удаётся. может кто что подсказать? |
| Автор: olicheg 30.1.2011, 11:44 |
| с Mysql очень просто. ставишь dbForge Studio for MySQL. абсолютно бесплатный. а запросы пишется еще проще #include "stdafx.h" #include <windows.h> #include <winbase.h> #include <winsock.h> #include <my_global.h> #include <mysql.h> #include <errmsg.h> #include <mysqld_error.h> #pragma comment(lib, "libmysql.lib") //using namespace System; void puterror(char * str); int main(array<System::String ^> ^args) { // Дескриптор соединения MYSQL conn; // Дескриптор результирующей таблицы MYSQL_RES *res; // Дескриптор строки MYSQL_ROW row; // Получаем дескриптор соединения if(!mysql_init(&conn)) // puterror("Error: can't create MySQL-descriptor\n"); printf("%sn", "123"); // Устанавливаем соединение с базой данных if(!mysql_real_connect(&conn, "localhost", "root", "admin", "mysql", 0, NULL, 0)) puterror("Error: can't connect to MySQL server\n"); // Устанавливаем кодировку соединения, чтобы предотвратить // искажения русского текста if(mysql_query(&conn, "SET NAMES 'cp1251'") != 0) puterror("Error: can't set character set\n"); // Выполняем SQL-запрос if(mysql_query(&conn, "SELECT * FROM books.author") != 0) puterror("Error: can't execute SQL-query\n"); // Получаем дескриптор результирующей таблицы res = mysql_store_result(&conn); if(res == NULL) puterror("Error: can't get the result description\n"); // Если имеется хотя бы одна запись - выводим // список каталогов if(mysql_num_rows(res) > 0) { // В цикле перебираем все записи // результирующей таблицы while((row = mysql_fetch_row(res)) != NULL) { // Выводим результат в стандартный поток fprintf(stdout, "%s\n", row[1]); } } // Освобождаем память, занятую результирующей таблицей mysql_free_result(res); // Закрываем соединение с сервером базы данных mysql_close(&conn); // Console::WriteLine(L"Hello World"); return 1; } void puterror(char * str) { fprintf(stderr, str); exit(1); } ///////////////////////////////////*.h файлы находятся там где установлена твоя mySql(прописать путь в tools->options) my_global.h> mysql.h> errmsg.h> mysqld_error.h> |