2011-05-05 120 views
7

我打算投标的项目的主要目标涉及使用python创建Microsoft Access数据库。主数据库后端将是postgres,但计划是导出Access图像。使用python构建MS Access数据库

这将是一个Web应用程序,它将从用户处获得输入,并通过黑盒并将结果作为访问数据库输出。网络应用程序将建立在Linux服务器上。

我有几个相关的问题:

  • 是否有可以使用可靠的库或模块?
  • 你有什么经验使用Access和python?
  • 任何提示,技巧,或必须避免我需要知道?

谢谢:)

+0

如果安装了Access,您可以使用Python for Windows自动从Python进行自动化扩展:http://sourceforge.net/projects/pywin32/ – HansUp 2011-05-05 00:40:40

+0

@HansUp - 不会安装它,因为Web应用程序将继续linux服务器 – dassouki 2011-05-05 00:42:47

+0

重复http://stackoverflow.com/questions/256459/populate-a-ms-access-database-in-linux – abbot 2011-05-05 06:28:37

回答

4

你可以使用sqlite数据库吗?

编辑:

如果它必须是在Linux和它必须是到MS Access,那么我敢肯定this is your only choice,但它的成本$ 1,550。

您将不得不掏钱,或说服客户改变其他两个参数之一。就个人而言,我会推动将数据库文件更改为sqlite。

当然,你可以随时编写自己的数据库驱动程序,但它可能是值得花时间1550美元。多年来,mdbtools一直在努力,这个项目已经被放弃了。

发现,还挺

好了,我不能让这个去,发现有一个叫Jackcess一个Java库,会写到MS Access MDB文件,可以运行在任何平台上JVM。当然,它是java而不是python,但是也许你可以学习足够的java来将应用程序放在一起并从python执行它?或者只是将整个应用程序切换到Java,无论如何。

+0

严格来说,输出到应用程序**必须**是MS Access MDB文件。 – dassouki 2011-05-10 17:36:20

+0

我以为你会这么说。 – James 2011-05-10 21:04:17

+0

感谢您的建议。我现在8年没有碰到过java,但我确信我可以挑选足够的能够运行它作为一个API,我可以从Python – dassouki 2011-05-11 01:25:27

0

我建议moving数据到Microsoft SQL数据库,然后linking or importing的数据访问。

+0

该项目的核心要求是输出一个msaccess数据库。他们要托管的服务器是linux – dassouki 2011-05-08 01:15:49

+0

而后端可以是我想要的任何内容,输出必须存储在Access MDB中 – dassouki 2011-05-11 01:24:55

2

重复问题的各种答案表明,您在Linux服务器上创建MS Access数据库的“主要目标”是无法实现的。

当然,这样的目标本身并不值得。如果你告诉我们什么Access数据库的用户/消费者预计与它,也许我们可以帮助你。可能性:(1)创建一个用户下载并运行的脚本和(一组)文件,以创建一个Access DB(2),如果它只是用于临时用户检查/操作,则可以使用Excel文件。

+0

严格地说,输出到应用程序**必须**是MS Access MDB文件。 – dassouki 2011-05-10 17:36:12

+0

目标似乎可以通过使用Jython/Jackcess,Python和java/jackcess转换器,或者使用Jackcess的python端口来实现。这无疑将是一个痛苦。或者支付1500,并使用unixODBC(可能比开发内部智力资源便宜) – extraneon 2011-05-14 19:21:07

0

您可以创建一个自解压文件发送给安装了Microsoft Access的Windows用户吗?

  1. 包含一个空白的.mdb文件。
  2. 动态地建立了桌子,架构 和数据的XML文档
  3. 包括进口可执行文件,将采取 所有的XML文档,并导入到 访问.mdb文件。

这对用户来说是一个额外的步骤,但是您可以依靠他们现有的驱动程序,软件和桌面。

+0

我希望,如前所述,输出必须是mdb应用程序。 – dassouki 2011-05-10 19:02:16

2

如果你知道这不够好:

  • 的Python,它的数据库模块,并配置ODBC

那么你应该知道如何做到这一点:

  • 打开数据库,读取一些数据,将其插入到不同的数据库中

如果是这样,那么你非常接近你所需的解决方案。诀窍是,您可以打开一个MDB文件作为ODBC数据源。现在:我不知道,如果你能在一个MDB文件“创建表”使用ODBC,所以让我提出这个食谱:

  1. 创建名为“TARGET.MDB”一个MDB文件 - 必要表格,表格,报告等(将一些虚拟数据放入并测试它是客户想要的。)
  2. 将ODBC数据源设置为文件“TARGET.MDB”。测试以确保您可以读取/写入。
  3. 删除所有的虚拟数据 - 但保持表格完好无损。重命名文件“TEMPLATE.MDB”。
  4. 当您需要生成一个新的MDB文件时:使用Python TEMPLATE.MDB复制到TARGET.MDB。
  5. 打开要写入TARGET.MDB的数据源。创建/复制所需的记录。
  6. 关闭数据源,将TARGET.MDB重命名为TODAYS_REPORT.MDB ...或者对这个特定的数据导出有意义。

会为你工作吗?

由于对ODBC的支持将得到最广泛的应用,因此在Windows上这样做几乎肯定会更容易。不过,我认为原则上你可以在Linux上这样做,只要你找到正确的ODBC组件来通过ODBC访问MDB。

+0

谁给了你一对互相矛盾的要求,输出必须是Jet/ACE MDB,并且创建必须发生在Linux机器上?那简直是疯狂。 – 2011-05-12 01:27:15

+0

@ David-W-Fenton:那就是你的客户:) – extraneon 2011-05-14 19:22:45

+0

我解雇了那些不让我做他们支付我工作的客户。 – 2011-05-18 21:34:52

1

您可以使用MS的officedata命名空间导出到XML。访问应该不会有任何麻烦消耗。您可以提供单独的xsd模式,或直接在文档树中编码类型和关系。这里有个简单的例子:

<?xml version="1.0" encoding="UTF-8"?> 
<dataroot xmlns="urn:schemas-microsoft-com:officedata"> 

<Table1><Foo>0.00</Foo><Bar>2011-05-11T00:00:00.000</Bar></Table1> 
<Table1><Foo>3.00</Foo><Bar>2011-05-07T00:00:00.000</Bar></Table1> 

<Table2><Baz>Hello</Baz><Quux>Kitty</Quux></Table2> 
</dataroot> 

谷歌搜索“瓮:架构 - 微软COM:officedata”应该把一些有用的结果。

0

好吧,在我看来,你需要在运行windows的linux系统上运行vmware服务器,在vm中写入访问的web服务,以及从主linux框中与之通信。你不会在Linux上找到创建访问数据库的手段。把它称为一项要求不会使其技术上成为可能。

+0

任何事情都可能在Linux上;) – James 2011-05-12 03:15:43

0

http://adodb.sourceforge.net/ - 安装在Linux上,用php或python编写,连接到Access和PostgreSQL。

我们已经使用了它多年,它的工作原理非常漂亮。

+0

因此,如果我有一个“模板”毫秒访问数据库,它应该工作完美,然后进行小编辑/更改? – dassouki 2011-05-14 19:00:46