程序现在是通过ADODB方式访问access的数据库,已经开发完成;
现在想将之改造为支持多种数据库(至少access和ms sql server),请问有什么便捷的方法,或者需要注意的事项?
目前发现,并不是所有原先的SQL可以在ms sql server数据库下跑,比如涉及到日期格式的SQL,另外还有一些access的自带函数在SQL中会有不同。如果各位有相关经验,请分享一下,谢谢。

解决方案 »

  1.   

    要支持多种数据库 你程序SQL部分 分成多份 根据使用的数据库直接选择相应的SQL语句
      

  2.   

    没什么特别好的办法。不过一般情况下不同数据库的SQL语法差异不大,可以把相同的合并处理,不同的分开处理,如:#if DBType = Access then#elseif DBType = SQL_Server then...
      

  3.   

    把不同的SQL语句写两份放到文件或数据库里
    调用不同数据库提取不同SQL
      

  4.   

    看具体情况,一般比较简单,只是格式或语句有点不同。
    但如果应用复杂一点如在access中用到动态交叉表之类则比较麻烦,要在sql server中用存储过程来完成。。
      

  5.   

    你说的是你写的 代码在SQL数据库能用,当你不用SQL而要用ACCESS时也能用,你是这意思吗?
    首先告诉你,VB不能事先知道他要连接什么数据库,所以你无法用if判断连接字符串(SQL和ACCESS的连接字符串是不同的 )
    我告诉你解决的方法:
    你添加一个数据库选择界面:这个界面作为启动界面,设置完成后,生成一个TXT文件,把你的设置写进去。
    然后主窗体show并加载那个TXT文件,这样工程就知道你用的是什么数据库了 
    总不能数据库选择界面每次都是启动界面把,这样也太烦了。好只要在模块里添加下面代码(判断那个TXT文件存不存在)
    在工程属性里设置启动窗口为Sub Main
    Public Sub Main()
    Dim fs As New FileSystemObject       '加一个引用“microsoft scripting runtime”
    If fs.FileExists(App.Path() + "\SetD.txt") Then
    Form1.Show
    Else
    Form2.Show
    End If
    End Sub
    这样的效果就是  第1次启动软件会出现数据库选择,以后启动就直接显示主界面(显示主界面要加载那个TXT文件)
      

  6.   

    我觉得用odbc设置数据源应该能够解决问题,由odbc负责指向具体的数据库,至于sql语言,根据odbc的设置,分别是用不同的查询语言,我有这方面成功的产品。
      

  7.   

    似乎不太可能有简单的方法实现数据库通用
    特别是非MS的数据库,SQL语法差别很大的
    而且程序要充分利用数据库自身的功能和特点,这一点数据库之间的差别也是很大的......
      

  8.   

    把数据库部分封装成dll,不同的库不同的dll,你的主程序根据库类型调用dll即可
      

  9.   

    看来就只能分别写不同版本的SQL语句了
    再放一天,明天结贴
      

  10.   

    要做到多数据库通用还是可能的:
    ·完全按照标准SQL(如 SQL-97)设计使用数据库,你提到的Access自带函数就属于非标准部分,不能用。
    ·不使用任何自定义类型、自定义函数、存储过程、触发器等,这些通常不同数据库存在明显差异。
    ·对于带条件的SQL,一律用 ADODB.Command 对象执行,这样象日期语法之类的问题通过 Parameter 对象 ADO 会自动进行处理。
    ·Oracle数据库基本上不用考虑通用,它将空字符串 '' 等同与 Null 的怪癖程序中很难对应。
      

  11.   


    谢谢分享。
    前2条没有问题,可以做到。
    第3条有点问题,主要在日期格式上,Access是用#标记的,SQL是用',不知道你提到的“通过 Parameter 对象 ADO 会自动进行处理”是怎么一个方式,能否详述?
      

  12.   

    用 ADO 而放弃 Command 对象有点买椟还珠了。参考 http://topic.csdn.net/t/20060203/00/4538652.html
    换成日期类型也一样,你只要给参数对象赋日期值,ADO执行时会自动按照当前数据库的格式拼接 SQL 语句。