Форум программистов, компьютерный форум, киберфорум
C/C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.59/222: Рейтинг темы: голосов - 222, средняя оценка - 4.59
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419

Работа с БД: с чего начать

12.01.2020, 15:15. Показов 45893. Ответов 72
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть файл Parik.accdb (Оффис 2016г.), Винда х64, работаю в VS2019. Хочу написать приложение в С++, делающее запрос к БД и выводящее результат в консоль. С чего начать? Нужно ли установить какие-нибудь библиотеки, посмотреть, что показывает Администратор источника данных ODBC (или использовать не ODBC)? Какой шаблон проектов (пустое приложение, приложение MFC, консольное приложение) выбрать?
Являюсь начинающим программистом, возможно, не в тот раздел поместил тему.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.01.2020, 15:15
Ответы с готовыми решениями:

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

Работа с API. С чего начать?
Всем привет! Мне надо написать скрипт который работает с другим сайтом с помощью API. Так как я раньше этим на занимался, хочу...

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

72
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
19.01.2020, 21:35  [ТС]
Студворк — интернет-сервис помощи студентам
Теперь остались ошибки в файле msado15.tlh. Попробую их игнорировать.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
19.01.2020, 21:37
Цитата Сообщение от НВВ Посмотреть сообщение
Теперь остались ошибки в файле msado15.tlh. Попробую их игнорировать.
Какие?
0
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
19.01.2020, 21:39  [ТС]
Подставил "no_namespace rename("EOF","EoF")", ошибка в файле ado.tlh пропала, но выдало ошибку на ADODB:: Текст такой: C2653 ADODB: не является именем класса или пространства имен. Кстати, в коде ADODB:: не подчёркнуто.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
19.01.2020, 21:42
Цитата Сообщение от НВВ Посмотреть сообщение
Подставил "no_namespace rename("EOF","EoF")", ошибка в файле ado.tlh пропала, но выдало ошибку на ADODB:: Текст такой: C2653 ADODB: не является именем класса или пространства имен. Кстати, в коде ADODB:: не подчёркнуто.
no_namespace и rename это две разные опции. Можно их использовать по отдельности.
C++
1
#import "c:/Program Files/Common Files/System/ADO/msado15.dll" rename("EOF","EoF")
1
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
19.01.2020, 21:51  [ТС]
Подставил ещё одну строку с rename, а в аналогичной "rename" удалил, получилось:
C++
1
2
#import "c:/Program Files/Common Files/System/ADO/msado15.dll" no_namespace ("EOF","EoF")
#import "c:/Program Files/Common Files/System/ADO/msado15.dll" rename("EOF","EoF")
Ошибка с ADODB:: не пропала. Какая-то безнадёга. Может, попробовать с самого начала новый проект?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
19.01.2020, 21:54
Цитата Сообщение от НВВ Посмотреть сообщение
Ошибка с ADODB:: не пропала. Какая-то безнадёга. Может, попробовать с самого начала новый проект?
C++
1
2
//#import "c:/Program Files/Common Files/System/ADO/msado15.dll" no_namespace ("EOF","EoF")
#import "c:/Program Files/Common Files/System/ADO/msado15.dll" rename("EOF","EoF")
Добавлено через 1 минуту
Директива #import
1
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
19.01.2020, 22:09  [ТС]
Действительно, всё заработало! Если с подобной ерундой пришлось столько возиться, сколько же ещё скелетов впереди? Тема не закрыта, т.к. дальше буду присоединяться к БД, делать запрос, выводить на экран результат.
0
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
20.01.2020, 14:13  [ТС]
Сейчас код такой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#import "c:/Program Files/Common Files/System/ADO/msado15.dll" rename("EOF","EoF")
 
ADODB::_ConnectionPtr pConnection = NULL;
ADODB::_CommandPtr pCommand = NULL;
ADODB::_RecordsetPtr pRSet = NULL;
#ifdef _UNICODE
int wmain(void)
#else
int main(void)
#endif
{
    try {
        pConnection->Open(_bstr_t(L"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=d:\\Parik.mdb;"), _bstr_t(""), _bstr_t(""), 0);
        
 
        pCommand->ActiveConnection = pConnection;
        pCommand->CommandText = "Select Firm From Enterprise";
 
        pRSet->Open(pCommand->CommandText, &pConnection, adOpenStatic, adLockOptimistic, adCmdUnknown);
        //pRSet->Open(pCommand, vtMissing, adOpenStatic, adLockOptimistic, adCmdUnknown);
        //pRSet->Open(pCommand->CommandText, &pConnection, _bstr_t(""), _bstr_t(""), 0);
        //pRSet->Open(pCommand->CommandText, &pConnection, "adOpenStatic", "adLockOptimistic", 0);
        //pRSet->Open(pCommand->CommandText, &pConnection,3,3, 0);
        cout << "Список предприятий: " << pRSet->Index << endl;
        return 0;
    }
    catch (_com_error & e)
    {
        cout << "Где-то ошибка!" << endl;
        _bstr_t bstrSource(e.Source());
        _bstr_t bstrDescription(e.Description());
    }
 
    return 0;
}
В строке, где pRSet->Open, выдаётся ошибка: Ошибка C2664 "HRESULT ADODB::Recordset15::Open(const _variant_t &,const _variant_t &,ADODB::CursorTypeEnum,ADODB::LockTypeE num,long)": невозможно преобразовать аргумент 3 из "_bstr_t" в "ADODB::CursorTypeEnum"
Перепробовал разные варианты, они здесь же, в коде закомментированы.

Добавлено через 5 минут
Сделал вот так и всё заработало:
C++
1
pRSet->Open(pCommand->CommandText, &pConnection, ADODB::CursorTypeEnum(3), ADODB::LockTypeEnum(3), 0);
0
Заблокирован
20.01.2020, 14:32
Артисты.
0
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
20.01.2020, 14:38  [ТС]
Иог, что-то не так?
0
Заблокирован
20.01.2020, 14:50
НВВ, молодцы, говорю.
0
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
21.01.2020, 14:54  [ТС]
Как я и думал, рано пить шампанское. Сейчас код такой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include "DBConn.h"
#include <iostream>
using namespace std;
#import "c:/Program Files/Common Files/System/ADO/msado15.dll" rename("EOF","EoF")
 
ADODB::_ConnectionPtr pConnection = NULL;
ADODB::_CommandPtr pCommand = NULL;
ADODB::_RecordsetPtr pRSet = NULL;
 
#ifdef _UNICODE
int wmain(void)
#else
int main(void)
#endif
{
    // устанвливаем русскую локаль для консоли
    setlocale(LC_ALL, "Russian");
 
    ::CoInitialize(NULL);
            try {
                HRESULT hr = pConnection.CreateInstance((__uuidof(ADODB::Connection)));
                hr = pConnection->Open(("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=d:\\Parik.mdb;"), _bstr_t(""), _bstr_t(""), 0);
        
        
    catch (_com_error &e)
    {
        //Получаем ошибку из _com_error
        cout << "Где-то ошибка!" << "\n";
        
    }
 
    return 0;
}
Часть кода убрал для читабельности. Итак, после команды pConnection->Open выполнение программы переходит в файл msado15.thl:
C++
1
2
3
4
5
inline HRESULT Connection15::Open ( _bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options ) {
    HRESULT _hr = raw_Open(ConnectionString, UserID, Password, Options);
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return _hr;
}
Когда доходит дело до строки if (FAILED(_hr)) появляется соообщение: comsupp.cpp не найден. Понимаю, что её надо перехватить и выяснить, в чём дело. Как это сделать? Проблема, видимо, в неправильности аргументов в команде для создания подключения.

Добавлено через 4 минуты
Сделал вот так:
C++
1
cout << "Где-то ошибка!" << e.Description() << "\n";
выдало ошибку: "Не удается найти указанный поставщик. Вероятно, он установлен неправильно." Что делать?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.01.2020, 15:06
Цитата Сообщение от НВВ Посмотреть сообщение
выдало ошибку: "Не удается найти указанный поставщик. Вероятно, он установлен неправильно." Что делать?
У MsAccess вроде другая ConnectionString

Добавлено через 3 минуты
http://www.sqlstrings.com/ms-a... trings.htm
1
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
21.01.2020, 15:32  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
У MsAccess вроде другая ConnectionString
Я пробовал раньше Microsoft.Jet.OLEDB.4.0, когда была другая ошибка, а сейчас забыл это попробовать, спасибо! Теперь текст ошибки: "Нераспознаваемый формат базы данных: 'd:\Parik.mdb'" Изначально файл Parik.mdb был Parik.accdb, я его сохранил в формате .mdb. Попробую покумекать дальше.

Добавлено через 6 минут
Пробовал подсоединять Parik.accdb, та же ошибка: "Нераспознаваемый формат базы данных...".
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.01.2020, 15:39
Цитата Сообщение от НВВ Посмотреть сообщение
Пробовал подсоединять Parik.accdb, та же ошибка: "Нераспознаваемый формат базы данных...".
Создай на рабочем столе пустой текстовый файл. Потом переименуй его, чтобы было расширение .udl - например test.udl. Запусти. Тогда сможешь тестировать ConnectionString без c++

Добавлено через 2 минуты
Выбери там провайдера, заполни вкладку connection, нажми Test connection и Ок. Потом сделай Open With Notepad, там будет connectionString
0
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
21.01.2020, 15:47  [ТС]
Какой программой запустить test.udl?

Добавлено через 5 минут
Открыл этот файл через Visual studio, запустил исплнение кода, но файл остался пустым.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.01.2020, 15:48
Цитата Сообщение от НВВ Посмотреть сообщение
Какой программой запустить test.udl?
просто ткни на него, он запустится
0
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
21.01.2020, 15:49  [ТС]
Это я пробовал, у меня появилось окно с предложением, какой программой открыть файл.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.01.2020, 15:49
Либо Open With -> OLE DB Core Services
0
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
21.01.2020, 15:56  [ТС]
У меня нет при нажатии "открыть с помощью" предложения OLE DB Core Services
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.01.2020, 15:56

Работа с изображениями, с чего начать?
Подскажите, пожалуйста, необходимо реализовать сжатие изображения из формата bmp в jpeg, никогда с этим не встречался, не подскажите ли вы...

Работа в интернете, с чего начать?
всем здрасте :) я вот решил занятся заработком в интернете, но не знаю с чего лучше начать. знаю что лв можно сделать на сайте, рекламе,...

Работа со структурами, подскажите с чего начать
Здравствуйте, знатоки ,мне нужна ваша помощь :) Вообщем, мне надо сделать лабораторную по структурам : Создать массив структур...

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

Работа с файлами,чтение/запись, не знаю даже с чего начать
У администратора железнодорожных касс хранится информация о свободных местах в поездах дальнего следования на ближайшую неделю в ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru