Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2010, 08:05   #1
Liones
Пользователь
 
Аватар для Liones
 
Регистрация: 26.11.2008
Сообщений: 81
По умолчанию Delphi и командная строка

Нужно выполнить копирование базы Firebird с помощью командной строки.
Использую ShellExecute
Код:
Код:
comstr:='"'+utilitpath+'gbak.exe"-b"'+datpath+'DB.gdb""'+arhivpath+'copy.gbk"';
ShellExecute(Handle,'open','cmd',pchar(comstr),nil,sw_show);
сама команда выглядит так:
"путь к утилите" -b "путь к базе" "путь к бэкапу"
Руками из командной строки работает, а из программы не хочет. В чем ошибка?
Liones вне форума Ответить с цитированием
Старый 27.10.2010, 09:48   #2
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Я делаю примерно так (имена переменных другие):
Код:
  comstr := '"'+utilitpath+'gbak.exe"';
  parstr := '-b -user SYSDBA -pas masterkey "'+datpath+'EXAMPLE.gdb" "'+arhivpath+'EXAMPLE.gbk"'; 
//имя копии файла не меняю - по расширению видно, что это резервная копия
  ShellExecute(Application.Handle, nil, PChar(comstr), PChar(parstr),
                      PChar(ExtractFilePath(utilitpath)), SW_SHOWNORMAL);
Нормально работает.
Karabash вне форума Ответить с цитированием
Старый 27.10.2010, 11:58   #3
Liones
Пользователь
 
Аватар для Liones
 
Регистрация: 26.11.2008
Сообщений: 81
По умолчанию

наверно у меня какой-то полтергейст, так тоже не работает
Liones вне форума Ответить с цитированием
Старый 27.10.2010, 12:13   #4
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Да вот, перед предыдущим своим ответом проверил - работает.
Скорее всего, мелочь какая-нибудь. С кавычками мудрежь бывает, описка в пути и пр.. Мало ли что.
Еще. ShellExecute возвращает результат (его можно в переменную типа Integer присвоить), а в справке по этой функции в "Windows SDK" (пункт меню Help [D7]) есть список ошибок при выполнении. Их там не так много, но может ошибка подскажет что не так.
Karabash вне форума Ответить с цитированием
Старый 27.10.2010, 13:37   #5
Liones
Пользователь
 
Аватар для Liones
 
Регистрация: 26.11.2008
Сообщений: 81
По умолчанию

ошибка не подсказала. выдает число 42, нигде не сказано что это.
Liones вне форума Ответить с цитированием
Старый 27.10.2010, 14:35   #6
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Потерялся в догадках.
Могу только предложить полный код, в котором проверял все это (выдран из действующего проекта и с некоторыми переделками помещен в новый проект):
Код:
procedure TForm1.Button1Click(Sender: TObject);
var 
  Res : Integer;
  utilitpath, datpath, arhivpath, ParStr, ComStr, Err : string;
begin
  utilitpath := 'C:\Program Files\Firebird\Firebird_2_1\bin\';
  datpath := 'E:\_E_\Bases\';
  arhivpath := 'E:\_E_\Bases\Archive\';

  comstr := '"'+utilitpath+'gbak.exe"';
  parstr := '-b -user SYSDBA -pas masterkey "'+datpath+'EXAMPLE.gdb" "'+arhivpath+'EXAMPLE.gbk"';
  Res := ShellExecute(Application.Handle, nil, PChar(comstr), PChar(parstr),
                      PChar(ExtractFilePath(utilitpath)), SW_SHOWNORMAL);
  if Res > 32 then Exit;
  Err := 'Ошибка запуска!'#13#10;
  case Res of
    0: Err := Err+'Для запуска недостаточно памяти.';
    ERROR_FILE_NOT_FOUND: Err := Err+'Указанный файл не найден';
    ERROR_PATH_NOT_FOUND: Err := Err+'Указанный путь не найден';
    ERROR_BAD_FORMAT: Err := Err+'Ошибка запускаемого файла.';
    SE_ERR_ACCESSDENIED: Err := Err+'Доступ к файлу запрещен.';
  end;
  showmessage(Err);
end;
Karabash вне форума Ответить с цитированием
Старый 27.10.2010, 15:16   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
 if ShellExecute(Application.Handle, nil, PChar(comstr), PChar(parstr),
                      PChar(ExtractFilePath(utilitpath)), SW_SHOWNORMAL)>32 then RaiseLastWin32Error
RaiseLastWin32Error - вывалит текст ошибки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.10.2010, 15:47   #8
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

или попробовать ручками вбить в командную строку собранную строку в программе (опять же копи-паста работает) и убедиться в ответе
soleil@mmc вне форума Ответить с цитированием
Старый 28.10.2010, 06:59   #9
Liones
Пользователь
 
Аватар для Liones
 
Регистрация: 26.11.2008
Сообщений: 81
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
 if ShellExecute(Application.Handle, nil, PChar(comstr), PChar(parstr),
                      PChar(ExtractFilePath(utilitpath)), SW_SHOWNORMAL)>32 then RaiseLastWin32Error
RaiseLastWin32Error - вывалит текст ошибки.
вываливается " System Error Code: 126 Не найден указанный модуль" это не находит базу или gbak.exe?

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
или попробовать ручками вбить в командную строку собранную строку в программе (опять же копи-паста работает) и убедиться в ответе
попробовала, чего то делает, а файла копии так и нет
может дело в том, что путь к базе и архиву на русском написан.
попробовала кинуть в другое место, копия получилась

Последний раз редактировалось Stilet; 28.10.2010 в 07:56.
Liones вне форума Ответить с цитированием
Старый 28.10.2010, 07:53   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
это не находит базу или gbak.exe?
ИМХО и то и другое...
Цитата:
может дело в том, что путь к базе и архиву на русском написан.
Может быть, а может просто пробелы в пути мешают, тогда строку пути экранируй "" всю.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi и командная строка nusik Общие вопросы Delphi 5 26.10.2010 11:10
Командная строка Morphling Помощь студентам 9 01.02.2010 00:27
Командная строка Vladya Помощь студентам 4 09.02.2009 18:29
Командная строка Dj_smart Свободное общение 2 23.08.2008 20:12
командная строка Mails Помощь студентам 2 12.05.2008 18:29