Foxtable数据库应用开发宝典
上QQ阅读APP看书,第一时间看更新

大易至简,行于表上

如果有人告诉你,有这样一款软件,不管你有没有基础,只需一周左右的时间就能让你成为一个数据管理高手,而且其数据录入之快捷、统计查询之强大、报表输出之多样,目前市面上的软件无出其右;同时只要你愿意,它可以立即变身为一个开发平台,而且从PC到手机、从C/S到B/S、从客户端到服务端、从单机到局域网再到互联网、从常规的数据管理到文档管理、从单业务管理系统到企业整套ERP,包括企业IM,它都能胜任开发,并且可以编译成独立的可执行文件。它不仅简单,而且高效,高效到一人可抵一个小团队;它能让一个完全没有接触过编程的职场菜鸟,在3个月甚至更短的时间内蜕变为一个管理软件开发的全栈工程师。

你可能不会相信,真的有这样的软件吗?有,它就是Foxtable!

简单和强大永远是矛盾的,但Foxtable却在二者中取得了很好的均衡,使得二者不再是完全对立的两面,下面通过一些常用的功能看看Foxtable如何将看似强大的功能做到极致的简单。

1.轻松输入

用Excel实现下拉列表输入相当复杂,但是在Foxtable中却异常简单,以下图的“学历”列为例,只需在列属性设置中将其下拉列表框设置为“博士”“硕士”“本科”“大专”“高中”“初中”“小学”,即可用下拉列表形式输入学历。

如果在设置列表项目的同时需要将扩展列类型设置为“多值字段”,就可以从下拉列表框中选择多个值输入,如下图的“负责人”列。

对于日期列和数值列,如果在列属性设置中将“使用内置输入器”设置为True,则可以使用下拉日历或计算器输入数据,如下图的“入职日期”列。

更令人拍案叫绝的是,Foxtable可以使用目录树作为下拉列表。例如,下图的“大类”列就设置了目录树列表,单击目录树中的某个节点,能够同时输入“大类”“二类”“三类”这3列的数据。

下拉列表还可以是一个表,如下图所示。

要完成这些看似复杂的功能,并不需要编写任何代码,只需进行一些简单的设置即可。

Foxtable内置了图片和备注编辑窗口,可以很方便地编辑长文本和管理图片,如下图所示。

图片的管理是通过扩展列类型实现的,在一个单元格中可以插入多个图片,此外,也可以将列扩展为文件列,这样就可以管理任何类型的文档,如下图所示。

2.轻松统计

有下图所示的一个订单表。

假定你需要得到下图所示的统计分析结果。

要在Excel中完成这样的统计,相信对于绝大多数的用户来说,都是一件不可能完成的任务。而在Foxtable中,不用编写任何代码,只需简单地单击几次鼠标,在菜单中执行分组统计命令,然后按下图所示进行设置,最后单击【确定】按钮即可。

如果要编写代码完成上述统计,即使对资深程序员也是一件颇费时间的任务,代码至少百行以上,而在Foxtable中则只需寥寥几行:

Dim g As New Group Table Builder("统计表1", Data Tables("订单"))

g.Groups.Add Def("日期", Date Group Enum.Year, "年")

g.Groups.Add Def("日期", "月")

g.Totals.Add Def("数量")

g.Totals.Add Def("金额")

g.Same Period Growth = True ‘开启同比分析

g.Circle Growth = True ‘开启环比分析

g.Build()

Main Table = Tables("统计表1")

上述代码只有9行,而且无任何复杂的逻辑,普通用户经过简单的基础学习就能掌握。实际上,我们并不需要自己编写代码,因为单击设置窗口的【生成代码】按钮,即可根据现有设置自动生成上述代码。

再例如,假定要得到下图所示的每年各产品的销量、占比及各产品的总销量和总占比。

同样只需单击几次鼠标或使用不到10行的代码即可完成。

Dim g As New Cross Table Builder("统计表1", Data Tables("订单"))

g.HGroups.Add Def("产品")

g.VGroups.Add Def("日期", Date Group Enum.Year, "{0}年_数量")

g.Totals.Add Def("数量", "数量")

g.Horizontal Total = True

g.Vertical Total = True

g.Vertical Proportion = True

g.Build()

Main Table = Tables("统计表1")

以上只是Foxtable统计功能的牛刀小试,Foxtable内置合计模式、汇总模式、分组统计、交叉统计等多个统计工具,以前需要数小时甚至数天才能完成的统计,现在可以随时信手拈来。

3.轻松报表

以Excel为代表的电子表格制表功能强大,可以设计出非常复杂的报表,但在数据输入、查询和统计分析方面,远不如数据库软件强大便利,而Foxtable则结合了二者的优势,可以直接利用Excel设计报表模板,然后根据此模板批量生成报表,如下图所示。

Foxtable还可以利用Word设计报表模板,如下图所示。

4.轻松查询

和统计功能一样,Foxtable查询功能之强大、智能和方便,可以说到了令人难以置信的程度,以日期查询为例,假定日期列中某个单元格的值为“2018-9-18”,右击此单元格,弹出的筛选菜单如下图所示。

由图可见,可以通过菜单筛选出等于、早于或晚于此日期的行,也可以筛选出和此日期同年、同月、同日、同季度或同星期的行,还可以直接筛选出指定季度或月份的行。例如,单击上图菜单的【范围之内】命令,可以弹出下图所示的对话框用于筛选指定日期范围内的行。

不仅是日期列,字符列和数值列同样有类似的智能筛选功能。包括智能筛选在内,Foxtable合计提供了10种筛选功能,其中最为方便的是筛选树。可以根据数据表的任意列生成一个目录树,然后单击相应的节点,即可筛选出对应的行。例如,下图筛选出了2009年1月产品为“PD03”的销售记录。

5.界面设计

Foxtable的初始界面虽然类似于电子表格,看起来就是一个普通的应用软件,但实际上Foxtable还是一个真正的开发平台,提供了非常强大的菜单和窗口设计功能,以下两图就是基于Foxtable设计的两个窗口,前者为主界面,后者为数据输入对话框。

与普通的管理软件二次开发平台不同,Foxtable具备编译功能,能将设计好的系统编译成可执行文件,成为独立的软件,脱离Foxtable运行,所以完全可以基于Foxtable开发商业软件,实际上有相当多的软件公司和咨询公司正在使用Foxtable进行开发。

6.B/S和手机开发

Foxtable内建Web服务及手机网页生成功能,普通用户即使完全不懂网页设计,也能基于Foxtable快速开发出手机端的管理系统。下面就来演示Foxtable在这方面到底有多简单。

首先在项目的After Open Project事件中输入以下代码:

Http Server.Prefixes.Add("http://*/")

Http Server.Web Path ="d:\web"

Http Server.Start()

上面用3行代码就完成了一个Web服务器的搭建工作,这应该是目前最简单的Web服务器搭建方法。

然后将Http Request事件代码设置如下:

Dim wb As New We UI

wb.Add Form("","form1","addnew.htm")

With wb.Add Input Group("form1","ipg1","新增订单")

.Add Select("cp","产品","PD01|PD02|PD03|PD04|PD05")

.Add Input("gy","雇员","text")

.Add Input("kh","客户","text")

.Add Input("dj","单价","number")

.Add Input("zk","折扣","number")

.Add Input("sl","数量","number")

.Add Input("rq","日期","date")

End With

With wb.Add Button Group("form1","btg1",True)

.Add("btnok","确定")

End With

e.Write String(wb.Build)

以上代码用于生成网页,现在在本机打开浏览器,输入地址“http://127001/”,即可看到下图所示的网页。

我们只用18行代码就完成了Web服务端的架设及客户端网页的生成。因为代码编写全部在Foxtable中完成,不需要借助其他平台,所以也不需要额外学习,只需掌握Foxtable即可。如果按常规方式自行编码,不仅代码量10倍于此,而且涉及的知识面非常多,需要很长的学习周期,一般用户很难掌握,这也是为什么手机端管理软件的开发往往只有少数专业人士掌握的原因。

7.企业IM

Foxtbale内置即时通信功能,可以用不到30行的代码,快速搭建一个企业内部的IM系统。下图所示为内置的企业IM聊天窗口。

值得一提的是,这个内置的IM系统可以和基于Foxtable开发的管理系统紧密结合起来,实现消息、数据和文档的自动收发,还可以直接和微信进行通信。

8.大数据管理

企业的数据量通常以百万行甚至千万行计算,对于这种级别的数据量,采用Excel管理是不可能的,但Foxtable却能轻松应对。Foxtable能连接局域网或互联网数据库,包括Access、SQL Server和Oracle等主流数据库,将外部数据库中的表添加到Foxtable中时,可以选择初始不加载数据或只加载少量数据(这一点很重要),然后通过代码或菜单设置加载树,如可以按下图所示的订单表设置加载树。

可以勾选“自动显示加载树”复选框,这样打开项目时就能自动生成加载树;或者在After Open Project事件中加上以下代码:

Tables("订单").Open Load Tree("日期 YM|产品",150,50)

表示根据日期(按年月)和产品生成加载树,加载树的宽度为150个像素,每页加载50行数据。下图所示为生成的加载树。

加载树和前面介绍的筛选树有些类似,但是筛选树是筛选已经加载的数据,而加载树是从后台加载符合条件的数据,而且可以分页加载。例如,在上图单击2010年1月的节点,即可加载该月的订单,该月的订单不止50行,可以通过目录树下方的按钮加载不同页面的数据,而且Foxtable的筛选和统计都可以直接针对后台所有数据,所以分页加载并不会对日常使用带来任何影响。有了加载树功能,Foxtable可以让一个普通用户,在几分钟内就能搭建完成一个基于互联网的大数据管理系统,而且不用编写任何代码。

9.无需留恋VBA

如果你是Excel或Word的资深用户,一定会留恋VBA,实际上你的VBA知识在Foxtable中一样有用。将原来的VBA代码稍作修改,就可用于Foxtable中。这样,除了Foxtable本身提供的Excel或Word报表功能外,还可使用VBA无所拘束地操控它们。

例如,在Foxtable中运行以下代码,将自动创建一个新的Excel工作簿文件:第1个工作表的名称为“测试表”,同时在A1单元格写入内容“我是用来测试的单元格”,保存的文件名为“d:\testxls”:

Dim App As New MSExcel.Application

Dim Wb As MSExcel.Workbook = App.Work Books.Add

Wb.Work Sheets(1).name ="测试表"

Wb.Work Sheets(1).range("A1").Value ="我是用来测试的单元格"

Wb.Save As("d:\test.xls")

App.Quit

由此可见,Foxtable已经针对国人的数据使用习惯及各种不同的应用场景,在Excel的基础上做了大量的功能优化、提炼及扩展。从某种程度上说,超越Excel已为事实。例如,在Excel中处理海量数据是很不方便的,尽管后来推出了Power Query与Power Pivot两个插件,但在职场环境中能熟练使用它们的仍然寥寥无几。而Foxtable的“数据展示面”虽然还是Excel(包括快速移动光标、快速复制单元格等操作方法甚至和Excel一模一样),但它的“芯”已经变为数据库,加上扩展的各种模块化功能,这样做起商业智能分析(BI)来才会更加顺畅、便捷、简单。

这里仅仅是让大家对Foxtable的定位和特点有个初步的了解,以坚定读者继续学习的决心。事实上,随着学习的深入,你会发现Foxtable所提供的功能远远不止于此。本书由Foxtable软件作者贺辉及资深用户周菁合作完成,尽管期间已数易其稿,但疏漏及错误之处仍在所难免,恳请广大读者批评指正。

作者

2018年7月