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

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

12.01.2020, 15:15. Показов 46265. Ответов 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
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.01.2020, 16:02
Студворк — интернет-сервис помощи студентам
Что-то у тебя не установлено. Посмотри в студии Tools->Get tools and features

Добавлено через 3 минуты
Даже не знаю, как это установаить, у меня это всегда работало, начиная с Windows 95
0
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
21.01.2020, 16:07  [ТС]
Итак, создал файл test.udl в кодировке UTF-8. Может, надо было сохранять в ANSI? Когда попробовал его открыть, выбрал "Блокнот" и поставил "всегда открывать с помощью выбранной программы". В общем, поторопился.
Что конкретно посмотреть в в студии Tools->Get tools and features?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.01.2020, 16:09
Цитата Сообщение от НВВ Посмотреть сообщение
Что конкретно посмотреть в в студии Tools->Get tools and features?
Не знаю. Посмотри в гугле, как установить OLE DB Core Services, там вроде с драйвером для mssql должны поставиться
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
21.01.2020, 16:11
Цитата Сообщение от НВВ Посмотреть сообщение
Итак, создал файл test.udl в кодировке UTF-8. Может, надо было сохранять в ANSI? Когда попробовал его открыть, выбрал "Блокнот" и поставил "всегда открывать с помощью выбранной программы". В общем, поторопился.
Там не надо никаких кодировок, просто пустой файл
Вложения
Тип файла: zip New Text Document.zip (335 байт, 6 просмотров)
1
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
22.01.2020, 06:23  [ТС]
Посмотрите, пожалуйста, у себя в реестре OLE DB Core или Data Link Properties. У меня ничего нет. Не понятно что делать. Отдельно эту утилиту я не нашёл. Переустанавливать операционную систему?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
22.01.2020, 11:22
Цитата Сообщение от НВВ Посмотреть сообщение
Переустанавливать операционную систему?
Не, это точно не нужо делать. Попробуй
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
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
22.01.2020, 12:42  [ТС]
Посмотрел, драйвер OLE DB стоит на месте, но при запуске файла .udl открывается диалоговое окно с предложением выбрать приложение для запуска. Я же не могу предложить открывать этот файл с помощью библиотеки dll.
Установлен акцесс от майкрософта. Тут, на самом деле, не всё чисто. Накануне открыл БД акцесса, зачем-то зашёл в VBA (уже не помню причины) и ахнул: все меню в китайских иероглифах, хотя всё остальное (акцесс, эксэль, ворд и т.д.) на русском. Закачивал дистрибутив с торрента. Если стоит вопрос о замене офиса, тогда на какой год? Сейчас стоит офис 2016.
Последняя ссылка не открывается: "Не удалось найти IP-адрес сервера microsoft%20access%20database%20engine%2 02016%20redistributable."
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
22.01.2020, 12:45
Цитата Сообщение от НВВ Посмотреть сообщение
"Не удалось найти IP-адрес сервера microsoft%20access%20database%20engine%2 02016%20redistributable."
Ошибся
https://www.microsoft.com/en-u... x?id=54920
1
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
22.01.2020, 13:02  [ТС]
В общем, всё установил. Любезно предоставленный вами файл udl попробовал открыть, опять открылось диалоговое окно с предложением выбрать приложение (блокнот и т.д.). Выбрал OSPPREARM.EXE (та программа, которая установилась по последней ссылке). Открылось чёрное окно, повисело секунду и закрылось.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
22.01.2020, 13:19
Цитата Сообщение от НВВ Посмотреть сообщение
В общем, всё установил. Любезно предоставленный вами файл 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
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
22.01.2020, 14:10  [ТС]
Я запустил свой акцесс и не посмотрел изменения в файле 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;Persis t 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
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
22.01.2020, 14:10
Цитата Сообщение от НВВ Посмотреть сообщение
Снова создал файл udl, в нём появились записи (их уже цитировал). Попробовал открыть через командную строку, выдало сообщение: "Не удаётся найти поставщика. Убедитесь, что поставщик был установлен правильно."
Создай просто пустой test.udl, размером 0 байт
0
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
22.01.2020, 14:20  [ТС]
Пустым он не получается, в нём 2 байта.

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

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

Добавлено через 3 минуты
Попробовал сделать так: щёлкнул по файлу udl, в появившемся окне с предложением выбрать приложение прошёл путь: C:\Windows\syswow64\rundll32.exe , который вбивал в командную строку. Нажал ОК, ничего не произошло.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
22.01.2020, 14:42
Цитата Сообщение от НВВ Посмотреть сообщение
ОК, ничего не произошло.
Забей тогда на него. Это просто удобный способ работать с ConnectionString.
Хотя, конечно, могут в другом месте проблемы вылезти.
0
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
23.01.2020, 16:31  [ТС]
Забил на него, как и советовали.
Итак, сейчас код такой:
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
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
23.01.2020, 17:44
Цитата Сообщение от НВВ Посмотреть сообщение
, то появляется ошибка "C2065 pCommamd: необъявленный идентификатор"
pCommand
1
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
23.01.2020, 17:51
Цитата Сообщение от НВВ Посмотреть сообщение
Если не раскомментировать, то код выполняется до строки pRSet->Open...
Потому что ошибка возникает, exception.
Зачем тебе такой древний провайдер - Microsoft.Jet.OLEDB.4.0? У меня, например, вот что для accessa есть
Миниатюры
Работа с БД: с чего начать  
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
23.01.2020, 17:53
++++
Миниатюры
Работа с БД: с чего начать  
0
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
23.01.2020, 21:16  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Зачем тебе такой древний провайдер - Microsoft.Jet.OLEDB.4.0?
Мне для начала надо было сделать рабочие аргументы для Connection. Со временем я разберусь и укажу нового провайдера.
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
У меня, например, вот что для accessa есть
У меня нет data Link properties, поэтому не могу посмотреть поставщиков на своём компе. Но есть такой вариант:
Миниатюры
Работа с БД: с чего начать  
0
25 / 12 / 5
Регистрация: 12.01.2020
Сообщений: 419
23.01.2020, 21:18  [ТС]
Пробовал вносить в аргумент строки подключения названия поставщиков из него, но появляется сообщения, что поставщик не найден.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.01.2020, 21:18

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru