如何在Delphi中合并AdoQuery SQL语句中的字段?

时间:2018-09-06 17:52:50

标签: delphi ado

from System.IO import *
from System import Environment, Threading 
import clr
from Spotfire.Dxp.Application.Visuals import TablePlot, HtmlTextArea
import clr
from Spotfire.Dxp.Application.Visuals import VisualContent
vc=Visuals.As[VisualContent]()  #Visuals = Script parameter for 
Table/Cross Table visualization
memStream = MemoryStream();
sWriter = StreamWriter(memStream);
#Exporting the data to Memory Stream
vc.ExportText(sWriter);  #exports data in tab separated text
sReader = StreamReader(memStream);
memStream.Seek(0, SeekOrigin.Begin);

#Column Header heading 4&5 are calculated column and will generate the value based on user selection. also i have if else condition for Heading 10
Heading10=',,,'+Heading4+',,,'+Heading5+',,,,Attribution,,,Difference'

Filenm = 'Export_csvOutput.csv';
newtemp ="\\\\share1\\folder1\\"

filename=newtemp+Filenm
print filename
f=open(filename,"w+")
counter=0
j=0
str1=''

f.write("Attribution Dashboard"+'\n')
f.write(Heading2+'\n') #Subheading1
f.write(Heading3+'\n') #Subheading2
f.write(Heading6+'\n') #subheading3
f.write("US Dollar"+'\n')#subheading5
f.write('\n'+'\n')
f.write(Heading10+'\n')
while (sReader.Peek()>=0):
line=[]
counter=counter+1 #counts the number of rows in dataset
a=sReader.ReadLine()
lines=a.split("\t")
for elem in lines:
    j=j+1 # counts the number of columns in dataset
    #print elem
    if str(elem).find(",")<>-1:
        elem='"'+elem+'"'  # escaping comma already present in string
    line.append(elem)
str1 = ','.join(str(e) for e in line)
f.write(str1+'\n')
f.close();
MemoryStream.Dispose(memStream);
sReader.Close()

如何在姓氏和父亲之间添加空格?  我想在DbGrid中看到这样的结果

LionelAndrésMessi

2 个答案:

答案 0 :(得分:0)

ADO层/后端服务器应该可以返回一个列值,该值是一个包含许多列值和字符串文字的表达式。

在尝试用Delphi源代码(罕见的一个主意,ime)构造SQL语句时,您需要以一种从编译器的角度来看在语法上正确的方式来表达您想要的内容,并生成RDMS的理想结果。为此,SQL.Add(...)中的所有单引号外都需要加倍,否则编译时会出现语法错误。

但是,即使执行了此操作,SQL仍可能无法在运行时正确执行,具体取决于后端服务器是否可以理解结果集中各列的命名。最好使用可用于RDMS的任何查询工具来创建和测试Select语句,然后尝试后从RDMS正常工作,在Delphi中对其进行设置。 pov。

顺便说一句,如果您习惯使用QuotedStr函数来构造所需的列值,则遇到的问题会更少-您显然需要语法实践,因此我在在线上进行查找帮助。

此外,如果需要通过指定Where子句来约束结果集,请确保以最小化SQL注入时发生SQL注入(https://en.wikipedia.org/wiki/SQL_injection)的风险的方式进行操作包括来自用户的输入文本。最好的方法是使用参数化的Where子句。

答案 1 :(得分:0)

如果使用内联SQL,则可以转引号或使用返回空格的函数。您将无法更新结果。另一个选择是在您的Delphi ADOQuery组件中添加一个计算字段,然后在OnCalcFields中进行合并客户端。

with AdoQuery do
   begin
     Close;
     SQL.Clear;
     SQL.Add('SELECT name+'' ''+surname+'' ''+father as initihal, address from user');
     Open;
   end;

如果将SQL Server用于数据库,则可以使用space()函数。

with AdoQuery do
   begin
     Close;
     SQL.Clear;
     SQL.Add('SELECT name+ space(1) + surname+ space(1) +father as initihal, address from user');
     Open;
   end;