Delphi-如何将字符串连接拆分为几行

Delphi-如何将字符串连接拆分为几行,delphi,delphi-2010,code-formatting,line-breaks,Delphi,Delphi 2010,Code Formatting,Line Breaks,我有一个很长的SQL文本要分配给SQL查询。我是这样做的: SQL.Text:= 'SELECT T1.COLUMN1,T2.COLUMN2,T1COLUMN3..........,'+ ' T1.COLUMNn FROM TABLE1 T1 INNER JOIN '+ ' TABLE2 T2 ON T1.ID=T2.ID'+ ' WHERE T1.COLUMN10=100' 实际SQL的长度是这个的20倍。我的问题是线路断了。当我格

我有一个很长的SQL文本要分配给SQL查询。我是这样做的:

SQL.Text:= 'SELECT T1.COLUMN1,T2.COLUMN2,T1COLUMN3..........,'+
          ' T1.COLUMNn FROM TABLE1 T1 INNER JOIN '+
          ' TABLE2 T2 ON T1.ID=T2.ID'+
          ' WHERE T1.COLUMN10=100'
实际SQL的长度是这个的20倍。我的问题是线路断了。当我格式化源代码(Ctrl+D)时,它有时会在我键入时保留行,但有时会删除换行符,我得到如下结果:

 'SELECT T1.COLUMN1,T2.COLUMN2,T1COLUMN3 ' + 'FROM TABLE1 T1 INNER JOIN '+  'TABLE2 T2 ON T1.ID=T2.ID'

这会导致“行太长(超过1023个字符)”错误。有趣的是,并非所有线路都会发生这种情况。我看不出哪些线路会受到影响,哪些线路不会受到影响。我需要在“+”符号之后或之前换行。如何执行此操作?

尝试在每行中分配值:

SQL.Text := 'SELECT T1.COLUMN1,T2.COLUMN2,T1COLUMN3..........,';
SQL.Text := SQL.Text + ' T1.COLUMNn FROM TABLE1 T1 INNER JOIN ';
SQL.Text := SQL.Text + ' TABLE2 T2 ON T1.ID=T2.ID';
SQL.Text := SQL.Text + ' WHERE T1.COLUMN10=100';

我知道它看起来很难看,但我认为它解决了您的问题。

您也可以使用添加功能

SQL.Clear;
SQL.ADD('SELECT T1.COLUMN1,T2.COLUMN2,T1COLUMN3..........,');
SQL.ADD(' T1.COLUMNn FROM TABLE1 T1 INNER JOIN');
SQL.ADD(' TABLE2 T2 ON T1.ID=T2.ID');
SQL.ADD(' WHERE T1.COLUMN10=100');

格式化程序->德尔菲->换行符->右边距的值是多少?默认值(我记得)是80。您真的需要在代码中编写长sql吗?您可以在DB中创建存储过程,也可以在查询组件(即dfm文件)中保存SQL,或者从其他文件或资源加载。@teran,右边距为60。但是,不管有什么值,并非所有线路都会出现此问题。我知道你们的SPs是最好的选择。我完全同意。如果问题不是发生在所有的线路上,可能是线路末端不是CRLF,而是CR或LF。如果代码是从另一个具有不同行尾的程序或文件中粘贴的,则这种情况很常见。这是IDE和设置断点的常见问题。您是否从某个地方粘贴了SQL代码?请将此作为错误记录在QualityCentral的格式化程序中。并使用不同的代码格式化程序。:-)这会导致运行时连接而不是编译时连接。与
SQL.Text:=SQL.Text+..
不同,您最好编写
SQL.Add(…)
既快又容易阅读。如果您不介意运行时连接,使用
SQL.Add('SELECT…')会更容易,看起来也更好