CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

sql语句找错

楼主iseeks(iseeks)2001-05-09 10:45:00 在 Delphi / VCL组件开发及应用 提问

with   datamodule1.query1   do  
  begin  
  close;  
  sql.clear;  
  sql.add('insert   into   e_basic   (name,code)');  
  sql.add('values(:ename,:ecode)');  
  sql.add('insert   into   e_basic   (folk,clan)');  
  sql.add('values(:nationality,:homeplace)');  
  Params.ParamValues['ename;ecode']:=vararrayof([name.text,code.text]);      
  params.paramValues['folk;clan']:=vararrayof([folk.text,clan.text]);  
  execsql;  
  applyupdates;  
  commitupdates;  
  运行时报错“sql命令未正确结束”,请指教。 问题点数:39、回复次数:28Top

1 楼lichp(lichp)回复于 2001-05-09 10:48:00 得分 0

我找,却找不到!Top

2 楼iseeks(iseeks)回复于 2001-05-09 10:49:00 得分 0

我用的是oracle数据库Top

3 楼BrentIvan(Ivan)回复于 2001-05-09 10:49:00 得分 2

空格掉了  
  sql.add('insert   into   e_basic   (name,code)   ');  
  sql.add('values(:ename,:ecode)   ');  
  sql.add('insert   into   e_basic   (folk,clan)   ');  
  sql.add('values(:nationality,:homeplace)');  
  而且你两个Sql这样连写似乎有问题吧  
  Top

4 楼kingsong(牛大锅)回复于 2001-05-09 10:57:00 得分 0

空格可不加,两个sql联写,不能执行。  
  为什么不insert   into   e_basic   (name,code,folk,clan)...Top

5 楼iseeks(iseeks)回复于 2001-05-09 10:58:00 得分 0

空格加了也不行的  
  因为我表中的字段比较多,写一个sql   insert的话太长了,所以想分开来写。  
  还有是不是可以不用params.paramvalues呀,直接在values后写name.text,code.text...等呢?Top

6 楼hzjf(江枫渔火)回复于 2001-05-09 11:00:00 得分 0

oracle?我不熟!  
  Top

7 楼iseeks(iseeks)回复于 2001-05-09 11:00:00 得分 0

我实际的字段有10多个呢,一起写好长呀,怎么办呀?Top

8 楼neimengguwyh(龙舌兰)回复于 2001-05-09 11:26:00 得分 2

query的SQL中只能加入一条SQL语言,你可以合成一条语言或用EXECUTE语言Top

9 楼iseeks(iseeks)回复于 2001-05-09 11:56:00 得分 0

我改成如下程序,报错“无效的用户.表.列,表.列焕感说明”  
  with   datamodule1.e_basicquery   do  
  begin  
  mysql:='insert   into   e_basic   (ename,ecode,sex,birthday,edulevel,specialty,'+  
                'nationality,homeplace,folk,clan,wedlock,address,zipcode,phone,'+  
                'edcard,archivesid,relation)   '+  
                'values   (ename.text,ecode.text,sexfield,'+  
                'formatdatetime(''yyyy-mm-dd'',birthday.Date),'+  
                'edulevel.text,specialty.text,nationality.text,homeplace.text,'+  
                'folk.text,clan.text,wedlock.text,address.Text,zipcode.text,'+  
                'phone.text,idcard.text,archivesid.text,relation.text)';  
  sql.clear;  
  sql.add(mysql);  
  execsql;  
  applyupdates;  
  commitupdates;  
  end;Top

10 楼linkie(linkie)回复于 2001-05-09 12:08:00 得分 7

为何不这样写呢?  
    var   SqlStr:   widestring;  
    SqlStr:=   '';  
    with   datamodule1.query1   do  
    begin  
        close;  
        sql.clear;      
        SqlStr:=   'insert   into   e_basic   (name,code,folk,clan)   '  
        SqlStr:=   SqlStr+'values('+Name.Text+','+Code.Text+','+folk.Text+','+Clan.Text+')';  
        Sql.Add(SqlStr);  
        ExceSql();  
    end;  
     
    Good   job.  
     
    Top

11 楼iseeks(iseeks)回复于 2001-05-09 12:12:00 得分 0

to   linkie:  
  那我后来改的程序(在你回复的上面)错在哪里呀,是不是一定要写成('+Name.Text+','+Code.Text+','+folk.Text+','+Clan.Text+')'格式呀?  
       
      Top

12 楼kingsong(牛大锅)回复于 2001-05-09 12:43:00 得分 5

当然,否则'name.txt'就是一个字符串了。  
  若你用个string   变量,注意要加空格,例如  
  str:='insert   into   table1   (name)';  
  str:=str+'   values(.....)';  
                    ^^  
  直接用sql.add,可以不加空格  
  sql.add('insert   into   table1   (name);  
  sql.add('value(...)';Top

13 楼copy_paste(木石三)回复于 2001-05-09 12:52:00 得分 3

用Format,不要用什么Params  
  const    
      SQLString='insert   into   myTable(Field1,Field2...)   Values(''%s'',%s,%d,%f)';  
   
  with   Query1   do  
  begin  
      SQL.Text   :=   Format(SQLString,   [edit1.text,edit2.text,35,235.00103]);  
      ExecSQL;  
  end;  
  多方便。呵呵Top

14 楼iseeks(iseeks)回复于 2001-05-09 13:14:00 得分 0

    那我的字段多,如何换行又成问题了,我启用了query1的cachedupdate属性,而且想用事务提交所作修改,能不能帮我解决换行问题呢,就在我后来的程序上改,好吗?要是可以运行了,我一定另加20-30分Top

15 楼iseeks(iseeks)回复于 2001-05-09 13:26:00 得分 0

我就是搞不懂怎么换行才不出错。Top

16 楼copy_paste(木石三)回复于 2001-05-09 13:29:00 得分 5

定义常量的时候进行行的换行嘛。  
  const    
      SQLString=   'insert   into   myTable(FieldName1,FieldName2.....)'   +   #13   +  
          'Value(%s,''%s'',%d,   %f'   +   #13   +  
          '%s,%s)'   +   #13   +  
          'where   ...';  
   
  加个#13就可以了。  
  SQL管它换不换行了语法对了就行了。  
  注意的地方是:%s和''%s'',你在执行的时候,用S:=SQL.Text;Inputquery('','',S);然后copy出来调试一下。Top

17 楼iseeks(iseeks)回复于 2001-05-09 13:38:00 得分 0

系统提示我“只能最多给37分”,是怎么回事呀,我有300多分呢,是不是级别低,就不能一次给很多分啊?Top

18 楼iseeks(iseeks)回复于 2001-05-09 14:00:00 得分 0

我用了format,可是提示“缺少values关键字”  
  const  
      SQLString=   'insert   into   test(edulevel,nationality,'   +   #13   +  
          'folk,clan)'+   #13   +  
          'Value(%s,%s,%s,%s)';  
  begin  
  with   Query1   do  
  begin  
      SQL.Text   :=   Format(SQLString,   [edit1.text,edit2.text,edit3.text,edit4.text]);  
      ExecSQL;  
  end;Top

19 楼iseeks(iseeks)回复于 2001-05-09 14:01:00 得分 0

还有%s和''%s''有什么区别呀,我是新手,我真的看不出,不都是用edit.text来替换嘛Top

20 楼iseeks(iseeks)回复于 2001-05-09 14:21:00 得分 0

简单一点吧,谁能把下面的程序改对?原来有”列在此处不允许“  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var   mysql:string;  
  begin  
  mysql:='';  
  mysql:=mysql+'insert   into   test   (edulevel,nationality,';  
  mysql:=mysql+'folk,clan)   values   (edit1.text,';  
  mysql:=mysql+'edit2.text,edit3.text,edit4.test)';  
  query1.sql.clear;  
  query1.sql.add(mysql);  
  query1.ExecSQL;  
  end;  
  end.Top

21 楼kingsong(牛大锅)回复于 2001-05-09 14:30:00 得分 10

procedure   TForm1.Button1Click(Sender:   TObject);  
  var   mysql:string;  
  begin  
  mysql:='insert   into   test   (edulevel,nationality,';  
  mysql:=mysql+'folk,clan)   values   ('''+edit1.text;  
  mysql:=mysql+''','''+edit2.text+''','''+edit3.text+''','''+edit4.test+''')';  
  query1.sql.clear;  
  query1.sql.add(mysql);  
  query1.ExecSQL;  
  end;  
  end.   Top

22 楼Apollo47(阿波罗)回复于 2001-05-09 14:32:00 得分 5

With   Query1.Sql   do  
      begin  
          Add('insert   into   test(字段1,字段2,...........)   Values(');   //   注意空格;  
          Add(Format('%s,%s,%s,%s',[Edit1.text,Edit2.text,Edit3.text,Edit4.text]);  
          Add(')');  
      end;  
  Query1.ExecSql;Top

23 楼kingsong(牛大锅)回复于 2001-05-09 14:34:00 得分 0

或:  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var   mysql:string;  
  begin  
      with   query1   do  
      begin  
          sql.clear;  
          sql.add('insert   into   test   (edulevel,nationality,');  
          sql.add('folk,clan)   values   (:p1,:p2,:p3,:p4)');  
          parambyname('p1').asstring:=edit1.text;  
          parambyname('p2').asstring:=edit2.text;  
          parambyname('p3').asstring:=edit3.text;  
          parambyname('p4').asstring:=edit4.text;  
          ExecSQL;  
      end;  
  end;   Top

24 楼iseeks(iseeks)回复于 2001-05-09 14:47:00 得分 0

哦,嘻嘻,总算对了,我给大家加分哦Top

25 楼linkie(linkie)回复于 2001-05-10 10:54:00 得分 0

我要提醒你的是,对于字符串型的字段,在生成Sql语句时,可能要对该字段值进行单引号(“'”)的预处理,也就是将该值中任何一个单引号都替换成“''”,即换成两个单引号,如果  
  你根据我的方式生成Sql语句的话。Top

26 楼JasonCat(void*)回复于 2001-05-10 16:27:00 得分 0

 
  如   果   你   的   字   符   串   是   单   引   号   括   起   来  
   
  字   段   值   前   后   加   双   引   号  
   
   
  或   反   之Top

27 楼efoxxx(思想偏左)回复于 2001-05-10 16:52:00 得分 0

空格掉了,并且俩句insert要分开:  
  sql.add('insert   into   e_basic   (name,code)');  
  sql.add('   values(:ename,:ecode)   ');  
  execsql;  
  sql.add('insert   into   e_basic   (folk,clan)');  
  sql.add('   values(:nationality,:homeplace)');  
  execsql;Top

28 楼fireworld(火世界)回复于 2001-05-10 21:47:00 得分 0

呵呵。。我最喜欢玩这个花样了。"''"+"''"+'asdfas'+asdfasd+"fasdfa"+'"'  
  呵呵。。。Top

相关问题

  • Sql语句找错误!!!
  • 找错:fieldbyname('a').asstring怎样写在sql语句中?
  • 求SQL语句
  • sql语句。
  • sql语句?
  • sql 语句?
  • 求SQL语句
  • ***求SQL语句***
  • sql语句??
  • sql语句

关键词

  • 字段
  • mysql
  • sql
  • basic
  • 语言
  • code
  • clan
  • folk
  • execsql
  • edulevel

得分解答快速导航

  • 帖主:iseeks
  • BrentIvan
  • neimengguwyh
  • linkie
  • kingsong
  • copy_paste
  • copy_paste
  • kingsong
  • Apollo47

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo