此代碼調用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
還沒有。他們表示,他們將在下一個版本中實施ONLINE BACKUP API(http://forums.devart.com/viewtopic.php?f=28&t=25838&p=88118&hilit=sqlite+backup#p88118)。我不想使用TUniDump,因爲我需要一些性能良好的東西。 –
如果您正在使用SQLite API的Delphi翻譯,我認爲您應該已經將它作爲UniDAC的SQLite實現的一部分,但您可以(具備C語言基礎知識)爲[SQLite Online Backup] ](http://www.sqlite.org/backup.html)。 – TLama