Форум программистов, компьютерный форум, киберфорум
C++: COM, OLE, ActiveX
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
11 / 7 / 5
Регистрация: 12.01.2020
Сообщений: 90
1

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

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

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

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

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

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

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

72
5830 / 3967 / 1627
Регистрация: 07.05.2019
Сообщений: 12,325
Записей в блоге: 1
21.01.2020, 16:02 41
Что-то у тебя не установлено. Посмотри в студии Tools->Get tools and features

Добавлено через 3 минуты
Даже не знаю, как это установаить, у меня это всегда работало, начиная с Windows 95
0
11 / 7 / 5
Регистрация: 12.01.2020
Сообщений: 90
21.01.2020, 16:07  [ТС] 42
Итак, создал файл test.udl в кодировке UTF-8. Может, надо было сохранять в ANSI? Когда попробовал его открыть, выбрал "Блокнот" и поставил "всегда открывать с помощью выбранной программы". В общем, поторопился.
Что конкретно посмотреть в в студии Tools->Get tools and features?
0
5830 / 3967 / 1627
Регистрация: 07.05.2019
Сообщений: 12,325
Записей в блоге: 1
21.01.2020, 16:09 43
Цитата Сообщение от НВВ Посмотреть сообщение
Что конкретно посмотреть в в студии Tools->Get tools and features?
Не знаю. Посмотри в гугле, как установить OLE DB Core Services, там вроде с драйвером для mssql должны поставиться
0
5830 / 3967 / 1627
Регистрация: 07.05.2019
Сообщений: 12,325
Записей в блоге: 1
21.01.2020, 16:11 44
Цитата Сообщение от НВВ Посмотреть сообщение
Итак, создал файл test.udl в кодировке UTF-8. Может, надо было сохранять в ANSI? Когда попробовал его открыть, выбрал "Блокнот" и поставил "всегда открывать с помощью выбранной программы". В общем, поторопился.
Там не надо никаких кодировок, просто пустой файл
1
Вложения
Тип файла: zip New Text Document.zip (335 байт, 2 просмотров)
11 / 7 / 5
Регистрация: 12.01.2020
Сообщений: 90
22.01.2020, 06:23  [ТС] 45
Посмотрите, пожалуйста, у себя в реестре OLE DB Core или Data Link Properties. У меня ничего нет. Не понятно что делать. Отдельно эту утилиту я не нашёл. Переустанавливать операционную систему?
0
5830 / 3967 / 1627
Регистрация: 07.05.2019
Сообщений: 12,325
Записей в блоге: 1
22.01.2020, 11:22 46
Цитата Сообщение от НВВ Посмотреть сообщение
Переустанавливать операционную систему?
Не, это точно не нужо делать. Попробуй
https://docs.microsoft.com/en-... rver-ver15

Добавлено через 2 минуты
https://docs.microsoft.com/ru-... rver-ver15

Добавлено через 3 минуты
А у тебя Access-то, MsOffice, установлен?

Добавлено через 1 минуту
Microsoft Access Database Engine 2016 Redistributable
0
11 / 7 / 5
Регистрация: 12.01.2020
Сообщений: 90
22.01.2020, 12:42  [ТС] 47
Посмотрел, драйвер OLE DB стоит на месте, но при запуске файла .udl открывается диалоговое окно с предложением выбрать приложение для запуска. Я же не могу предложить открывать этот файл с помощью библиотеки dll.
Установлен акцесс от майкрософта. Тут, на самом деле, не всё чисто. Накануне открыл БД акцесса, зачем-то зашёл в VBA (уже не помню причины) и ахнул: все меню в китайских иероглифах, хотя всё остальное (акцесс, эксэль, ворд и т.д.) на русском. Закачивал дистрибутив с торрента. Если стоит вопрос о замене офиса, тогда на какой год? Сейчас стоит офис 2016.
Последняя ссылка не открывается: "Не удалось найти IP-адрес сервера microsoft%20access%20database%20engine%202016%20redistributa ble."
0
5830 / 3967 / 1627
Регистрация: 07.05.2019
Сообщений: 12,325
Записей в блоге: 1
22.01.2020, 12:45 48
Цитата Сообщение от НВВ Посмотреть сообщение
"Не удалось найти IP-адрес сервера microsoft%20access%20database%20engine%202016%20redistributa ble."
Ошибся
https://www.microsoft.com/en-u... x?id=54920
1
11 / 7 / 5
Регистрация: 12.01.2020
Сообщений: 90
22.01.2020, 13:02  [ТС] 49
В общем, всё установил. Любезно предоставленный вами файл udl попробовал открыть, опять открылось диалоговое окно с предложением выбрать приложение (блокнот и т.д.). Выбрал OSPPREARM.EXE (та программа, которая установилась по последней ссылке). Открылось чёрное окно, повисело секунду и закрылось.
0
5830 / 3967 / 1627
Регистрация: 07.05.2019
Сообщений: 12,325
Записей в блоге: 1
22.01.2020, 13:19 50
Цитата Сообщение от НВВ Посмотреть сообщение
В общем, всё установил. Любезно предоставленный вами файл udl попробовал открыть, опять открылось диалоговое окно с предложением выбрать приложение (блокнот и т.д.). Выбрал OSPPREARM.EXE (та программа, которая установилась по последней ссылке). Открылось чёрное окно, повисело секунду и закрылось.
А попробуй-ка вот так

Navigate to Start>>All Programs>>Accessories>>Command Prompt
Type the following command: C:\Windows\syswow64\rundll32.exe "C:\Program Files (x86)\Common Files\System\Ole DB\oledb32.dll", OpenDSLFile C:\test.udl, where C:\test.udl is the file path to the UDL file you have created. This will open the UDL file.
Click the Provider tab, the 32 bit database providers should now show.
https://knowledge.ni.com/Knowl... 000PADkSAO

Добавлено через 5 минут
У меня отработала - с моим файлом
C:\Windows\syswow64\rundll32.exe "C:\Program Files\Common Files\system\ole db\oledb32.dll", OpenDSLFile D:\test.udl
Добавлено через 1 минуту
С пустым файлом тоже
0
11 / 7 / 5
Регистрация: 12.01.2020
Сообщений: 90
22.01.2020, 14:10  [ТС] 51
Я запустил свой акцесс и не посмотрел изменения в файле udl. Затем переименовал этот файл в test.udl, переместил в корень диска С:, попробовал воспользоваться командной строкой, чтобы запустить C:\Windows\syswow64\rundll32.exe, но ничего не вышло. Только потом глянул в файл udl и увидел: "[oledb]
; Everything after this line is an OLE DB initstring
Provider=Microsoft.ACE.OLEDB.15.0;Persist Security Info=False" Теперь последнюю строку подставил в качестве аргумента Connection, получилось:
C++
1
hr = pConnection->Open(("Provider=Microsoft.ACE.OLEDB.15.0;Persist Security Info=False; Data Source=d:\\Parik.accdb;"), _bstr_t(""), _bstr_t(""), 0);
Выдало ошибку: "Не удается найти указанный поставщик. Вероятно, он установлен неправильно." Переустанавливать офис? Но он ведь открывает базу.
Кстати, уже из-за проблем с файлом udl установил SQLServer 2017.

Добавлено через 1 минуту
Переименовать файл в mdb тоже пробовал, проблема осталась.

Добавлено через 7 минут
У меня появл
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
У меня отработала - с моим файлом
У меня выдаёт сообщение: "Не удаётся сохранить введённые свойства, поскольку файл канала передачи данных недоступен. Убедитесь, что жёсткий иск или сетевая папка всё ещё доступны.".

Добавлено через 5 минут
Невнимательно посмотрел ваш код исправил на D:\test.udl, выдало сообщение: "Не удаётся открыть файл. Убедитесь, что это правильный файл канала передачи данных." Перед последним запуском я удалил из этого файла записи.

Добавлено через 3 минуты
Снова создал файл udl, в нём появились записи (их уже цитировал). Попробовал открыть через командную строку, выдало сообщение: "Не удаётся найти поставщика. Убедитесь, что поставщик был установлен правильно."

Добавлено через 58 секунд
Переустанавливать офис?

Добавлено через 19 минут
Те записи, которые были в файле udl, были в вашем файле изначально. Так что я ошибся.
0
5830 / 3967 / 1627
Регистрация: 07.05.2019
Сообщений: 12,325
Записей в блоге: 1
22.01.2020, 14:10 52
Цитата Сообщение от НВВ Посмотреть сообщение
Снова создал файл udl, в нём появились записи (их уже цитировал). Попробовал открыть через командную строку, выдало сообщение: "Не удаётся найти поставщика. Убедитесь, что поставщик был установлен правильно."
Создай просто пустой test.udl, размером 0 байт
0
11 / 7 / 5
Регистрация: 12.01.2020
Сообщений: 90
22.01.2020, 14:20  [ТС] 53
Пустым он не получается, в нём 2 байта.

Добавлено через 32 секунды
Т.е., пустой.

Добавлено через 1 минуту
Просто щёлкая по нему не запускаетя утилита, а появляетя диалоговое окно с предложением выбрать соответствующее приложение.
Через командную строку тоже не получается, не удаётся найти поставщика. Переустанавливать офис?

Добавлено через 3 минуты
Попробовал сделать так: щёлкнул по файлу udl, в появившемся окне с предложением выбрать приложение прошёл путь: C:\Windows\syswow64\rundll32.exe , который вбивал в командную строку. Нажал ОК, ничего не произошло.
0
5830 / 3967 / 1627
Регистрация: 07.05.2019
Сообщений: 12,325
Записей в блоге: 1
22.01.2020, 14:42 54
Цитата Сообщение от НВВ Посмотреть сообщение
ОК, ничего не произошло.
Забей тогда на него. Это просто удобный способ работать с ConnectionString.
Хотя, конечно, могут в другом месте проблемы вылезти.
0
11 / 7 / 5
Регистрация: 12.01.2020
Сообщений: 90
23.01.2020, 16:31  [ТС] 55
Забил на него, как и советовали.
Итак, сейчас код такой:
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
37
38
39
40
41
42
43
44
45
#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 {
            //ConnectionString: = ADODB.PromptDataSource(0, "");
                pConnection.CreateInstance((__uuidof(ADODB::Connection)));
                pConnection->Open((L"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\Parik.mdb;"), _bstr_t(""), _bstr_t(""), 0);
                    
                    pCommand.CreateInstance(__uuidof(ADODB::Command));
                    //pCommamd->ActiveConnection = pConnection;
                    pCommand->CommandText = "Select Firm From Enterprise";
                    pCommand->CommandType = ADODB::CommandTypeEnum::adCmdText;
                    //pCommand->Execute;
        
                        pRSet->Open(pCommand->CommandText, &pConnection, ADODB::CursorTypeEnum(3), ADODB::LockTypeEnum(3), 0);
        
        cout << "Список предприятий: " << pRSet->Index << "\n";
        pRSet->Close();
        return 0;
    }
    catch (_com_error &e)
    {
        //Get info from _com_error
        cout << "Где-то ошибка!" << e.Description() << "\n";
    }
 
    return 0;
}
Если раскомментировать строку
C++
1
//pCommamd->ActiveConnection = pConnection;
, то появляется ошибка "C2065 pCommamd: необъявленный идентификатор". Если не раскомментировать, то код выполняется до строки pRSet->Open...
0
5830 / 3967 / 1627
Регистрация: 07.05.2019
Сообщений: 12,325
Записей в блоге: 1
23.01.2020, 17:44 56
Цитата Сообщение от НВВ Посмотреть сообщение
, то появляется ошибка "C2065 pCommamd: необъявленный идентификатор"
pCommand
1
5830 / 3967 / 1627
Регистрация: 07.05.2019
Сообщений: 12,325
Записей в блоге: 1
23.01.2020, 17:51 57
Цитата Сообщение от НВВ Посмотреть сообщение
Если не раскомментировать, то код выполняется до строки pRSet->Open...
Потому что ошибка возникает, exception.
Зачем тебе такой древний провайдер - Microsoft.Jet.OLEDB.4.0? У меня, например, вот что для accessa есть
0
Миниатюры
Работа с БД: с чего начать  
5830 / 3967 / 1627
Регистрация: 07.05.2019
Сообщений: 12,325
Записей в блоге: 1
23.01.2020, 17:53 58
++++
0
Миниатюры
Работа с БД: с чего начать  
11 / 7 / 5
Регистрация: 12.01.2020
Сообщений: 90
23.01.2020, 21:16  [ТС] 59
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Зачем тебе такой древний провайдер - Microsoft.Jet.OLEDB.4.0?
Мне для начала надо было сделать рабочие аргументы для Connection. Со временем я разберусь и укажу нового провайдера.
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
У меня, например, вот что для accessa есть
У меня нет data Link properties, поэтому не могу посмотреть поставщиков на своём компе. Но есть такой вариант:
0
Миниатюры
Работа с БД: с чего начать  
11 / 7 / 5
Регистрация: 12.01.2020
Сообщений: 90
23.01.2020, 21:18  [ТС] 60
Пробовал вносить в аргумент строки подключения названия поставщиков из него, но появляется сообщения, что поставщик не найден.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2020, 21:18

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.