Delphi中如何判斷服務器路徑
那么,Delphi中如何判斷服務器路徑呢?
例如,要在客戶端執行一個創建數據庫的程序,數據庫要在服務器上創建,但路徑可以手工輸入,這時就面臨一個判斷自已現在輸入的路徑在服務器上是否存在的問題,免得在執行Create Database SQL時才報錯:找不到路徑。
具體方法如下:
exec master..xp_cmdshell 'dir E:\DATA' ,在查詢分析器中執行此段SQL,如果存在此路徑,會輸出此路徑下的所有文件與文件夾信息,還有此盤的可用字節數與已此文件夾的字節數;如果此路徑不存在,則輸出信息提示“找不到文件”。
但是,當路徑中含有空格時,如C:\Program Files,直接用exec master..xp_cmdshell 'dir C:\Program Files',系統返回結果依然提示“找不到文件”,我們需要做額外處理,才能得到正確的返回結果:
- exec master..xp_cmdshell 'dir "C:\Program Files\Microsoft SQL Server\MSSQL"'
這種寫法,在查詢分析器中直接執行是沒有問題的,也能返回正確結果,但如果放到程序中執行:
- SQL.Add('exec master..xp_cmdshell ''dir "C:\Program Files\Microsoft SQL Server\MSSQL"''),
Open時就會報錯,不能執行。
2. 我們接下來查看SQL聯機幫助,對XP_CMDSHELL的描述如下:
- xp_cmdshell {'command_string'} [, no_output]
參數
'command_string'
是在操作系統命令行解釋器上執行的命令字符串。command_string 的數據類型為 varchar(255) 或 nvarchar(4000),沒有默認值。command_string 不能包含一對以 上的雙引號。如果由 command_string 引用的文件路徑或程序名稱中有空格,則需要使用一對引號。如果使用嵌入空格不方便,可考慮使用 FAT 8.3 文件名作為解決辦法。
no_output
是可選參數,表示執行給定的 command_string,但不向客戶端返回任何輸出。
幫助文件提示我們要用一對引號將文件路徑或者程序名稱包起來,將整個路徑包不起來不會報錯,那我就將帶有空格的單步路徑包起來試試,看看行不行,執行 如下SQL:SQL.Add('exec master..xp_cmdshell ''dir C:\"Program Files"\"Microsoft SQL Server"\MSSQL''),這樣Open時果然不報錯了,看來查詢分析器的語法檢查與我們的Query自己的語法檢查還是有一定區別的,不能等同的。因此,碰到路徑中帶空格的情況,正確的寫法還是:
exec master..xp_cmdshell 'dir C:\"Program Files"\"Microsoft SQL Server"\MSSQL'
這同時說明SQL幫助文件中的綠色字體部分 command_string 不能包含一對以上的雙引號。因此,這樣的描述是不正確的,看來SQL Server幫助文件與產品也會出現“規格與程序不相符”的問題。
【編輯推薦】