2011-05-01 201 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