我是通过如下方式写数据库的(相信大多数人都是)
sqlstr:='insert into holland values ('''+Edit1.Text+''')';
但是现在有个问题了:如果我的Edit1的内容没有单引号肯定写进去没有问题,但如果有了就肯定写失败,因为SQL Server把字符串里的单引号当成字段分隔符了,我又不知道客户会输入什么内容,怎么预防这种情况呢?

解决方案 »

  1.   

    老弟,购2的。很巧阿,sql 和 delphi一样,单引号好转译成2个才行
      

  2.   

    sqlstr:='insert into holland values ('''+Edit1.Text+''')
    改为:sqlstr:='insert into holland values('+#39+edit1.text+#39+')';
    就可以了
      

  3.   

    guylibo() :
    你的方法我试过了,如果edit1.text里没有引号确实也可以写进去,但如果有的话还是不行:(
    ygflydream(飞飞) 
    你的方法可以用在update上,但我要insert的话adoquery还没有关联到表,怎么会取出它的fieldbyname呢?谢谢各位的支持,期待更好的答案中
    ps:我的程序中用到SQL语句的地方有几十处,Edit更多达上千,最好能有个简单的方法,谢谢了
      

  4.   

    sqlstr:=format('insert into holland values (''%s'')',[Edit1.Text]);
      

  5.   

    ygflydream(飞飞) 说的是对的比较好的方法是使用记录集进行操作,里面有多少引号都没关系,你试一下就知道了
    表关连可以用一个假条件就行。取一个空集回来
          adoQuery.Insert;
          adoQuery.Fields['field1'].AsString := edit1.text;
      

  6.   

    这样应该可以了
    sqlstr:=format('insert into holland values (''%s'')',[QuotedStr(Edit1.Text)]);
      

  7.   

    还有一个方法就是用Tadotable提前关联,插入前打开就行。一定注意 cursor 要用 clUseServer ,否则大表打开时返回时间很长。不过我更推荐前面的方法