在 2 种不同类型的数据库之间共享 1 个表

Posted

技术标签:

【中文标题】在 2 种不同类型的数据库之间共享 1 个表【英文标题】:Share 1 table between 2 different types of databases 【发布时间】:2011-01-04 09:48:44 【问题描述】:

我遇到的问题是我想在两个不同的数据库之间同步一个表。 数据库 1 位于装有 mysql 的 XP 服务器上 数据库 2 位于带有 Clarion 的 Novell 服务器上。

是否可以在两个数据库之间共享一个表用户? 因此,当数据放入数据库 1 时,数据库会自动与数据库 2 同步。完成后,表:用户在两个数据库中是否相同?

提前致谢!

【问题讨论】:

就像在编程中重复/复制数据不是一件好事,除非它用于备份,所以我建议您开始考虑为两个应用程序/应用程序部分使用来自一个数据库服务器的同一个表。 【参考方案1】:

迪德里克,

您的问题不是很清楚,因为我们不知道您是否可以访问源代码或只能在数据库级别上操作。

您没有明确提及您是否使用 Clarion 来驱动这些数据库。我假设你是,因为你用它标记了你的帖子。

另外,您没有提及您在 Novell 服务器上使用的文件格式。我假设您使用的是 TopSpeed 文件格式 - 这里有一些关于 TopSpeed 文件格式的信息:大多数程序员认为它是 Clarion for Windows 的“本机”文件格式。它不是。 Clarion for Windows 没有原生文件格式,而是采用完全驱动程序驱动的方法。 Clarion Professional Developer(一个 DOS IDE)具有原生文件格式,即 Clarion .DAT 格式。 Clarion for Windows 可以使用任何提供驱动程序或 ODBC 驱动程序的文件格式,包括旧的 .DAT。

如果您可以访问源代码,那么情况就很简单了。在 Clarion 中,您可以轻松地将不同的缓冲区指向不同的表。

                PROGRAM

            MAP
            END

szConnMySQL     CSTRING( 256 )

users_mysql     FILE, DRIVER( 'ODBC' ), OWNER( szConnMySQL ), NAME( 'users' )        
RECORD            RERCORD                                                            
id                  LONG                                                             
name                STRING( 20 )                                                     
                  END
                END

users_tps       FILE, DRIVER( 'TopSpeed' ), NAME( 'users' )        
RECORD            RECORD                                           
name                STRING( 20 )                                   
id                  LONG                                           
                  END                                                
                END


            CODE

            szConnMySQL = 'Driver=MySQL ODBC 3.51 Driver;' & |
              'Server=myServerAddress;Database=myDataBase;User=myUsername;' & |
              'Password=myPassword;Option=3;'

            OPEN( users_mysql, 42h )
            OPEN( users_tps, 42h )

            users_mysql.id = 1
            users_mysql.name = 'GUSTAVO PINSARD'
            ADD( users_mysql )
            IF NOT ERRORCODE()
              users_tps.RECORD :=: users_mysql.RECORD
              ADD( users_tps )

            ELSE
              ! Do your thing
            END

            CLOSE( users_mysql )
            CLOSE( users_tps )                

如果您无权访问源代码,则必须编写一个 MySQL 存储过程来更新远程文件。问题是远程文件,作为一个 TopSpeed 文件,可以从 MySQL 服务器直接访问,因为它,MySQL,对它一无所知。

解决此问题的一个解决方案是在 MySQL 服务器上使用 TopSpeed ODBC 驱动程序,并让 MySQL SP 访问 ODBC 驱动程序。我认为 TopSpeed ODBC 驱动程序是必不可少的,因为它允许一种策略来避免这种情况,并促进更好的集成。

有关 MySQL SP 的详细信息超出了本文的范围,也是因为我对 MySQL SP 的了解程度不高。

问候

【讨论】:

以上是关于在 2 种不同类型的数据库之间共享 1 个表的主要内容,如果未能解决你的问题,请参考以下文章

比较 2 个表中的值并生成具有差异的新表

大众运输+ RabbitMQ。在两种不同的消息类型之间共享一个队列

boost.asio - 如果在不同的异步处理程序之间共享数据库类型对象,我是不是需要使用锁?

多个Activity之间共享数据的方式

Java多线程与并发库7.多个线程之间共享数据的方式探讨

找出oracle中具有不同列号的2个表之间的区别