现在想执行一条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();期待中.
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();期待中.
解决方案 »
- 请牛人帮忙翻译译一下C代码,这个定义 int32 PIPTR * pt 怎么转成delphi
- dxdbgrid多表头
- TCLIENTDATASET ADOQUREY 多次查询 结果显示 到多条曲线和 一个表格
- 已知一个记录文件,如何知道他定义记录的结构!高手请进
- 文本框的Check
- 探讨:如何设计如此模式的登录程序???
- 如何取得某一字段值不重复的记录集?
- 200分了~~主程序调用DLL文件里的FORM,为什么form关闭的时候主程序窗口莫名其妙的最小化阿?
- 高程考什么语言? C/C++ 么?还有汇编?另外还需要一些什么参考书呢?
- 如何保存收下來的email呢???!!!!!
- 能不能给点代码,像记事本的"另存为“一项,如果相同的名字,弹出是否替换的对话框,
- 请教WideCharToMultiByte怎么用,高分,在线期待
' values (false,' + ''''+ arr[0]+''''+','+ '''' + brr[0] + '''' + ',' + ''''+
''''+ crr[0]+ ''''+ ') where field5 = ' + '''' + a +''''+ ' and field6='+
''''+ b + '''' + ' or field6='+ '''' + c + '''');
如果field5\6的值非空的话,那么该位置的记录非空,是不能用insert来改变记录值的,要改变只能用update;如果field5\6是空值,那么你的判断部分根本不会成立。
在sql中使用变量,变量名称前要加:(冒号)。
最根本的一点,你的insert语句的语法本身写错了。insert是无条件插入的,不能用where来指定插入的条件,因为insert操作的总是物理上还不存在的新纪录。
' values (false,' + ''''+ arr[0]+''''+','+ '''' + brr[0] + '''' + ',' + ''''+
''''+ crr[0]+ ''''+ ') where field5 = ' + '''' + a +''''+ ' and field6='+
''''+ b + '''' + ' or field6='+ '''' + c + '''');
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
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
最根本的一点,你的insert语句的语法本身写错了。
insert是无条件插入的,不能用where来指定插入的条件,因为insert操作的总是物理上还不存在的新纪录。
把它改成update吧,你的用法应该是更新,不是插入~!
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
UPDATE 表名 SET 字段名1=值1,字段名2=值2,...,字段名N=值N WHERE 判断条件;
2、检查一下程序中使用的变量和表中的字段的数据类型是否一致,如果有疑问,建议同上。
3、如果还出错,那么把你的问题详细的贴出来。包括使用的数据库、出错部分的程序代码、代码要完成的任务以及出错信息。
建议你可以先在查询分析器里写好能执行的SQL语句例子
再把它放在Delphi里执行,一步一步分析,看到底是什么原因,问题出现在哪一块