现在想执行一条SQL语句.
insert into table1(field1,field2,field3,field4)values(false,arr[0],brr[0],crr[0]) where field5=a and field6=b or field6=c;其中,field1为布尔型字段.field2,field3,field4,field5,field6都为文本型字段.arr,brr,crr,为字符串数组,a,b,c为已经赋值的字符串.请教怎么写这个语句.
我用的是ADOQUERY.
哪位大侠帮我吧.ADOQUERY1.SQL.ADD();期待中.

解决方案 »

  1.   

    adoquery1.sql.add('insert into table1(field1,field2,field3,field4) '+ 
    ' values (false,' + ''''+ arr[0]+''''+','+ '''' + brr[0] + '''' + ',' + ''''+ 
    ''''+ crr[0]+ ''''+ ') where field5  = ' + '''' + a +''''+ ' and field6='+
    ''''+ b + '''' + ' or field6='+ '''' + c + '''');
      

  2.   

    不明白你的语句想做什么,是要插入新纪录呢还是更新纪录?
    如果field5\6的值非空的话,那么该位置的记录非空,是不能用insert来改变记录值的,要改变只能用update;如果field5\6是空值,那么你的判断部分根本不会成立。
    在sql中使用变量,变量名称前要加:(冒号)。
    最根本的一点,你的insert语句的语法本身写错了。insert是无条件插入的,不能用where来指定插入的条件,因为insert操作的总是物理上还不存在的新纪录。
      

  3.   

    adoquery1.sql.text:='insert into table1(field1,field2,field3,field4) '+ 
    ' values (false,' + ''''+ arr[0]+''''+','+ '''' + brr[0] + '''' + ',' + ''''+ 
    ''''+ crr[0]+ ''''+ ') where field5  = ' + '''' + a +''''+ ' and field6='+
    ''''+ b + '''' + ' or field6='+ '''' + c + '''');
      

  4.   

    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('insert into table1(field1,field2,field3,field4) ');
    adoquery1.SQL.Add('values(0,'''+arr[0]+''','''+brr[0]+''','''+crr[0]+''') ')
    adoquery1.SQL.Add('where field5='''+a+''' and field6='''+b+''' or field6='''+c+'''');
    aa:= adoquery1.SQL.CommaText;
    adoquery1.ExecSQL
      

  5.   

    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('update table1 set field1=false,');
    adoquery1.SQL.Add('field2='''+arr[0]+''',');
    adoquery1.SQL.Add('field3='''+brr[0]+''',');
    adoquery1.SQL.Add('field4='''+crr[0]+'''');
    adoquery1.SQL.Add(' where field5='''+a+''' and field6='''+b+''' or field6='''+c+'''');
    aa:= adoquery1.SQL.CommaText;
    adoquery1.ExecSQL
      

  6.   

    楼上说得好,
    最根本的一点,你的insert语句的语法本身写错了。
    insert是无条件插入的,不能用where来指定插入的条件,因为insert操作的总是物理上还不存在的新纪录。
    把它改成update吧,你的用法应该是更新,不是插入~!
      

  7.   

    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('update table1 set field1=0,field2='''+arr[0]+''',field3='''+brr[0]+''',field4='''+crr[0]+''' ');
    adoquery1.SQL.Add('where field5='''+a+''' and field6='''+b+''' or field6='''+c+'''');
    aa:= adoquery1.SQL.CommaText;
    adoquery1.ExecSQL
      

  8.   

    UPDATE基本用法:
    UPDATE 表名 SET 字段名1=值1,字段名2=值2,...,字段名N=值N WHERE 判断条件;
      

  9.   

    1、检查一下语法有没有错误,如果对语法有疑问建议你察看帮助文档。这其中包括Delphi的语法和SQL的语法。
    2、检查一下程序中使用的变量和表中的字段的数据类型是否一致,如果有疑问,建议同上。
    3、如果还出错,那么把你的问题详细的贴出来。包括使用的数据库、出错部分的程序代码、代码要完成的任务以及出错信息。
      

  10.   

    你的问题应该是数据类型不一致的
    建议你可以先在查询分析器里写好能执行的SQL语句例子
    再把它放在Delphi里执行,一步一步分析,看到底是什么原因,问题出现在哪一块