我被DELPHI中引用引号的问题快搞死了,麻烦有高人指点下原理,我不想再问了
ADOQueryChk.SQL.Add('Insert into EduStu'
+'(StuNo,StuName,StuSex,StuIDNO,Bank,BankMoney,CheckNo) '
+ 'Values('+ vStuNo+','
+ vStuName+','
+ vStuSex+','
+ vStuClass+','
+ vStuIDNO+','
+ vStuBank+','
+ vStuMoney+','
+ vStuChkNo
+ ')'
+''')';
ADOQueryChk.SQL.Add('Insert into EduStu'
+'(StuNo,StuName,StuSex,StuIDNO,Bank,BankMoney,CheckNo) '
+ 'Values('+ vStuNo+','
+ vStuName+','
+ vStuSex+','
+ vStuClass+','
+ vStuIDNO+','
+ vStuBank+','
+ vStuMoney+','
+ vStuChkNo
+ ')'
+''')';
解决方案 »
- DBGRIDEH控件DBGridEh1DrawColumnCell事件显示不同颜色后格线上花屏是怎么回事,怎么解决?
- TStringList的一个问题,急急
- ====讨论帖====
- 高难度的常见问题:如何访问TFRAME中的数据,200分!
- 帮小弟看看这太机器 能出多少钱 值多少钱 给个建议 up有分 谢谢! 在线等待
- 如何实现透明图片的效果??(急用,谢谢~~)
- 这个问题困绕了我几天了,寻求帮助。
- delphi制作的active form发布到网页后,客户端无法使用
- 请教几个问题~困扰我很久了。
- 关与数据库中ole字段的使用
- 关于数据存取的问题?请大家帮帮忙!
- 高手解密,很有意思(是高手就快点进来)
Format('insert into EduStu(StuNo, StuName, StuSex, StuIDNO,Bank, BankMoeny, CheckNo) values('''%d''','''%s''','''%s''', '''%s''', '''%d''', '''%s''', '''%d''', '''%s''') ',[你的值]);
ADOQueryChk.SQL.Add(
Format('insert into EduStu(StuNo, StuName, StuSex, StuIDNO,Bank, BankMoeny, CheckNo)
values(''%d'', ''%s'', ''%s'', ''%s'', ''%d'', ''%s'', ''%d'', ''%s'')',
[vStuNo, vStuName, vStuSex, vStuClass, vStuIDNO, vStuBank, vStuMoney, vStuChkNo]));
ADOQueryChk.parameters.parameterbyname('a').value:=va;
ADOQueryChk.parameters.parameterbyname('b').value:=vb;
ADOQueryChk.parameters.parameterbyname('c').value:=vc;
ADOQueryChk.parameters.parameterbyname('d').value:=vd;
ADOQueryChk.parameters.parameterbyname('e').value:=ve;
ADOQueryChk.execute;
Pascal或者Delphi中, 字符串常数在语法上是以单引号作为分界符的, 想要在字符串常数中收发室单引号, 就不能直接写一个单引号, 象这样是错误的:
const
A = 'I'm a teacher.';
^此处存在语法错误
按Pascal的语法规定, 出现在字符串常数中的单引号, 要书写成连续两个单引号, 即:
const
A = 'I''m a teacher.';
象下面的语句, 字符串常量B的内容为一个单引号:
const
B = '''';
至于这个语句:
ADOQueryChk.SQL.Add(
Format('insert into EduStu(StuNo, StuName, StuSex, StuIDNO,Bank, BankMoeny, CheckNo)
values(''%d'', ''%s'', ''%s'', ''%s'', ''%d'', ''%s'', ''%d'', ''%s'')',
[vStuNo, vStuName, vStuSex, vStuClass, vStuIDNO, vStuBank, vStuMoney, vStuChkNo]));
只关心字符串常数中的单引号的话, 简化一下:
'... values(''%d'', ''%s'', ''%s'', ''%s'', ''%d'', ''%s'', ''%d'', ''%s'')'
最后变量获得的字符串内容对应的为:
... values('%d', '%s', '%s', '%s', '%d', '%s', '%d', '%s')
例如var
aaa:string;
begin
//sql.add( 'select * from aa where a='''+aaa+'''' )
//sql.add( 'select * from aa where a='+QuotedStr( aaa )+'' );
end;
只是我不明白我在三楼哪里说错了. 被你说 "楼上的说的不对"另外,我在三楼还说跟我的楼上学习,那只是学习他把format用到SQL字串生成上去.因为我以前没想到这样用.
keyADO.sql.clear;
keyADO.SQL.Add(ls_sql);
楼主,''''代表一个字符串,该字符串的值是';
在ObjectPascal的字符串里,两个连续''表示一个';
如果楼主关心生成的sql值是否正确,可用showmessage(ls_sql)检查.
ls_sql:=ls_sql:='select * from tbdocument where usename='+''''+Gsuser+'''';
情况是这样的,我在写贴子时, 你的贴子还未发上来, 等我发完了,你的贴子在我之前已经发出来了。
所以"楼上"指的是第一个回贴,并不是指你的哦。
就不会糊涂了
ADOQueryChk.SQL.Add('insert into EduStu StuNo,StuName,StuSex,StuIDNO,Bank,BankMoney,CheckNo) values (:a,:b,:c,:d,:e,:f,:g,h)');
ADOQueryChk.Parameters.ParameterByName('a').Value:=vStuNo;
ADOQueryChk.Parameters.ParameterByName('b').Value:=vStuName;
ADOQueryChk.Parameters.ParameterByName('c').Value:=vStuSex;
ADOQueryChk.Parameters.ParameterByName('d').Value:=vStuClass;
ADOQueryChk.Parameters.ParameterByName('e').Value:=vStuIDNO;
ADOQueryChk.Parameters.ParameterByName('f').Value:=vStuBank;
ADOQueryChk.Parameters.ParameterByName('f').Value:=vStuMoney;
ADOQueryChk.Parameters.ParameterByName('f').Value:=vStuChkNo;
ADOQueryChk.ExecSQL;
ADOQueryChk.SQL.Add('insert into EduStu StuNo,StuName,StuSex,StuIDNO,Bank,BankMoney,CheckNo) values (:a,:b,:c,:d,:e,:f,:g,:h)');
ADOQueryChk.Parameters.ParameterByName('a').Value:=vStuNo;
ADOQueryChk.Parameters.ParameterByName('b').Value:=vStuName;
ADOQueryChk.Parameters.ParameterByName('c').Value:=vStuSex;
ADOQueryChk.Parameters.ParameterByName('d').Value:=vStuClass;
ADOQueryChk.Parameters.ParameterByName('e').Value:=vStuIDNO;
ADOQueryChk.Parameters.ParameterByName('f').Value:=vStuBank;
ADOQueryChk.Parameters.ParameterByName('g').Value:=vStuMoney;
ADOQueryChk.Parameters.ParameterByName('h').Value:=vStuChkNo;
ADOQueryChk.ExecSQL;