数据库我用的是sqlserver
窗口上有两个edit控件
然后执行
insert into table(c1,c2)values('+edit1.text+','+edit2.text+');当我在text中输入数字的时候可以插入。。但一输入英文或汉字就提示上下文错误。
急!!!!!

解决方案 »

  1.   

    字符要加分割符insert into table(c1,c2)values('+''''+edit1.text+''''+','+''''+edit2.text+''''+');
      

  2.   

    在edit的keypress事件里:
    if not(Key in ['0'..'9',#13,#8,'.']) then
    报错信息
    else
    …………
      

  3.   

    注意你sqlserver中字段的属性,如果要保存字符,应该是varchar
      

  4.   

    insert into table(c1,c2)values(:a,:b)
    ADOQUERY1.Parameters.ParamByName('a').ASSTRING:=edit1.text;
    ADOQUERY1.Parameters.ParamByName('b').ASSTRING:=edit2.text;
      

  5.   

    insert into table (c1,c2) values(quotedstr(edit1.text),quotedstr(edit2.text))
      

  6.   

    sql.add('insert into table(c1,c2)values('''+edit1.text+''','''+edit2.text+''')');
      

  7.   

    楼上已经有不少人给了多种解决方法了,凑热闹算了,呵
          SQL.add('Insert Into table(c1,c2)');
          SQl.add('Values(:aa,:bb)');
          Params[0].AsString := Edit1.Text;
          Params[1].AsString := Edit2.Text;
      

  8.   

    insert into table(c1,c2)values('''+edit1.text+''','''+edit2.text+''');
      

  9.   

    SQL中也是字符串来处理的
    在SQL中这符串要加引号
    比如 在SQL这么写
      select * from table where 姓名='xxx'
    在delphi 中 由于'是字符串分割符,要表于 ' 要加转义字符 '
    所以,写成
    sql.add('SELEct * from table where 姓名='''+edit.text+''''
    主要是把引号分清了
    当editk中你用数字的时候,这一句变成了
         select * from table where 姓名=123
    sql为做强制类型转换 所以不报错
    但用字符串时
      就出现语法错误,SQL中会把他作 一个参数,但又找不到定义
    楼上大哥们的写法都能解决问题
      

  10.   

    如果字段是数字型的可以直接用字符串相加得到sql语句,但如果字段是字符型的,就要用到参数了。ADOQUERY1.SQL := 'insert into table(c1,c2)values(:A,:B)';
    ADOQUERY1.Parameters.ParamByName('A').ASSTRING:=edit1.text;
    ADOQUERY1.Parameters.ParamByName('B').ASSTRING:=edit2.text;
    ADOQUERY1.Open;
      

  11.   

    insert into table(c1,c2)values('''+edit1.text+''','''+edit2.text+''');
      

  12.   


    罗嗦insert into table(c1,c2)values('+QuotedStr(edit1.text)+','+QuotedStr(edit2.text)+')';原因
    1、没有加引号,可以通过QuotedStr()函数加入
    2、values()最后没有加右括号,SQL语句不完整
      

  13.   

    insert into table(c1,c2)values(''' + Trim(edit1.Text) + ''',''' + Trim(edit2.Text) + ''');
      

  14.   

    主要还是分隔符的问题,用insert into table(c1,c2)values('+''''+edit1.text+''''+','+''''+edit2.text+''''+');或
    insert into table(c1,c2)values(:a,:b)
    ADOQUERY1.Parameters.ParamByName('a').ASSTRING:=edit1.text;
    ADOQUERY1.Parameters.ParamByName('b').ASSTRING:=edit2.text;
    都可以
      

  15.   

    我不喜欢拼sql语句,引号太多容易出错,想改一下也不好改,我通常这样写
    const
      sqlstr = 'insert into table(c1,c2)values(''%s'',''%s'')';
    begin
      adoquery.execsql(format(sqlstr,[edit1.text,edit2.text]));
    end;这样写比较清楚,也不会写出带一大堆加号的sql语句
      

  16.   

    晕,我好像把adoquery的用法都写错了,平时都用封装过的com,忘了adoquery怎么用了……
    但是表达的意思就是那个sql了
      

  17.   

    回复人: AirLu(AirLu) ( ) 信誉:100  2005-6-29 16:49:39  得分: 0  
     
     
       
    如果字段是数字型的可以直接用字符串相加得到sql语句,但如果字段是字符型的,就要用到参数了。ADOQUERY1.SQL := 'insert into table(c1,c2)values(:A,:B)';
    ADOQUERY1.Parameters.ParamByName('A').ASSTRING:=edit1.text;
    ADOQUERY1.Parameters.ParamByName('B').ASSTRING:=edit2.text;
    ADOQUERY1.Open;
    ===============================================================================
    adoquery能写出这样的语句吗,好像后面哪个asstring出不来,我发帖子问过这个问题。
    个人认为好像只有tquery能这样写