SO是关于编码的问题,所以这是OT。但是:
-
我的文章中介绍了一种方法:
Deploy and update a Microsoft Access application with one click。
旧的后端,您可以存档。它将不再使用。
-
是。
-
可能不是。仅适合您,您是否需要修改
MySQL数据库。
,
首先,您仍然需要并且想要将称为前端(FE)的应用程序部分部署到每个工作站。
因此,在将数据迁移到MySQL之后,当然您将使用访问链接表管理器,现在将表链接到MySQL。实际工作原理与您现在的情况非常相似。唯一的区别是,您链接的表现在指向数据库服务器(MySQL)。从应用程序的角度来看,它应该像以前一样工作。
像所有应用程序一样,是Outlook,Excel,会计软件包吗?您仍将应用程序部分部署到每个工作站。因此,仅仅因为您现在正在使用Access开发和编写软件并不意味着您就出于某种奇怪的原因而立即停止将FE部分部署到每个工作站。实际上,您应该部署应用程序的编译版本(accDE)。
更多提示:
链接FE时,请确保使用文件dsn。原因是Access为您将链接转换为无DSN。这意味着一旦链接了表,便可以将FE随意部署到每个工作站,并且它将保留链接的表信息,而无需在每个工作站上建立DSN连接。当然,您还必须将MySQL ODBC驱动程序部署到每个工作站,因为它既不是Access的一部分,也不是您的应用程序的一部分。
因此,仅仅因为您正在开发软件,并不建议也不会让您摆脱将该应用程序部署到每个工作站的麻烦。因此,您现在在每个工作站上都具有FE的设置不会改变一位。
在大多数情况下,将数据迁移到MySQL之后,可能要设置您的关系(例如使用MySQL工作台),还需要记住其他几件事。
所有表现在都需要一个主键。您可能拥有此功能,但是具有访问后端的Access确实可以并且可以在没有PK的表上工作。但是,对于SQL Server / MySQL等,则所有表都需要该PK。
下一步:
如果您有任何true / false列,则必须为该列设置默认值。如果此类true / false列具有默认值或允许使用null,则会混淆访问-因此,请确保true / false列不能具有null,并在服务器端设置默认值(通常为0)。
添加“行版本”列。这不要与datetime列混淆。在SQL Server中,该rowversion列具有时间戳记数据类型(名称不佳,因为该列与时间有关为零-它只是对行进行“版本控制”的列。这还将消除许多错误。我不知道这种类型的列在MySQL中称为什么,但是所有表都应具有该列(在表单上查看/使用/查看该列的次数为零-但它应该是表的一部分。
您所有的表格,报告和代码都应像以前一样工作。对于VBA记录集代码,您需要:
dim rst DAO.Recordset
dim strSQL as string
strSQL = "SELECT * from tblHotels"
set rst = currentdb.OpenRecordSet(strSQL).
您过去可能有很多上述代码。
您现在需要:
Set rst = CurrentDb.OpenRecordset(strSQL,dbOpenDynaset,dbSeeChanges)
通常可以进行搜索和替换(找到每个.OpenRecordSet,然后将dbOpen和dbSee添加到找到的每一行代码中。(我将dbOpenDynaset,dbSeeChanges放入粘贴缓冲区中。然后进行系统范围的搜索。最多需要几分钟的时间才能找到所有.openRecordSets
这时,您的代码,表单和所有内容的99%都应该正常工作。
一个人得到了吗?
是在表单中还是在VBA recordSet代码中进行访问?当您创建新行或开始在表格上/中输入内容时?具有访问后端的访问将在那时生成PK。有/没有必要保存记录以获得PK值。这种需求很少见,在大型应用程序中,发生这种情况的地方大约只有2或3个。
因此,如果您有这样的代码:
dim rstRecords as RecordSet
dim lngPK as Long ' get PK value of new record
Set rstRecords = CurrentDb.OpenRecordset("tblHotels")
rstRecords.AddNew
' code here sets/ add data/ set values
rstRecords!HotelName = "Mount top Hotel"
rstRecords!City = "Jasper"
' get PK of this new record
lngPK = rstRecods!ID ' get PK
rstRecords.Update
因此,在上面的代码中,我正在获取PK值。但是对于服务器系统,只有在保存记录之后才能获取PK值。因此,您必须在上方更改为
rstRecords.Update
rstRecords.Bookmark = rstRecords.LastModified
' get PK of this new record
lngPK = rstRecods!ID ' get PK
请注意在保存后如何获取/获取PK。
上面的书签只是将记录指针重新设置为新记录。这是DAO的“怪癖”,添加新reocrds时,.Update命令将移动记录指针,因此,使用上面的.LastModified将其移回。您只需要.LastMOdifed技巧即可获得新的录音笔。对于现有的产品,您已经拥有PK-没关系。
这种类型的代码非常少见,但有时以某种形式(而不是VBA reocdset代码)出现,我们可能会使用/需要/获取/获取PK值的某种形式的代码。在表单中,您可以执行以下操作:
如果me.dirty = true,则me.dirty = false'保存录音
lngPK = me.ID'得到PK
因此,再次确保在上面的表单代码中,先保存记录,然后再按上述方法获取PK值。当然,这仅是新记录的问题。 (而且您不必使用书签技巧-仅适用于Recrodsets-无需绑定表格。
因此,在少数情况下,当需要新记录的PK值时,请记住这一点,在保存记录集(更新)后或在使用表单的情况下,在强制使用表单后,必须执行此操作记录保存。仅当您的代码需要获取/获取新的PK值时,此要求才适用于新记录,也仅适用于此。
除上述两个问题外?您现有的所有其余代码和表单都应像以前一样工作。
本文链接:https://www.f2er.com/2416399.html