回 帖 发 新 帖 刷新版面

主题:今天问题特别多 麻烦各位了。。

我在EDIT1上输入'''  
  然后用ADOQERY1 的SQL 语句
SELECT * FROM JINCUBIAO where id='''+edit1.text+''' 

Delphi 马上抛出异常   怎么样避免这种情况  其他字符都没事  输入跟引号有关的就挂。。。

回复列表 (共8个回复)

沙发

把''+edit1.text'''
+quotedStr(edit1.text);
就可以用了 
sql中的单引号是一定要这么写的.

板凳

把语句改成('SELECT * FROM JINCUBIAO where id='+QuotedStr(edit1.text))
sql中的单引号是要写成QuotedStr()的.

3 楼

''''

4 楼

养成良好的习惯 每次写问SQL 可以showmessage下 很容易解决语法错误

5 楼


各位大哥 我可能表达的不清楚  
我的意思是 我的ADO 和SQL 没问题  只是EDIT1 的问题  比如我输入;‘’‘ 这几个字符 delphi 就会出错  其他的一切字符都没关系  因为我的数据表里对应的数据类型跟EDIT1的数据类型不一样啊’‘’ 这几个引号马上把程序搞死了

6 楼

把这个函数拿去用,就可以解决以上问题

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 楼

恐怕不是引号问题,而是你的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 楼


可以的啊  都是'''+edit1.text+'''  都不用你这个代码的啊  以前我看书是用你这个  后来看他们写的 都直接用'''+edit1.text+'''   书上给参数附值 错误特别多 参数经常附值 不上去

我来回复

您尚未登录,请登录后再回复。点此登录或注册