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;

 

posted on 2011-11-06 12:18  del88  阅读(15)  评论(0编辑  收藏  举报