Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Расположение БД, Определить, где находится БД? 
:(
    Опции темы
Vstanka
Дата 17.3.2014, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 20.8.2013
Где: Мурманск

Репутация: нет
Всего: нет



Стоит задача: определить где располагается база данных (подключение происходит по ODBC-источнику), в месте расположения создать некое файловое хранилище, куда будут копироваться(удаляться, открываться) различные по типу файлы. Не могу найти, как определить физическое расположение базы? Может, с сервера как-то можно вернуть значение?
PM MAIL   Вверх
xvr
Дата 17.3.2014, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Vstanka @  17.3.2014,  10:24 Найти цитируемый пост)
Стоит задача: определить где располагается база данных (подключение происходит по ODBC-источнику),

В общем случае это невозможно (IMHO), т.к. доступ к базе осуществляет конкретный ODBC драйвер (который прописан в настройках вашего источника), и только он знает, где физически находится хранилище (и есть ли оно вообще - база данных вполне может быть например сетевая)

PM MAIL   Вверх
Vstanka
Дата 9.4.2014, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 20.8.2013
Где: Мурманск

Репутация: нет
Всего: нет



Для sybase: получила имя машины, на которой располагается БД, и путь до нее:
Код

 SELECT PROPERTY ( 'MachineName' ), DB_PROPERTY ( 'File' ) 


Но вот как теперь с ней работать, она ведь не расшаренная? Пробовала так:
Код

int error = ERROR_SUCCESS;
if( ( HB_ERR == 0 ) && ( FCOMMAND == CMD_ADD ) )
{
    AnsiString param_path = "";
    AnsiString destination_path = path_to_db_folder;
    // скопируем файл во внутр. папку
    if ( !DirectoryExists( destination_path ) )
       if ( !ForceDirectories( destination_path ) )
       {
          error = GetLastError();
          if ( error != ERROR_SUCCESS )
            throw Exception("Не могу создать папку для хранения файлов. " +  SysErrorMessage(error));
        }
 
        param_path = StringReplace(file_name_path_from_open_dialog, "\\", "\\\\", TReplaceFlags()<<rfReplaceAll);
        destination_path = destination_path + ExtractFileName(param_path);
        destination_path = StringReplace(destination_path, "\\", "\\\\", TReplaceFlags()<<rfReplaceAll);
 
        if( !CopyFile( param_path.c_str(), destination_path.c_str(), false ))
        {
           error = GetLastError();
           if ( error != ERROR_SUCCESS )
             throw Exception("Не могу скопировать файл. " + SysErrorMessage(error));
         }
} 


Проскакивает проверку существования директории (даже ошибок никаких не выдает), а потом при попытке копирования файла: Указан недопустимый путь.
Путь указывала разными способами, ни один не проходит:
Код

path_to_db_folder = "\\\\MACHINE_NAME\\d:\\base\\tmp\\";
path_to_db_folder = "\\\\MACHINE_NAME\\base\\tmp\\";
path_to_db_folder = "\\\\192.168.1.1\\d:\\base\\tmp\\";
path_to_db_folder = "\\\\192.168.1.1\\base\\tmp\\";

 

а вот, для теста, сохранение локально в папке приложения работает
Код

path_to_db_folder = "..\\tmp\\";


PM MAIL   Вверх
xvr
Дата 9.4.2014, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Vstanka @  9.4.2014,  10:15 Найти цитируемый пост)
Код

        param_path = StringReplace(file_name_path_from_open_dialog, "\\", "\\\\", TReplaceFlags()<<rfReplaceAll);
        destination_path = StringReplace(destination_path, "\\", "\\\\", TReplaceFlags()<<rfReplaceAll);

Ой, а это зачем? 
Кроме того, явно забыли фигурные скобки после if ( !DirectoryExists( destination_path ) )
Цитата(Vstanka @  9.4.2014,  10:15 Найти цитируемый пост)
Но вот как теперь с ней работать, она ведь не расшаренная? 

Никак. 
Цитата(Vstanka @  9.4.2014,  10:15 Найти цитируемый пост)
Путь указывала разными способами, ни один не проходит:

И не подойдет. Через UNC путь можно скопировать только файл в расшаренной папке, увы. Ищите методы доступа к удаленной машине.

Добавлено @ 10:29
PS. Кстати, есть стандартные шары для всех дисков. Для вашего случая -
Код

path_to_db_folder = "\\\\MACHINE_NAME\\D$\\base\\tmp\\";
но может не хватить прав доступа. И записать туда оно точно не даст, эти шары RO



Это сообщение отредактировал(а) xvr - 9.4.2014, 10:30
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0750 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.