我现在要为access做一个类似于sql server查询分析器一样的东西,用于执行SQL脚本,脚本是由建模类的工具生成,在access中不能执行一系列的SQL脚本,也不识别IF 语句,我用ADOcommand执行脚本会报错,从脚本文件中读取一段脚本执行一次,然后再继续读取执行,如果出错则跳过这一段,读取下一段在执行。请问这样的程序应该怎么写,望高手指教,最好有一段简单的代码。
谢谢,顶着有分,问题解决在开帖加分。

解决方案 »

  1.   

    可以把每一个SQL用一个对象去实现,出现问题的话只是那一个对象的问题。
      

  2.   

    Access不支持两个以上的SQL,比如create table a(id int),create table b(id,int)这样的他只能执行一个,后面会显示create 语法错误,所以只能一个一个的读取出来,分开执行。
      

  3.   

    Access有自带一个简单的'查询分析器'
      

  4.   

    我现在要为access做一个类似于sql server查询分析器一样的东西,用于执行SQL脚本,脚本是由建模类的工具生成,在access中不能执行一系列的SQL脚本,也不识别IF 语句,我用ADOcommand执行脚本会报错,从脚本文件中读取一段脚本执行一次,然后再继续读取执行,如果出错则跳过这一段,读取下一段在执行。请问这样的程序应该怎么写,望高手指教,最好有一段简单的代码。
    谢谢,顶着有分,问题解决在开帖加分。做这个东西的时候,sql server的查询分析器可以给你一些帮助,但不要把思路限制在里边死了。可以自定义一套规则,也可以使用sql server中的规则,但对规则一定要理解透彻。
    例如你说的if 语句,那时sql server中的东西,如果你要在你做的查询分析器中支持,你就必须对语句进行语法的解析,看看是否有单独的if出现,并且后边的内容是否复合格式。从脚本文件中读取一段脚本执行一次,然后再继续读取执行,如果出错则跳过这一段,读取下一段在执行。
    关于这一部分内容,还是要定义好规则,例如,你是按照什么将sql语句进行分段的,是空一行,还是一个分号之类。当然也可以分析语法来决定下面内容是另外一段还是新的一段,好比
    select ***** where ** in()你可以理解为一段。定义好规则后,语法分析。最后说,至于你说的执行,反而不是什么太大问题,将解析好的分段sql 分别读取,然后执行,捕获异常。作为通常使用来说,够了。