이 코드는 데이터베이스 백업을 수행하기 위해 Sqlite3.exe를 호출하지만 매개 변수의 ">"기호로 인해 작동하지 않습니다. 어떻게 고칠 지 말해 줄 수 있어요?TShellExecuteInfo lpParameters 및 ">"기호
procedure TfAdmin.DoDBBackup(ADBBackupFile: String);
var
b, p, q: String;
ps: TShellExecuteInfo;
begin
b := ExtractFilePath(ParamStr(0)) + 'PPDB.bak';
p := ExtractFilePath(ParamStr(0)) + 'sqlite3.exe';
q := ExtractFilePath(ParamStr(0)) + 'PPDB.db .dump > ' + b; //here lies the problem
ShowMessage(p + ' ' + q);
fMain.UniConnection1.Close;
try
// Execute process and wait for it to terminate
FillChar(ps, SizeOf(ps), 0);
ps.cbSize := SizeOf(ps);
ps.Wnd := Handle;
ps.lpVerb := Nil;
ps.fMask := SEE_MASK_FLAG_NO_UI or SEE_MASK_NOCLOSEPROCESS;
ps.lpFile := PChar(p);
ps.lpParameters := PChar(q);
ps.nShow := SW_SHOWNORMAL;
if not ShellExecuteEx(@ps) then
RaiseLastOSError;
if ps.hProcess <> 0 then
begin
while WaitForSingleObject(ps.hProcess, 50) = WAIT_TIMEOUT do
application.ProcessMessages;
CloseHandle(ps.hProcess);
end;
finally
fMain.UniConnection1.Open;
end;
end;
UniDAC에 (SQLite) 백업을위한 구성 요소가 포함되어 있지 않습니까? 또는 번역 된 SQLite API 헤더? 이 방법은 효과가있을 수 있지만, 음,별로 깨끗하지는 않습니다. 예를 들어 ['TUniDump'] (http://www.devart.com/unidac/docs/index.html?devart_unidac_tunidump.htm)는 어떻습니까? SQLite에서도 작동하지 않습니까? – TLama
아직 등급이 아닙니다. 그들은 다음 버전 (http://forums.devart.com/viewtopic.php?f=28&t=25838&p=88118&hilit=sqlite+backup#p88118)에서 ONLINE BACKUP API를 구현할 것이라고 말합니다. 좋은 성능을 필요로하기 때문에 TUniDump를 사용하고 싶지 않습니다. –
Delphi에서 SQLite API를 번역 한 적이 있다면, UniDAC의 SQLite 구현의 일부로 이미 가지고 있다고 생각할 수 있습니다. C 언어에 대한 기본적인 지식으로 [SQLite 온라인 백업] 코드를 작성할 수 있습니다. ] (http://www.sqlite.org/backup.html)을 방문하십시오. – TLama