【问题标题】:MS Access without VBA?没有 VBA 的 MS Access?
【发布时间】:2011-08-30 23:43:47
【问题描述】:

一个简单的问题:MS Access 是否可以使用 C# 而不是 VBA?我可以使用 Windows 窗体和(或)WPF 扩展 Access 应用程序吗?这样的场景有意义吗?

【问题讨论】:

    标签: c# wpf winforms ms-access vba


    【解决方案1】:

    是的,您可以用 C# 编写一个 GUI 应用程序,然后让 MSAccess 按钮(或菜单)单击外壳到 C# 应用程序,在命令行上传递上下文信息(例如,数据库名称、要打开的表单、记录 ID、等)。

    或者,您可以向您的应用程序公开一个 COM 接口,这样您就可以使用 CreateObject 创建表单或访问其他功能。

    您会发现很难返回其他方式,从 C# 应用程序访问您的 MSAccess 表单和报告,但可以使用 COM 或 Windows 套接字完成。

    您当然可以只在后端使用 MSAccess 数据库编写 C# GUI 应用程序,而不使用任何 MSAccess 表单(注意如果可以并且确实决定不使用 MSAccess GUI 的任何方面,那么我强烈建议完全使用不同的数据库,例如 SQL Lite 或 SQL Express)。

    希望这会有所帮助。

    更新回答为什么会有人这样做?有什么意义?

    MsAccess 数据库规模惊人。我已经看到编写良好的 Access 应用程序遭受 4 或 5 个用户的损坏和数据完整性问题。授予网络速度和稳定性会产生影响,但真正的问题是访问(SqlExpress 应用程序在较差的网络下扩展得更好)。见Limitations of MsAccess

    来自How scalable is MS Access

    Access 并没有真正占有一席之地 任何重要的数据库项目。它 基本上是针对国内市场的 对于那些想要能够 存储信息供家庭使用而无需 学习高级 Excel 来做到这一点

    Inform IT 的文章中,他们花了很多时间告诉您为什么应该使用 MsAccess,他们补充说(这是我的重点

    • 可扩展性。访问不处理 非常大的数据库很容易。 一般来说,越大的 数据库,越仔细 访问应用程序必须是 设计。
    • 网络。虽然 Access 是一个 内置多用户数据库 记录锁定和其他 交易功能,它没有 在网络上运行良好

    “它不能通过网络很好地工作” 真的吗? 在这个时代 - 分布式计算是下一件大事 - 那到底有什么好处? 所以基本上,如果一台计算机上只有一个用户需要使用该应用程序,那没关系,但如果有机会你需要将它推广给多个用户,为什么要花费时间和精力来构建它在 Access 中,要推出它,您需要在后端重新构建应用程序和真正的 RDBMS。

    真的,你最好不要一开始就使用 Access 当然,除非你是世界上唯一的人并且你只有一台电脑 :)

    【讨论】:

    • @Elmex 在这些可能的选项中,最后一个可能会给你最好的结果。编码和支持会更容易,因为您不必在应用程序之间来回跳转。此外,您的最终用户不需要 Access 即可运行。只需 .NET、您的 EXE(和 DLL 依赖项)以及与数据库的有效连接。
    • @David-W-Fenton:我也编辑了我的答案来回答你的问题。
    • 您为澄清答案而添加的所有内容都是主观的和错误的。它完全基于对如何正确使用 Access 和 Jet/ACE 数据库引擎以及遵循最佳实践缺乏了解。这种对 Access 的态度很普遍,但这并没有减少它的错误。
    • 1.访问服务器数据库的前端可以非常好地与 100 多个用户一起工作。 2. Access applications with an appropriately chosen back end can work great with multi-GB databases. 3. 精心设计的 Access 前端可以在连接速度较慢的情况下正常工作,当它经过优化以与另一端的服务器数据库进行有效通信时。 4. 当您知道自己在做什么并且知道如何为操作环境适当地设计它们时,Access 应用程序就可以正常工作。不过,您似乎不了解 ACCESS 和 Jet/ACE 之间的区别。
    • ... 当有 这么多 高级工具(其中一些是免费)用于针对服务器数据库开发应用程序时 - 为什么要有人选择在 MsAccess 中编写该应用程序吗? 为什么有人会这样做?有什么意义?
    【解决方案2】:

    嗯,

    如果你不想使用 Acces 的 VBA(我猜是所有相关的对象,如表单、模块等),我猜你最好不要使用 Access。将您的数据存储在任何“真实”的数据库引擎中,无论是否免费(SQL Express、MySQL 等),并以您喜欢的语言构建您的用户界面。

    【讨论】:

    • 我不明白为什么人们认为使用通用开发工具构建数据库应用程序更快更容易。
    • 如果您想启动并运行一些系统可以击败 MSAccess 环境。我希望构建高效网页设计的工具也能如此简单。魅力在于一切都是自给自足的。呈现表单和子表单并生成极其复杂的报告。如果用户很少,开发成本低且快速。当您在自己的 CPU 上运行时,报告速度非常快。生成许多​​记录采样数据的速度也很快。部署不是 exe。用户需要安装 MSOffice。服务器部署而不是。非常适合快速模型/演示/研究和个人报告工具
    【解决方案3】:

    您可以使用 C# 来控制 Access 中的所有内容,但这似乎完全是矫枉过正。我认为 VBA 可以处理任何/所有需求,使用 VBA,您甚至可以在 Access 中创建自定义函数来完成仅使用标准内置 Access 工具无法完成的事情。同样,如果您想使用 C# 来管理 Access,是的,您当然可以这样做。

    这是一个很好的链接,可以帮助您入门。

    http://csharp.net-informations.com/data-providers/csharp-oledb-connection.htm

    该页面底部还有许多其他链接可以帮助您处理许多其他事情。

    【讨论】:

      【解决方案4】:

      当然可以。当您集成 C# 和 Access 时,您可以做很多事情。例如,这是一种从 Access 加载 GridView 的方法。

      using System;
      using System.Data;
      using System.Windows.Forms;
      using System.Data.OleDb;
      
      namespace WindowsApplication1
      {
          public partial class Form1 : Form
          {
              public Form1()
              {
                  InitializeComponent();
              }
      
              private void button1_Click(object sender, EventArgs e)
              {
                  string connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=your .mdb file;";
                  string sql = "SELECT * FROM Authors";
                  OleDbConnection connection = new OleDbConnection(connetionString);
                  OleDbDataAdapter dataadapter = new OleDbDataAdapter(sql, connection);
                  DataSet ds = new DataSet();
                  connection.Open();
                  dataadapter.Fill(ds, "Authors_table");
                  connection.Close();
                  dataGridView1.DataSource = ds;
                  dataGridView1.DataMember = "Authors_table";
              }
          }
      }
      

      查看下面的链接,了解更多关于 C# 和 Access 可以做什么的想法。

      https://www.codeproject.com/Articles/1060352/Using-Microsoft-Access-Database-In-Csharp-ADO-NET

      虽然............我不得不说,你可能永远不会离开 VBA。此外,VBA 是容易实现的目标。将 VBA 与 Access 结合使用要比尝试驯服 C# 来完成与 VBA 为您做的基本相同的事情要容易得多。此外,VBA 可能会受到更多限制,而 C# 将更加灵活,就您可以实现的目标而言。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-14
        • 2013-10-14
        • 1970-01-01
        相关资源
        最近更新 更多