Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Цитата(DeadSoul @ 24.6.2006,  12:53)
См. классы CDatabase\CDaoDatabase  и CRecordset\CDaoRecordset

Это я видел, а как показывать? 
Я кроме CRecordView ничего не нашёл, а как редактировать записи? 
Как сделать выпадающие списки содержащие данные из связанных таблиц?
Как сделать сетку (таблицу) и др. полезные элементы? 

Автор: DeadSoul 24.6.2006, 17:34
Дмитрий Т, я все делал рукамиsmile 

Автор: Дмитрий Т 24.6.2006, 18:48
Цитата(DeadSoul @ 24.6.2006,  18:34)
Дмитрий Т, я все делал рукамиsmile

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

Автор: DeadSoul 24.6.2006, 19:03
Цитата(Дмитрий Т @  24.6.2006,  18:48 Найти цитируемый пост)
Цитата(DeadSoul @ 24.6.2006,  18:34)
Дмитрий Т, я все делал руками
Это означает дополнительные траты времени, а для меня сейчас это слишком дорогое удовольствие...
Может есть коммерческие компоненты восполняющие этот пробел?  

Думаю, что есть даже некоммерческие. Стоит искать на codeguru.com и codeproject.com 

Автор: Дмитрий Т 26.6.2006, 20:12
Цитата(DeadSoul @ 24.6.2006,  20:03)
Думаю, что есть даже некоммерческие. Стоит искать на codeguru.com и codeproject.com

Да, там полно классов для баз данных... 
А кто-нибудь может порекомендовать что-то лично опробованное? 

Автор: DeadSoul 26.6.2006, 20:46
Цитата(Дмитрий Т @  26.6.2006,  20:12 Найти цитируемый пост)
Цитата(DeadSoul @ 24.6.2006,  20:03)
Думаю, что есть даже некоммерческие. Стоит искать на codeguru.com и codeproject.com
Да, там полно классов для баз данных... 
А кто-нибудь может порекомендовать что-то лично опробованное?  

Я тут пас. 

Автор: КУБ 27.6.2006, 13:56
Зайди сюда http://worldcpp.vingrad.ru/

Потом зайди в раздел "Базы данных"

Потом в "Как сделать базу данных?Очень просто!" 


И увидиш простой пример на Visual C++. Дерзай  smile  

Автор: Coocky 27.6.2006, 14:06
Цитата(КУБ @  27.6.2006,  13:56 Найти цитируемый пост)
Потом зайди в раздел "Базы данных"

Потом в "Как сделать базу данных?Очень просто!" 


И увидиш простой пример на Visual C++. Дерзай  


Цитата(Дмитрий Т @  24.6.2006,  13:36 Найти цитируемый пост)
Это я видел, а как показывать? 
Я кроме CRecordView ничего не нашёл, а как редактировать записи? 
Как сделать выпадающие списки содержащие данные из связанных таблиц?
Как сделать сетку (таблицу) и др. полезные элементы?  


Цитата(Дмитрий Т @  24.6.2006,  18:48 Найти цитируемый пост)
Может есть коммерческие компоненты восполняющие этот пробел?  


Цитата(Дмитрий Т @  26.6.2006,  20:12 Найти цитируемый пост)
А кто-нибудь может порекомендовать что-то лично опробованное?  



Неа. Чел не хочет научится работать с БД VC++. Ему нужен халявный полнофункциональный грид (единственое ,чем могут похваться Билдер и Делфятина smile ) для работы с БД ля VC++.
Но такого, братан,нет. smile  Все руцями нуна делатьsmile 
Со мной рядом делфятник сидит. Да ,с БД он работает быстро. Кинул грид на форму-и все. Только мышкой щелкает, да пару функций прописывает. Зависть берет...Пока проблемы не начнутся, или расширить функциональность надо. Вот тут он и тухнет. И мышка не спасает ...
Тут уж не пощелкаешь. smile  Тут программировать надо smile 
  

Автор: Dart 27.6.2006, 16:04
Посмотри http://forums.progers.net.ru/showthread.php?t=45. Это если хочешь OLE DB 

Автор: Дмитрий Т 27.6.2006, 19:09
Благодарю КУБ и Dart за ссылки - посмотрел, буду пробовать, чтоб понять в чём смысл такой бедности компонентов в этой области. 
Неужели основная масса программ для баз данных пишется на Delphi  smile 

Цитата(Coocky @ 27.6.2006,  15:06)
Неа. Чел не хочет научится работать с БД VC++. Ему нужен халявный полнофункциональный грид (единственое ,чем могут похваться Билдер и Делфятина smile ) для работы с БД ля VC++.
Но такого, братан,нет. smile  Все руцями нуна делатьsmile 

А жаль, я бы купил набор человеческих компонентов для MySQL. 
Сейчас смотрю crlab.com, но грид у них похоже только для бюилдера, 
собираюсь попробовать их демки.

Цитата(Coocky @ 27.6.2006,  15:06)
Со мной рядом делфятник сидит. Да ,с БД он работает быстро. Кинул грид на форму-и все. Только мышкой щелкает, да пару функций прописывает. Зависть берет...Пока проблемы не начнутся, или расширить функциональность надо. Вот тут он и тухнет. И мышка не спасает ...
Тут уж не пощелкаешь. smile  Тут программировать надо smile

Неуч он у тебя smile
 

Автор: Дмитрий Т 29.6.2006, 05:37
Цитата(Дмитрий Т @ 27.6.2006,  20:09)
А жаль, я бы купил набор человеческих компонентов для MySQL. 

Нашёл гриды. Вот пара понравившихся:

платный: http://www.theultimatetoolbox.com/
бесплатный: http://www.codeproject.com/miscctrl/datagrid.asp

но есть и другие. 

Автор: Dart 29.6.2006, 09:37
Цитата(Дмитрий Т @  29.6.2006,  05:37 Найти цитируемый пост)
платный: http://www.theultimatetoolbox.com/

 smile Ты знаешь, СКОКО он стоит??? Да за такие деньги тебе любой програмер на любом форуме напишет любой грид, и не только smile

Цитата(Дмитрий Т @  29.6.2006,  05:37 Найти цитируемый пост)
бесплатный: http://www.codeproject.com/miscctrl/datagrid.asp

Так он поэтому и бесплатный smile
Цитата(Дмитрий Т @  24.6.2006,  13:36 Найти цитируемый пост)
Как сделать выпадающие списки содержащие данные из связанных таблиц?
Как сделать сетку (таблицу) и др. полезные элементы? 

Кроме сетки там ничего нет, так что нету счастья smile
Если хочешь, давай мыло, есть у меня кое-какие наработки, на следующей неделе вышлю (бесплатно), вот только работу одну доделаю. 

Автор: DeadSoul 29.6.2006, 21:37
Цитата(Dart @  29.6.2006,  09:37 Найти цитируемый пост)
Цитата(Дмитрий Т @  29.6.2006,  05:37 )
платный: http://www.theultimatetoolbox.com/
  Ты знаешь, СКОКО он стоит??? Да за такие деньги тебе любой програмер на любом форуме напишет любой грид, и не только 

Я тебя разочарую. Нрида подходящего тебе никогда не существует. СОВСЕМ некогда. А 500 баксов при серьезной разработке - это не еньги(2 недели работы опытного программиста) 

Автор: Nuzur 30.6.2006, 12:34
Так а в чом проблема я не понимаю?
Есть AdoDc кидаете его на свое окошко там можно строку подключения собрать как на лету так и перед запуском приложения.
Если нужен грид то у меня есть бесплатный( тоесть есть бесплатная и платные версии, я всегда бесплатной пользовался так что скока стоит не скажу), он ActiveX. Если  нуна можу подкинуть там ограничение на 1000 строк вроде...

Я сам с Дельфятинки переходил. Вначале было много неясностей но теперь мне дажу удобней и понятней все стало. Переход занял не много.

Цитата

 smile Ты знаешь, СКОКО он стоит??? Да за такие деньги тебе любой програмер на любом форуме напишет любой грид, и не только smile

Ну дык в чем проблема то? А за сколько вы хотели хорошую гридину за 10 баксов что-ли?  

Автор: takedo 30.6.2006, 12:51
Вопрос то был в том, чтобы дать человеку определиться, на чем ему остановиться. Вообще я думаю, что лучше уж на Buildere пусть сидит человек, так как если чего посложнее надо делать это и на билдере можно сбацать, только сложновато все и неявно. Я тоже на билдере начинал, если надо было что быстро сбацать- красота, а как посложнее, так это как Coocky рассказывал... Правда я тогда имел вообще очень смутные представления программирования под виндовс smile . Подитожим: нет времени разбираться - делай на билдере, есть время, нет желания - на билдере, есть желание и время - ... похоже можно попробовать на Visual C++. smile  

Автор: 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>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)