将 Access DB 从 PC 转移到 Web 版本

Posted

技术标签:

【中文标题】将 Access DB 从 PC 转移到 Web 版本【英文标题】:Take Access DB from PC to Web Version 【发布时间】:2012-07-20 16:21:52 【问题描述】:

项目:将 Access DB 转变为基于 Web 的应用程序。

Access DB 描述:有两个关联的 .mdb。除了与后端 .mdb 交互的表单外,什么都没有。对于每个客户,都有一个 mdb 文件,其中包含他们公司的特定信息,我将其称为后端。客户加载访问权限,然后选择其公司特定的后端,并通过前端表单生成报告、修改后端数据等与之交互。

进度:我已经创建了大多数使用 phphtml 复制访问前端的表单。我正在复制后端访问数据库的 mysql 数据库中构建表。

问题:是否有执行此过程的工具?需要一个数据库前端和后端,并自动化成为基于 Web 的过程?是否有可以使用密码保护的 Access for Cloud 版本?

我看过像 Zoho 和其他一些产品,它们似乎没有复制表格,只有表格,这对我没有好处。

感谢任何帮助或意见。

【问题讨论】:

“采用数据库前端和后端,并自动化基于 Web 的过程” - 你的意思是实际上自动创建代码?我不会这么想的。即使有一个工具声称可以做到这一点,它无疑会创建可怕的代码。从 MS Access 到 PHP/MySQL,你跨越了很多范式边界。最好正确地重新实现它,而不是尝试将代码从一组范例直接移植到另一组范例中。 (简而言之...用 PHP 方式编写应用程序。不要用 PHP 代码以 Access 方式编写应用程序。) 我是这么想的,它是相当多的数据和编码。 “我已经创建了使用 php 和 HTML 来复制访问前端的大部分表单。” - 那么,你不是快完成了吗?当然,可能有一些业务逻辑需要在表单之外实现。但是此时您几乎只需要访问数据库,对吗?您可以坚持使用 MS Access 并从 PHP 代码中使用它。或者,一旦您将 MS Access 数据传输到 MySQL,请改用该数据库。还有什么要做的? 在一个全新的平台上重新实现某些东西通常需要大量的编码。不过,这里有一线希望。这是一个真正定义、捕获和理解应用程序的不同逻辑层和组件的机会。通过在这个新的实现中正确分离应用程序中的关注点,将来重新实现将变得更加容易。 (例如,如果正确封装了数据访问代码,则更换数据库几乎是微不足道的。) 可以使用 Sharepoint 在线运行 MS Access 2010,它是为此而设计的,但我认为这不是您想要的。 【参考方案1】:

如 Access 2010 中所述,您现在有一个 Web 发布选项。您在 Access 中创建的表单将转换为 .net XMAL (zammel) 表单。事实上,这项工作相当不错,因为它们是完整的 AJAX 表单和子表单等。甚至可以动态加载以节省带宽。

您在访问 Web 表单中编写的任何代码都会变成 JavaScrip 并在浏览器中本地运行。 (您必须使用新的编辑器编写此代码 - VBA 不会在这些表单中运行)。

您可以将网站发布到 Office 365,这非常便宜(每月 6 美元起)。这是一个运行此类访问应用程序的示例,并注意在中途我如何切换到在浏览器中 100% 运行该应用程序。

http://www.youtube.com/watch?v=AU4mH0jPntI

另外请记住,这些生成的表单基于 Web 标准,客户端不需要 ActiveX 或 Silverlight(例如,这些表单可以在 iPad 上运行)。

因为您的后端不在 accDB 文件中,而是驻留在 office 365 中的表(列表)上,所以您使用的是一个非常大且非常水平的可扩展服务器场(对用户数量没有真正的限制)。

除了将您的 Web 应用程序发布到 Office 365 之外,您还可以发布到 SharePoint 2010(但您需要现场使用企业版)。您也可以选择像 www.accesshosting.com 这样的人

虽然此设置为您提供了一种使用 Access 开发 Web 应用程序的出色 RAD 和快速方法,但请记住,现有表单或 VBA 代码没有转换实用程序。

但是,您可以将现有的 VBA 应用程序转换为基于 Web 的应用程序,并继续在每个用户的桌面上使用 VBA 应用程序以及云中的后端数据。然后随着时间的推移,您可以将一些 Web 表单添加到 SAME 应用程序中,例如平板电脑等。这就是众所周知的混合应用程序。 (Web 部件和旧版 VBA 部件都存在于同一个应用程序中)。

因此,根据您的需求,在云中获取 Access 的一种好方法实际上是使用 Access。

【讨论】:

哦哇...那个。声音。太棒了!!太感谢了!!!伙计,你可能刚刚救了我的命!【参考方案2】:

前端?否。后端?:MySql Workbench 具有专门设计用于从包括 Access 在内的多个来源复制 shcema 的数据迁移工具。我已经用过很多次了,很满意。

【讨论】:

【参考方案3】:

我在模块中使用 VBA 宏将基本表单“导出”到 html。要使用它,请在数据库中添加一个模块并在第一个 for 循环中将表单名称替换为您的表单名称。它确实是基本脚本,但您可以增加它。实际上只导出文本控件。

Public Sub main()
  On Error Resume Next
  Dim ctl As Control
  Dim ppt As Property

  For Each ctl In Form_frmDadosGerais.Controls
    i_hType = ""
    i_name = ""
    i_cSource = ""
    'Debug.Print ctl.name & "  " & ctl.Properties.Count
    i_name = ctl.name
    For Each ppt In ctl.Properties
      If ppt.name = "Caption" Or ppt.name = "Visible" Then
        'REM Debug.Print "   " & ppt.Name & ":" & ppt.Value

      ElseIf ppt.name = "Width" Or ppt.name = "Height" Or ppt.name = "Top" Or ppt.name = "Left" Then
        'REM Debug.Print "   " & ppt.Name & ":" & getPixelsFrom(ppt.Value)

      ElseIf ppt.name = "ControlType" Then
        'REM Debug.Print "   " & ppt.Name & ":" & getCotrolType(ppt.Value)
        i_hType = getCotrolType(ppt.Value)

      ElseIf ppt.name = "ControlSource" Then
        i_cSource = ppt.Value

      ElseIf ppt.name = "Name" Or ppt.name = "ControlType" Or ppt.name = "ControlSource" Or ppt.name = "Format" Or ppt.name = "DecimalPlaces" Or ppt.name = "TextFormat" Then
        'REM Debug.Print "   " & ppt.Name & ":" & ppt.Value

      Else
        'REM Debug.Print ppt.Name

      End If

    Next ppt

    If i_hType = "text" Then
      Debug.Print getControlAsMaterialHtml(i_hType, i_name, i_cSource, "Tool Tip Text")
    End If
  Next ctl
End Sub


Public Function getCotrolType(ByRef ControlType As Variant) As String
    If ControlType = 109 Then
        getCotrolType = "text"
    ElseIf ControlType = 100 Then
        getCotrolType = "label"
    Else
        getCotrolType = "unknow (" & ControlType & ")"
    End If
End Function


Public Function getPixelsFrom(ByVal v As Variant) As String
  getPixelsFrom = Round(v / 2.54) & "px"
End Function


Public Function getControlAsMaterialHtml(hType As Variant, name As Variant, controlSource As Variant, ttip As Variant) As String
  h = "<div class=""form-group form-md-line-input"">" & Chr(10)
  h = h & "   <input type=""" & hType & """ class=""form-control"" name=""" & name & """ id=""" & name & """ [(ngModel)]=""model." & controlSource & """ placeholder=""Enter your email"">" & Chr(10)
  h = h & "   <label for=""" & name & """>" & name & "</label>" & Chr(10)
  h = h & "   <span class=""help-block"">" & ttip & "</span>" & Chr(10)
  h = h & "</div>" & Chr(10) & Chr(10)

  getControlAsMaterialHtml = h
End Function

记住它需要改进,但你可以从这里开始。

对于表和数据,如果你使用的是linux,可以使用mdb-tools,使用它可以直接将表和数据导出到MySql服务器。

祝你好运!

【讨论】:

以上是关于将 Access DB 从 PC 转移到 Web 版本的主要内容,如果未能解决你的问题,请参考以下文章

如何将内置的 Cython 扩展从 PC 转移到另一台?

Flutter Web:从 PC 加载 Web 寻呼机时没有“Access-Control-Allow-Origin”问题

在特定记录处打开 Access Web DB 表单的 URL

如何将数据从 MATLAB 存储到 Access DB?

从 Web 应用程序访问 MS Access DB

从文本转移到 varchar(MAX):MS Access 有啥问题吗?