Я сделал графический интерфейс, который может выполнять обычные операции с базой данных (загружать существующие данные, изменять их или добавлять новые записи). GUI сделан в C++
используя сырье WinAPI
,
Проблема в строке подключения. Он жестко запрограммирован, поэтому он заставляет пользователя хранить базу данных в той же папке, где находится GUI. Ниже приведен пример в C++
, с помощью ADO
:
static wchar_t *bstrConnect= L"Provider=Microsoft.ACE.OLEDB.12.0;\
Data Source = .\\MyDatabase.accdb";
Я хочу предоставить пользователю свободу выбора, когда речь заходит о том, где будет расположена база данных, но я не знаю, как изменить строку приложения / соединения для этого.
Я попытался найти здесь примеры, и искал в Интернете, но безуспешно. Возможно, я начинающий и самоучка как-то связан с этим.
Есть ли пример / учебник / документация, которая может показать мне правильный принцип для обработки этого типа «сценария»?
Вам, вероятно, нужно заменить .\\MyDatabase.accdb
часть вашей строки подключения с полным путем к этому файлу базы данных. В настоящее время это относительный путь.
Другими словами, вам нужно построить строку соединения во время выполнения, используя доступные функции форматирования / объединения строк.
То, что я хотел бы сделать, это как ранее предложено wallyk, сохраните его в каком-либо файле конфигурации, а затем прочитайте при необходимости.
Например, самым простым способом может быть стандартный файл .INI, который содержит следующее:
[Database]
File=".\MyDatabase.accdb"
Этот тип файлов может быть тривиально использован с функциями WinApi WritePrivateProfileString а также GetPrivateProfileString.
Конечно, это может быть файл любого типа, настолько простой или сложный, насколько вам нужно. Или вы можете даже сохранить эти биты данных в реестре, если вы действительно этого хотите. Другой вопрос — где его сохранить, и это может быть еще одно целое обсуждение (многие вопросы здесь уже решаются по этому вопросу). Короче говоря, идея заключается в том, чтобы хранить его где-то, что может быть прочитано во время выполнения вместо жесткого кодирования.
С точки зрения кода это означает, что в любом месте, когда программе требуется строка подключения, вместо чтения жестко закодированной константы вы вызовете функцию, которая ее возвратит. Функция, в свою очередь, создаст ее (инкапсулируя всю логику, чтобы получить ее из файла конфигурации), выполнив что-то вроде этого:
Ваше приложение не должно использовать жесткое кодирование. Разработайте стратегию конфигурации и реализуйте ее.
Например, найдите его в домашнем каталоге текущего пользователя, подкаталоге конфигурации пользователя, каталоге конфигурации группы пользователя, каталоге конфигурации системы и / или отобразите список конфигураций по умолчанию.