2011-05-01 189 views
3

當跨越多行時,是否有一種很好的方式將字符串賦值給變量?pas文件中字符串的格式

這樣做的原因是我有一些大的SQL語句(我想在PAS),但它很煩人這樣

var 
    sql : string; 
begin 
    sql := 'SELECT * ' + 
     'FROM foo ' + 
     'WHERE `this`=0'; 

這是惱人的複製並粘貼到終端/另一個程序,因爲我有刪除「和」 +等

有沒有這樣類似...

var 
    sql : string; 
begin 
    sql := ""SELECT * 
     FROM foo 
     WHERE `this`=0""; 

所以一些方法來分配文本/字符串與新線Wi塊的方式無需連接它。

+0

簡短答案是「否」。 – 2011-05-01 01:15:34

+3

我在Delphi中使用了TOAD,它具有很酷的功能,可以從語句中刪除代碼,或者添加代碼。 – 2011-05-01 06:05:34

回答

4

由於在SQL中沒有這種方式來表達字符串,我通常使用RegEx搜索並在Delphi IDE中使用可替換的字符串來以所需的方式格式化字符串。

SELECT * 
    FROM foo 
    WHERE `this`=0 

Regular expression replace dialog

該命令替換用引號括起來的線路的任何線路,其次是+ sLineBreak +

sql := 
     ' SELECT *' + sLineBreak + 
     ' FROM foo' + sLineBreak + 
     ' WHERE `this`=0' + sLineBreak + 

我然後就收拾的最後一行:

sql := 
     ' SELECT *' + sLineBreak + 
     ' FROM foo' + sLineBreak + 
     ' WHERE `this`=0'; 

中當然,對於任何前面的或後面的文本也可以做到這一點因爲qry.SQL.Add('\0');

+0

接受此答案作爲最易於使用,但唉,沒有多字符串支持:( – Wizzard 2011-05-01 10:13:31

+2

在什麼意義上,這回答了你問的問題? – 2011-05-01 11:46:21

2

你的問題是:

可以在德爾福字符串文字跨多行?

答案是否定的。

1

您可以將SQL保留在具有像TSQLQuery這樣的TStrings屬性的組件中,但是對於較長/複雜語句的解決方案是將「示例」副本保留爲源代碼註釋,該註釋具有實際參數測試更容易,並保持兩個版本同步。

1

如果你喜歡C#做它(像我一樣)的方式,那麼不要忘記投票支持這個QC報告

http://qc.embarcadero.com/wc/qcmain.aspx?d=2012

它建議,使您的例子是這樣的:

var 
    sql : string; 
begin 
    sql := @'SELECT * 
     FROM foo 
     WHERE `this`=0'; 
+1

我不會爲此投票,這太模糊。 – Johan 2011-05-01 21:42:51

+0

嗯,那將是怎樣曖昧嗎?我錯過了什麼嗎? – 2011-05-02 18:49:07

+0

空白是ambigous這個問題不是爲sql的例子,但在其他情況下,它會吮吸,另外它打破向後兼容性(但那是另一個問題) – Johan 2011-05-02 18:58:04