Delphi的单引号,真是会把人搞晕的一个符号
----------------------------------------
Delphi中不使用双引号,单引号必须配对
--------------------------
①引号内无字串的情况下
ShowMessage('');->空字串
ShowMessage('' ');->这是错的
ShowMessage('''');->显示一个引号
原则->
从左开始,去掉第一个引号与最后一个引号,中间的每一对引号为一个单引号
总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法以及SQL语句中日期格式的表示(#)、('')
在Delphi中进行字符变量连接相加时单引号用('''),又引号用('''')表示
(在SQL语句中可以理解为两个算一个单引号)
首先定义变量
var
AnInt:integer=123;//为了方便在此都给它们赋初值。虽然可能在引赋初值在某些情况下不对
AnIntStr:string='456';
AStr:string='abc';
AFieldName: string='字符型编号';
ATableName: string='YourTable';
ADate:Tdatetime=now;
Adoquery1:tadoquery;
1,Delphi语句
adoquery1.sql.text:=
'select 字符型编号 from YourTable where 字符型编号='abc' and 整型编号=123';
等价于
adoquery1.sql.text:=
'select '+AFieldName+' from '+ATableName+' where '+AFieldName
+'='''+AStr+''' and 整型编号='+AnIntStr;
也等价于
adoquery1.sql.text:=
'select '+AFieldName+' from '+ATableName+' where '+AFieldName
+'='+QuotedStr(AStr)+' and 整型编号='+Inttostr(AnInt);
传到数据库服务器为:
select 字符型编号 from YourTable where 字符型编号='abc' and 整型编号=123
2,Delphi语句中日期表示
对于access数据库:
adoquery1.sql.text:=
'select 字符型编号 from YourTable where 日期型字段=#2003-12-01#';
等价于:
adoquery1.sql.text:=
'select 字符型编号 from YourTable where 日期型字段=#'+FormatDateTime('yyyy-MM-dd',now)+'#';
传到服务器为:
select 字符型编号 from YourTable where 日期型字段=#2003-12-01#
对于MSSQL数据库:
adoquery1.sql.text:=
'select 字符型编号 from YourTable where 日期型字段='2003-12-01'';
等价于:
adoquery1.sql.text:=
'select 字符型编号 from YourTable where 日期型字段='''+FormatDateTime('yyyy-MM-dd',now)+'''';
也等价于:
等价于:
adoquery1.sql.text:=
'select 字符型编号 from YourTable where 日期型字段='+QuotedStr(FormatDateTime('yyyy-MM-dd',now));
传到服务器为:
select 字符型编号 from YourTable where 日期型字段='2003-12-01'
日期字段还可以这样表示
Delphi语句
adoquery1.sql.text:=
'select 字符型编号 from YourTable where 日期型字段>='+QuotedStr(FormatDateTime('yyyy-MM-dd',now))
+' and 日期型字段<='+QuotedStr(FormatDateTime('yyyy-MM-dd',now+1));//明天
等价于
adoquery1.sql.text:=
'select 字符型编号 from YourTable where 日期型字段 between '+QuotedStr(FormatDateTime('yyyy-MM-dd',now))
+' and '+QuotedStr(FormatDateTime('yyyy-MM-dd',now+1));
如果用
adoquery1.sql.add();
形式又如何操作?请用Insert语句示例
adoquery1.sql.add(' insert into '+AtableName);
adoquery1.sql.add(' ( '+AFieldName+')');
adoquery1.sql.add(' values( '+quotedstr(AStr)+')');
Delphi中字符串动态加入SQL语句的方法总结
以下针对SQL Server数据库进行讨论。
例句:With Query1 do
begin
close;
SQL.Clear;
SQL.Add('select * from Customers where CompanyName = '''+Edit.Text+'''');
//要传入一个字符串
Open;
end;
论坛上经常有人为了一句动态加入的SQL语句中的那么多引号犯迷糊。
首先,当确定要传入SQL的变量是一个字符串而不是数值时,为了不至于被引号弄糊涂,可以有如下方法:
1。用参数来解决:
(1)当传入字串仅是当作字串常量使用时
Query1.SQL.Add('select * from Customers where CompanyName = :Company');
Query1.Parambyname('Company').asstring := Edit1.Text;
...
(2)当传入字串要当作日期字段的比较值时,可以用Convert()函数把参数强制为日期型数据,当然,要保证该字串符合转为日期型的条件。
Query1.SQL.Add('select * from Orders where OrderDate >= Convert(Datetime, :OrderDate )');
Query1.Parambyname('OrderDate').asstring := Edit1.Text;
...
2。用Delphi的引用串函数QuotedStr()来解决:
Query1.SQL.Add('select * from Customers where CompanyName = '+ QuotedStr(Edit1.Text));
...
QuotedStr()函数得到的是一个带引用的字符串,即加了引号的字串。
3。用ASCII码值 #39 代表单引号,组成字串表达式:
Query1.SQL.Text := 'select * from Customers where CompanyName = '+ #39 + Edit1.Text + #39;
...
其次,当确定要传入SQL的变量是 数值 时,可以直接把它SQL语句表达式字串相连接,而不须加引号了。例如:
Query1.SQL.Text := 'select * from Customers where CompanyName = '+ Edit1.Text;
====================================
2013-02-25 补充 四个算一个
procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage('''');//出来是一个引号所以能用QuotedStr()这个函数替代的时候就可以用这个函数了 end;
本文来自博客园,作者:del88,转载请注明原文链接:https://www.cnblogs.com/del88/archive/2011/11/06/2238008.html