![]() |
1
3
几年前,我们遇到了类似的情况,但我们从一开始就知道,总有一天我们将不得不切换到SQL Server,因此整个代码都是从访问客户机写入到Access和SQL Server数据库的。 “一步”迁移到SQL Server的想法无疑是在数据库端管理这一点的更简单的方法,而且有许多工具可以做到这一点。但是,根据客户端应用程序与数据库的对话方式,您的代码可能无法正常工作。例如,如果您的代码包含许多SQL指令(或在运行时生成它们,例如,为选择指令添加筛选器),则您的语法可能与“SQL Server”不兼容:访问通配符、日期、函数在SQL Server上不起作用。 除此之外,正如@mjv所说,一次性切换到MS SQL的另一个缺点是,您将从原始数据库继承许多问题:错误或不适当的字段名、不适当的主键/外键策略、隐藏希望在新数据库模型中实现的一对多关系等。 我将在这里提出一些原则和规则来实现“软过渡”解决方案,这显然最适合您。只是说这不容易,但这绝对是非常有趣的,耐心地处理300张桌子!你真幸运! 我假设您有能力更新客户机代码,并且您希望始终保持相同的客户机接口。当然,在转换时可能有两个不同的接口,一个用于每个数据库,但是这对于用户来说是非常混乱的,对于他们来说是一个永久的挫折源。 据我所知,最佳解决方案主要取决于:
您将不会放弃以下强制性活动:
在传输期间(可能会持续几个月),您必须通过编程方式管理“SQL Server”模块和“Access”模块之间存在的数据库约束。回到我们的客户/发票示例,客户模块将首先切换到MS SQL。在切换发票模块之前,您必须以编程方式实现客户和发票之间的一对多关系,其中每个表都将位于不同的数据库中。这样的约束可以通过在“客户”组合框中填充来自SQL Server的客户记录集来实现。 我的建议是 按照数据库模型构建模块 ,从“一”表或“一对多”关系开始:应首先切换基本列表,如“单位”、“货币”、“国家”。在编写数据传输代码和管理客户机接口中的第二个连接方面,您将拥有第一次“动手”的经验。然后,您就可以在数据库模型中“向上”切换“产品”和“客户”表(其中单位、国家和货币是外键)到新服务器。 祝你好运! |
![]() |
2
4
您可能会发现主要问题是使用MS Access Jet引擎作为后端。我假设您对除表之外的所有对象都有一个访问FE(前端)和一个BE(仅后端表)。 您可能会发现,将数据迁移到SQL Server,并将访问FE链接到SQL Server,将有助于立即缓解问题。 然后,如果您不想继续使用MS Access作为FE,可以考虑将其分解为“模块”,并使用单独的开发平台逐个重新设计模块。 |
![]() |
3
2
我建议将后端升迁到SQL Server作为第1步。 不过,我绝不会去建议的步骤2(即,用其他东西替换访问前端)。相反,我建议投入精力来修复模式的缺陷,并调整访问应用程序以使用新的模式。 很明显,当你升迁的时候,一切都会好起来,这是不可能的——一些以前很快的东西会是狗,而一些以前很慢的东西会很快。我发现问题经常出现 不 你预计他们会在哪里。您只能通过测试找出需要修复的内容。 基本上,任何工作不好的东西都会被重新设计,或者完全移动到服务器端。 利用现有接入应用程序的投资,而不是抛开所有这些,从头开始。对于SQL Server后端来说,访问是一个很好的前端,只要您不认为它的工作方式与Jet/Ace后端的工作方式相同。 |
![]() |
4
0
…大声思考…我想这可能有效。 我发现应用程序的复杂性存在于各种VBA模块中,而不是数据库表/模式本身。因此,可能的迁移路径是 首先将数据存储迁移到SQL Server ,完全一样,如下:
所有这些都可以在一天左右的工作中进行测试;最乏味的是在SQL Server上创建表(我敢肯定,其中大部分都可以自动化)。下一个最乏味的任务是断言应用程序和以前一样有效地工作,但是它的存储在SQL上。
主要 优势 用这种方法寻求的是,在[正如操作人员预期的那样]更长的时间内,将有一个单独的存储,在此期间,旧的访问应用程序将与新的应用程序共存。 这个 缺点 这种方法是,至少在一开始,复制原始数据库的模式 逐字逐句的 也就是说,包括一些已知的怪癖和遗留下来的特质。这些模式问题(以及基础应用程序逻辑)可以及时纠正,但这当然比新应用程序启动时要容易得多。 从头算 具有自己的、独立的、存储的和独特的模式。 将存储移到SQL Server后,可以在新应用程序中重新写入访问应用程序中使用最多和/或最独立的模块,并且随着原始应用程序的重要部分被移植,通过选择测试版测试人员或实际用户可以开始切换到新应用程序。 可能,可以使用某种基于屏幕抓取的逻辑或其他系统来生成一个混合应用程序,它将为最终用户提供一个全面的应用程序,有时使用新的逻辑,有时使用原始的MS访问程序。 |
![]() |
blogger13 · 视频租赁店数据库的规范化 5 月前 |
![]() |
ì¤ì¤í · 为什么LEFT INNER JOIN被弃用? 6 月前 |
![]() |
relatively_random · 确保两个表之间一致的共同参考 6 月前 |
|
Grenish Rai · Firestore错误“用户文档不存在” 10 月前 |
![]() |
Saijo-Shi · PLpgsql中的更新触发器 10 月前 |
![]() |
Dante · Django::配置不当:池不支持持久连接 10 月前 |
![]() |
YouLocalRUser · 删除重复行,保留第一行 11 月前 |