CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

如何捕获SQL语法错误?

楼主jshyjyw(狐说九道)2002-01-23 01:15:10 在 VB / 基础类 提问

有如下代码:  
   
  ------------------------------------------------------------------------  
  On   Err   GoTo   MyErr  
   
  ……  
   
  '增加体检数据到santong表  
          strSQL   =   "insert   into   santong(姓名,生日,编号,性别,年龄,体重,体重评价,身高,身高评价,头围,头围评价,"   _  
                          &   "前卤,牙齿,左视力,右视力,听力,发育商,营养评价,Hb,检查日期,下次日期,备注,"   _  
                          &   "Eduction,Food,IllProtect)   "   _  
                          &   "values('"   &   Text1.Text   &   "','"   &   DTPicker2.Value   &   "','"   &   Text2.Text   &   "',"   _  
                          &   "'"   &   Combo1.Text   &   "','"   &   Text3.Text   &   "','"   &   Text4.Text   &   "','"   &   WeightCode(WeightIndex)   &   "',"   _  
                          &   "'"   &   Text5.Text   &   "','"   &   HeightCode(HeightIndex)   &   "','"   &   Text6.Text   &   "','"   &   HeadCode(HeadIndex)   &   "',"   _  
                          &   "'"   &   Text7.Text   &   "','"   &   Text8.Text   &   "','"   &   Text9.Text   &   "','"   &   Text10.Text   &   "',"   _  
                          &   "'"   &   Text11.Text   &   "','"   &   Text12.Text   &   "','"   &   strYY1   &   "   "   &   strYY2   &   "   "   &   strYY3   &   "','"   &   Text13.Text   &   "',"   _  
                          &   "'"   &   DTPicker1.Value   &   "','"   &   NextDate   &   "','"   &   Text19.Text   &   "','"   &   stEduction   &   "',"   _  
                          &   "'"   &   stFood   &   "','"   &   stIllProtect   &   "')"  
          cnn1.Execute   (strSQL)  
           
  ……  
   
  Exit   Sub  
   
  MyErr:  
          MsgBox   Err.Description  
          Err.Clear  
   
  --------------------------------------------------------------------  
  发现,如果在text中输入非法字符,如单引号'时,Err并不能捕获错误,导致程序退出。  
  如何避免这个问题呢? 问题点数:50、回复次数:14Top

1 楼zgtt(闻涛)回复于 2002-01-23 02:51:43 得分 1

增加一个判断啊,  
  是'就不要存啊Top

2 楼wqb(啊喂)回复于 2002-01-23 08:40:25 得分 1

on   error   goto   MyErrTop

3 楼Random(随便)回复于 2002-01-23 08:53:59 得分 1

用   private   withevents   cnn1   as   adodb.connection  
  然后在cnn1_infomessage事件中编程试试Top

4 楼lily0000000(heaven)回复于 2002-01-23 09:15:00 得分 1

先把代码拷贝到SQL   Server的Query   Analyzer中试一下,正确了再在工程中执行,不正确的话,Query   Analyzer会提示错误,并可以修改后继续执行。很有用的哦。Top

5 楼songyangk(小草)回复于 2002-01-23 09:22:34 得分 1

将所有输入的单引号都转换成两个单引号就行了。Top

6 楼platinumkill(platinumkill)回复于 2002-01-23 09:28:54 得分 1

在此设一个断点cnn1.Execute   (strSQL),在DEBUG窗口中用?STRSQL将STRSQL语句取出来,然后放到使用数据库的SQL语句调试窗口上调试通过了再使用此SQL语句。或者不要让用户输入这些非法字符,在change事件里写代码屏蔽非法字符的输入。Top

7 楼chsl918(Story Book)回复于 2002-01-23 09:45:12 得分 1

我认为你程序最好不要都放到一句中这样不好处理  
  我的做法是定义两个字符串  
  dim   str1$,str2$  
  再进行分别赋值:  
  sStr1   =   "":   sStr2   =   ""  
  sStr1   =   sStr1   &   "PolishID,":   sStr2   =   sStr2   &   txtId   &   ","  
  sStr1   =   sStr1   &   "PName,":   sStr2   =   sStr2   &   "'"   &   txtName   &   "',"  
  sStr1   =   sStr1   &   "PNumber,":   sStr2   =   sStr2   &   txtNumber   &   ","  
  ...   ...    
  最后再  
  加上一句  
  sStr1   =   "Insert   into   Polish   ("   &   sStr1   &   ")   Values("   &   sStr2   &   ")"  
  这样就可以进行分别判断了!!比如下面这点:  
          If   txtDemo   <>   ""   Then  
                  sStr1   =   sStr1   &   "Demo,":   sStr2   =   sStr2   &   "'"   &   txtDemo   &   "',"  
          End   If  
  当然你的问题就可以各个处理了!我想应当是:  
  for   i=1   to   len(txtDemo)  
          if   mid(txtDemo,i,1)="'"   then    
                  你的处理程序  
                  exit   for  
          end   if  
  next   i  
   
  以上for循环程序没有经过测试,应用时请注意!!其他都是我编的程序放心用吧!!Top

8 楼dbcontrols(泰山__抛砖引玉)回复于 2002-01-23 10:15:53 得分 1

给医院做的,银子不少吧?用记录集吧,到http://www.wzjcw.net/vbgood/taishan/index.html  
  下载个代码看看。Top

9 楼sc_lys(太岁)回复于 2002-01-23 10:18:29 得分 1

解决办法:  
   
  1。输入屏蔽。如:不输入"'",可用如下语句:  
   
  在KeyPress事件中:  
  if   keyascii=asc("'")   then   keyascii=0   :   exit   sub  
  (控制其他字符雷同)  
   
  2。更好的解决办法,是用   VBA.Replace函数将一个单引号替换为两个单引号。  
   
  其具体用法请参阅帮助(很简单的)。Top

10 楼carefulman(我要进步!)回复于 2002-01-23 10:50:40 得分 1

为什么不用存储过程呢!通过返回值判断是否成功就行了!  
  如果是屏蔽非法字符可以在生成字符串时自己写个函数来替换。  
  强烈推荐replace(yourstr   ,"'","''")Top

11 楼jshyjyw(狐说九道)回复于 2002-01-23 14:34:25 得分 0

其它的数据有效性判断,如text1.text=""之类的,我都处理好了。我省略了没帖出来。  
   
  关键是,我不知道哪些字符可能造成SQL语句出错。  
  用on   err   goto捕获不了这样的错误。  
  Top

12 楼wqb(啊喂)回复于 2002-01-23 14:41:44 得分 39

on   err   goto   ?  
  on   error   goto!Top

13 楼tonton(tonton)回复于 2002-01-23 14:52:31 得分 1

很简单的问题。  
  就是不要让有错误的变量进入SQL语句。  
  在生成SQL语句之前就截住它。提示或更改,  
  然后再生成SQL语句,最后执行它。Top

14 楼jshyjyw(狐说九道)回复于 2002-01-23 15:09:20 得分 0

我气的吐血啊!  
   
  谢谢你啊,: wqb(啊喂) !  
  on   err   goto   ?  
  on   error   goto!      
   
    打错了,VB竟然没有报错!  
   
  晚上或明天晚上给分。  
  Top

相关问题

  • sql 语法错误?
  • 求解:SQL错误捕获问题
  • ADO +SQL 中的select ,有语法错误
  • SQL语法错误,该怎么写呢?
  • T-SQL中的错误捕获和错误处理(在线等)
  • 语法错误???
  • 语法错误
  • 语法错误
  • 语法错误???
  • 怎样才能捕获到SQL SERVER的错误号

关键词

  • 语句
  • 字符
  • 代码
  • 执行
  • sql
  • sstr
  • 单引号
  • txtdemo
  • 捕获
  • stryy

得分解答快速导航

  • 帖主:jshyjyw
  • zgtt
  • wqb
  • Random
  • lily0000000
  • songyangk
  • platinumkill
  • chsl918
  • dbcontrols
  • sc_lys
  • carefulman
  • wqb
  • tonton

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

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