我被DELPHI中引用引号的问题快搞死了,麻烦有高人指点下原理,我不想再问了
   ADOQueryChk.SQL.Add('Insert into EduStu'
                             +'(StuNo,StuName,StuSex,StuIDNO,Bank,BankMoney,CheckNo) '
                      + 'Values('+ vStuNo+','
                                 + vStuName+','
                                 + vStuSex+','
                                 + vStuClass+','
                                 + vStuIDNO+','
                                 + vStuBank+','
                                 + vStuMoney+','
                                 + vStuChkNo
                              + ')'
                       +''')';

解决方案 »

  1.   

    在DELPHI里面,你想要做字符里面出现',就用'''这三个来表示.建意使用Format;
    Format('insert into EduStu(StuNo, StuName, StuSex, StuIDNO,Bank, BankMoeny, CheckNo) values('''%d''','''%s''','''%s''', '''%s''', '''%d''', '''%s''', '''%d''', '''%s''') ',[你的值]);
      

  2.   

    真心滴跟楼上学习了....一种好办法...  以前没想到过用FormatTo 楼主:另外,也可以在代码里用 #39 来代替 ''' 因为 #39 就是一个单引号;还可以用QuoTedStr()函数返回一个两边带 ' 的字串
      

  3.   

    楼上的说的不对,在Pascal/Delphi的字符串中,是用连续两个(不是三个)单引号来表示一个单引号的。
    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]));
      

  4.   

    ADOQueryChk.SQL.Add('insert into table (a, b, c, d, e) values (:a, :b, :c, :d, :e)');
    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;
      

  5.   

    jadeluo(秀峰) 楼上的说的不对,在Pascal/Delphi的字符串中,....??
      

  6.   

    To dBASEIII(明年毕业了) :
    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')
      

  7.   

    两个单引号转义为一个单引号 你也可以利用QuotedStr函数替代两个单引号
    例如var
    aaa:string;
    begin
    //sql.add( 'select * from aa where a='''+aaa+'''' )
    //sql.add( 'select * from aa where a='+QuotedStr( aaa )+'' );
    end;
      

  8.   

    to 秀峰:  哦,你说的我知道的.我在三楼的意思是:  #39 + 'abc' + #39  == 两边带引号的 abc 不对吗?
      

  9.   

    showmessage( #39 + 'abc' + #39 );并没有说你不知道这种用法.
    只是我不明白我在三楼哪里说错了. 被你说 "楼上的说的不对"另外,我在三楼还说跟我的楼上学习,那只是学习他把format用到SQL字串生成上去.因为我以前没想到这样用.
      

  10.   

    ls_sql:='select * where usename='+''''+Gsuser+'''';
    keyADO.sql.clear;
    keyADO.SQL.Add(ls_sql);
    楼主,''''代表一个字符串,该字符串的值是';
    在ObjectPascal的字符串里,两个连续''表示一个';
    如果楼主关心生成的sql值是否正确,可用showmessage(ls_sql)检查.
      

  11.   

    对不起,上面应该的
    ls_sql:=ls_sql:='select * from tbdocument where usename='+''''+Gsuser+'''';
      

  12.   

    To dBASEIII(明年毕业了) :
    情况是这样的,我在写贴子时, 你的贴子还未发上来, 等我发完了,你的贴子在我之前已经发出来了。
    所以"楼上"指的是第一个回贴,并不是指你的哦。
      

  13.   

    用QuotedStr()
    就不会糊涂了
      

  14.   

    用参数
    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;
      

  15.   

    用参数
    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;