我遇到的问题是我想在两个不同的数据库之间同步一个表。 数据库1位于带有MySQL的XP服务器上 数据库2位于带Clarion的Novell服务器上。
是否可以在两个数据库之间共享一个表用户? 因此,当数据放入数据库1时,数据库会自动与数据库2同步。完成后,表:user在两个数据库中是一样的吗?
提前致谢!
答案 0 :(得分:2)
Diederik,
您的问题不是很明确,因为我们不知道您是否有权访问源代码,或者只能在数据库级别上运行。
如果您使用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到那个级别。
此致