MS以MySQL为后端访问数据库

我目前的20人团队在其桌面上使用访问数据库前端。访问数据库的后端位于网络驱动器上。我被要求用MYSQL作为后端创建访问数据库前端。

我已经在计算机上安装了MySQL工作台和ODBC连接器。我已经创建了模式和表,并且已经将数据库的前端连接到在工作台中创建的MYSQL表。我的问题是

  1. 如何将其部署给团队使用。我相信我可以将访问dB的前端移动到网络驱动器,并且团队可以将其复制到他们的桌面。但是我要如何处理后端?
  2. 团队是否需要在其计算机上安装ODBC连接器?
  3. 我应该将MySQL工作台移动到网络驱动器吗?

PS:我是一名新开发人员,只是学习数据库,而且我只熟悉access数据库,请放心。

谢谢。

hhab12345678 回答:MS以MySQL为后端访问数据库

SO是关于编码的问题,所以这是OT。但是:

  1. 我的文章中介绍了一种方法:

    Deploy and update a Microsoft Access application with one click

    旧的后端,您可以存档。它将不再使用。

  2. 是。

  3. 可能不是。仅适合您,您是否需要修改 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

大家都在问