V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jstony
V2EX  ›  数据库

有没有可能转发 access 的 mdb 文件访问请求?

  •  
  •   jstony · 2023-05-25 16:30:44 +08:00 · 897 次点击
    这是一个创建于 549 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一般来说访问 mdb 内容都是用 microsoft jet oledb ,我有个上古的软件,源码肯定没有,有没有可能将微软 jet 引擎对 mdb 文件的访问转发,这样我就可以将数据库放在网络上,甚至可以将 mdb 的库用 mysql 或者 mssql 来代替。

    9 条回复    2023-05-26 16:23:02 +08:00
    ysc3839
        1
    ysc3839  
       2023-05-25 16:57:03 +08:00 via Android
    oledb 好像是可以实现第三方 provider 的吧?好像只需要改一下连接字符串就能换掉,其他应该是一致的,用这个方案的话要实现的 hook 点就只有传连接字符串的那个函数。
    还有方案就是把 oledb 所有函数都 hook 一遍,但这么做工作量太大,稳定性也难说。
    如果只是想把文件放在远程的话,直接用 smb 等网络文件系统即可。
    jstony
        2
    jstony  
    OP
       2023-05-25 17:17:09 +08:00
    @ysc3839 现在 mdb 文件已经通过 smb 共享放在 nas 上了,就是还想看看有没有更好的办法,你提到的是一个思路,如果可以自己编译一个第三方 provider ,然后注册到系统里,冒充微软的 jet 引擎可能是一个可行的方法。
    ysc3839
        3
    ysc3839  
       2023-05-25 17:19:38 +08:00 via Android
    @jstony 没有对接其他数据库需求的话,smb 基本上是最稳妥的方法了
    yinmin
        4
    yinmin  
       2023-05-25 18:59:07 +08:00 via iPhone
    mdb 的 sql 是有自己的格式,不兼容其他 sql
    ttvast
        5
    ttvast  
       2023-05-26 04:23:21 +08:00 via iPad   ❤️ 2
    access 可以将一个 sql server 的表链接成自己的表
    jstony
        6
    jstony  
    OP
       2023-05-26 09:24:51 +08:00
    @ttvast 感谢,这个是我从来没想到过的一个思路,我去研究一下,可行的话可能是最简单的办法。
    jstony
        7
    jstony  
    OP
       2023-05-26 09:25:53 +08:00
    @yinmin 我不需要了解 mdb 的具体实现,我只需要将标准的 oledb 的请求转发就行了。
    yinmin
        8
    yinmin  
       2023-05-26 10:02:54 +08:00
    #7 mdb 使用的 sql 语法是很怪异的,例如:select 语句就与其它的数据库很不同。通过 OLEDB 转发后还需要一个转换层,将 ACCESS 的 SQL 语法转换成其它数据库的 SQL 语法。你可以找找有没有这种软件。
    jstony
        9
    jstony  
    OP
       2023-05-26 16:23:02 +08:00
    @ttvast 感谢你的方案,已经测试成功,现在把数据同步过来就可以正常用了。单机软件秒变网络版😀
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   926 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:27 · PVG 06:27 · LAX 14:27 · JFK 17:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.