主题:今天问题特别多 麻烦各位了。。
heatfighter
[专家分:10] 发布于 2006-04-20 15:14:00
我在EDIT1上输入'''
然后用ADOQERY1 的SQL 语句
SELECT * FROM JINCUBIAO where id='''+edit1.text+'''
Delphi 马上抛出异常 怎么样避免这种情况 其他字符都没事 输入跟引号有关的就挂。。。
回复列表 (共8个回复)
沙发
gongchengh [专家分:390] 发布于 2006-04-20 14:40:00
把''+edit1.text'''
+quotedStr(edit1.text);
就可以用了
sql中的单引号是一定要这么写的.
板凳
gongchengh [专家分:390] 发布于 2006-04-20 14:42:00
把语句改成('SELECT * FROM JINCUBIAO where id='+QuotedStr(edit1.text))
sql中的单引号是要写成QuotedStr()的.
3 楼
aizaixiiii [专家分:2130] 发布于 2006-04-20 15:32:00
''''
4 楼
haptis [专家分:1260] 发布于 2006-04-20 16:16:00
养成良好的习惯 每次写问SQL 可以showmessage下 很容易解决语法错误
5 楼
heatfighter [专家分:10] 发布于 2006-04-20 22:18:00
各位大哥 我可能表达的不清楚
我的意思是 我的ADO 和SQL 没问题 只是EDIT1 的问题 比如我输入;‘’‘ 这几个字符 delphi 就会出错 其他的一切字符都没关系 因为我的数据表里对应的数据类型跟EDIT1的数据类型不一样啊’‘’ 这几个引号马上把程序搞死了
6 楼
guo888go2005 [专家分:150] 发布于 2006-04-21 16:46:00
把这个函数拿去用,就可以解决以上问题
function Add_semicolon(const Text: string): string;
var
i, l_Length: Integer;
Tmp_Str: string;
begin
l_Length := Length(Text);
for i := 1 to l_Length do
begin
if Copy(Text, i, 1) = '''' then
Tmp_Str := Tmp_Str + ''''''
else
Tmp_Str := Tmp_Str + Copy(Text, i, 1);
end;
Result := Tmp_Str;
end;
7 楼
progfan [专家分:2270] 发布于 2006-04-22 11:13:00
恐怕不是引号问题,而是你的SQL语句本身引用就不对,SQL语句的Where条件中不能直接引用Edit1控件里的内容,而必须改用参数引用的方式,这在以前给你的回贴中曾经用过,要记住:
with AdoQuery1 do begin
close;
sql.clear;
sql.add('select * from JINCUBIAO where id=:a');
parameters.parambyname('a').value:=edit1.text; //此句用于给上面的id赋值
open;
end;
8 楼
heatfighter [专家分:10] 发布于 2006-04-22 13:09:00
可以的啊 都是'''+edit1.text+''' 都不用你这个代码的啊 以前我看书是用你这个 后来看他们写的 都直接用'''+edit1.text+''' 书上给参数附值 错误特别多 参数经常附值 不上去
我来回复