Delphi-如何将字符串连接拆分为几行
我有一个很长的SQL文本要分配给SQL查询。我是这样做的: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.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…')会更容易,看起来也更好实际上,我一直使用这种方法。但在开始将UniDac用于Oracle连接之后,当我添加这样的SQL字符串时,我开始出现错误。这就是我决定直接设置SQL.Text的原因。此外,这不是SQL.Text特殊的东西,我可以在任何其他情况下使用它。我只是想知道带+符号的字符串何时被格式化为一行。如果你想设置断点,那么就将断点设置到tstring中。unit Classes.TStrings.SetTextStr。在那里,您将看到TStrings.Text:=“blablabla”也使用Add函数,同时还将BeginUpdate和EndUpdate放入其中。