查看: 2061|回复: 27
|
【VFP编程】RDBMS vs SQL
[复制链接]
|
|
VFP 可以采用以下任何一种写法,目前我在优化着及版本更新的会计系统,当然里面的编码也有所不同。
RDBMS 写法
- Select Ac
- Blank All Fields Bal,Bf,M1
- Scan For Between(Ac,z_Ac1,z_Ac2)
- tBf = 0
- tCf = 0
- Select Tr2
- Scan For Ac=Ac.Ac
- If YM < z_YM2
- tBf = tBf + Bal
- Endif
- If YM <= z_YM2
- tCf = tCf + Bal
- Endif
- Endscan
- Select Ac
- If tBf#0 Or tCf#0
- Replace Bal With tCf,Bf With tBf, M1 With tCf-tBf
- Endif
- Endscan
- Select Ac
- Go Top
- Endif
- Report Form f_Aging To Printer Prompt Preview For Bal#0
复制代码
SQL 写法
- Select distinct Tr2.Ac,Ac.Name,Sum(Iif(Tr2.YM<z_YM2,Tr2.Bal,0)) as Bf,Sum(Iif(Tr2.YM=z_YM2,Tr2.Bal,0)) as M1,Sum(Iif(Tr2.YM<=z_YM2,Tr2.Bal,0)) as Bal From Tr2,Ac Group By Tr2.Ac,Ac.Name Where Tr2.Ac=Ac.Ac And Between(Ac,z_Ac1,z_Ac2) Into Cursor _X
- Report Form f_Aging To Printer Prompt Preview For Bal#0
复制代码
简直厉害至极,以一行指令就等于上面那么多行。
自从新山网聚之几小时前,我在City Square的Popular书局买了一本Teach Yourself SQL in 10 Minutes,以及和 astral 谈及 VFP + SQL 课题时,回来后专研了两个星期就改良了整套西餐厅发单系统。目前改良会计和酒店管理系统。
这套会计系统是我从2001年8月开发到现在,2004年9月请到马来人翻译国文版本,现在改良 SQL 写法。
[ 本帖最后由 白日梦 于 15-7-2005 09:33 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 14-7-2005 08:44 PM
|
显示全部楼层
白老大现在是用native database engine 还是 sql server呢? 如果是后者的话,迟些可以把大部分的sql statement都移到backend去,然后通过vfp来运行storeproc...那么在维护上就会更轻松了...如果以后换其他开发工具也就不用在对database的部分重新花时间了...
顺道提一下,其实vfp的local cursor 就好像 ado.net的dataset一样,只是vfp本来就是针对database的,因而比较容易和方便. |
|
|
|
|
|
|
|
发表于 15-7-2005 12:14 AM
|
显示全部楼层
在开发的时候如果想到以后一定会不用 dbf (会 upgrade to sql server) ,就会用 sql 的方法。。。
而用 store procedure 让你可以轻松的使用混合工具及资料转换。 |
|
|
|
|
|
|
|
发表于 15-7-2005 12:37 AM
|
显示全部楼层
有点意见, "RDBMS 的写法" 这说词不太正确, RDBMS 是资料库的意思 (Relational Database), 而 RDBMS 用的语法就是 SQL 呀. ![](static/image/smiley/default/smile.gif) |
|
|
|
|
|
|
|
![](static/image/common/ico_lz.png)
楼主 |
发表于 15-7-2005 08:35 AM
|
显示全部楼层
羊弟说得对,一语惊醒梦中人,我漏掉了前一段的 RDBMS,在此补上。
- Close Databases
- Use Ac Order Ac Shared
- Blank All Fields Bal,Bf,M1,M2,M3,M4
- Set Filter To !Heading And Left(Ac,2)$'TD,OD,TC,OC'
- Go Top
- z_Ac1 = Ac
- Go Bottom
- z_Ac2 = Ac
- Use Tr1 Order Ac In 0
- Use Tr2 Order Ac In 0
- * 后半段 *
- Select Ac
- Blank All Fields Bal,Bf,M1
- Scan For Between(Ac,z_Ac1,z_Ac2)
- tBf = 0
- tCf = 0
- Select Tr2
- Scan For Ac=Ac.Ac
- If YM < z_YM2
- tBf = tBf + Bal
- Endif
- If YM <= z_YM2
- tCf = tCf + Bal
- Endif
- Endscan
- Select Ac
- If tBf#0 Or tCf#0
- Replace Bal With tCf,Bf With tBf, M1 With tCf-tBf
- Endif
- Endscan
- Select Ac
- Go Top
- Endif
- Report Form f_Aging To Printer Prompt Preview For Bal#0
复制代码
[ 本帖最后由 白日梦 于 15-7-2005 08:37 AM 编辑 ] |
|
|
|
|
|
|
|
![](static/image/common/ico_lz.png)
楼主 |
发表于 15-7-2005 08:45 AM
|
显示全部楼层
原帖由 astral 于 14-7-2005 08:44 PM 发表
白老大现在是用native database engine 还是 sql server呢? 如果是后者的话,迟些可以把大部分的sql statement都移到backend去,然后通过vfp来运行storeproc...那么在维护上就会更轻松了...如果以后换其他开发工 ...
是 Native DB engine,迟点将在家里学安装 MS Win SBE Server 2003 + MS SQL Server Express 2005,之后再用 VFP 的 Tools -> SQL Server Upsizing Wizards 把 Databases 转换成 SQL DB。
astral,
你用的是什么 SQL ?
StoreProc 在那里设定?VFP 或 SQL DB的工具。
[ 本帖最后由 白日梦 于 15-7-2005 08:59 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 15-7-2005 10:18 PM
|
显示全部楼层
我用着mssql...
store procedure是create在sql server上的. 之后可以通过 exec <storeproc>来呼叫...
p/s: 当用vfp 的upsizing tool时。。。要注意upsize后的date的data type...最好是用datetime. |
|
|
|
|
|
|
|
![](static/image/common/ico_lz.png)
楼主 |
发表于 16-7-2005 09:12 AM
|
显示全部楼层
VFP9 的 help 里没有详细的讲解 StoreProc,只是粗略带过,不会用呢~
经你这么说我得安装 SQL server 才能够知道怎么用。
我会留意upsize的date资料栏。 |
|
|
|
|
|
|
|
发表于 16-7-2005 12:41 PM
|
显示全部楼层
我的前前前公司是使用VFP的,我刚加入的时候就发现客户们经常有Indexing 的问题需要做 Reindex, 或者是 corrupted 需要修复回来。我的老板就建议经常有这类问题的客户使用 MS SQL Server, 后来效果不错。但我不明白老板为什么不丢掉 VFP 改用 VB, 基本上 VB 会比 VFP 来得好、连接 MS SQL Server 比较快、MS SQL Server 容量又比较大也比较稳。当时我问他,他酸我说哪有那么容易?!到底是哪里不容易?是把 VFP 转去 VB 或技术上不容易,还是要客户买 MS SQL Server不容易?
这问题或许大家可以给点意见。 |
|
|
|
|
|
|
|
发表于 16-7-2005 04:47 PM
|
显示全部楼层
如果之前的program把大部分的sql statement捆在code里头就比较麻烦。反之,如果都是和program分离的就比较容易switch去其他的开发工具. 再来就是如你说的要让customer买 MS SQL Server也不容易...虽然说可以用msde,不过也要确定该开发工具开发出来的application可以bundle msde才行。。。再来就是msde的limitation... |
|
|
|
|
|
|
|
发表于 16-7-2005 10:58 PM
|
显示全部楼层
原帖由 咖啡豆 于 16-7-2005 12:41 PM 发表
我的前前前公司是使用VFP的,我刚加入的时候就发现客户们经常有Indexing 的问题需要做 Reindex, 或者是 corrupted 需要修复回来。我的老板就建议经常有这类问题的客户使用 MS SQL Server, 后来效果不错。但我不明 ...
除了 astral 说的, 不容易的原因我想应该是 MS SQL 价钱问题, 还有重写 VB 的问题. |
|
|
|
|
|
|
|
发表于 17-7-2005 02:50 PM
|
显示全部楼层
谢谢大家的意见!我不明白的是,他的顾客群都是中小型企业,交易量及资料的增长蛮快的。提升他的系统将有助于提升他的顾客群范围,而不是停留在小型至中型机构。
开发部的,不是应该不断求新求进步吗?我想如果当时他有接纳我的提议从那时开始慢慢改,今天就不会还是停留在那里。这纯属个人意见,我并没有攻击他人或 VFP 的意思。
新山太小了,偶尔还会遇见他。他的业务还是很好,证明了他也没错。 |
|
|
|
|
|
|
|
发表于 17-7-2005 03:03 PM
|
显示全部楼层
原帖由 咖啡豆 于 17-7-2005 02:50 PM 发表
谢谢大家的意见!我不明白的是,他的顾客群都是中小型企业,交易量及资料的增长蛮快的。提升他的系统将有助于提升他的顾客群范围,而不是停留在小型至中型机构。
开发部的,不是应该不断求新求进步吗?我想如果 ...
很多时候, 我们都会有一厢情愿的想法, 因为我们都站在科技的角度来设想. 然而, 站在他们生意上和公司开支预算的角度来说, 升级系统会否带来更大的利润, 或提升效率呢? 这是见仁见智的, 也要看公司决策人的预算, 和长远打算了.
举个例子来说, 我在一些工厂, 看到了有些控制机器的系统还在用着 DOS. 我皱起眉头问负责人, 怎么还停留在这里? 负责人说, 升级工厂的系统, 等于要升级机器, 还有重新训练, 另外一些连接在一起的系统当初也是为 DOS 而写的, 当中所涉及的开支数目庞大, 所以除非是新工厂, 否则暂时都不会升级了.
这样解释, 也不能理解为什么当初 Y2K 问题是许多公司的大问题了. |
|
|
|
|
|
|
|
发表于 17-7-2005 10:37 PM
|
显示全部楼层
我现在大都是用 mdb, 除了一些不太重要的 table 还会用 dbf |
|
|
|
|
|
|
|
![](static/image/common/ico_lz.png)
楼主 |
发表于 18-7-2005 09:13 AM
|
显示全部楼层
原帖由 goatstudio 于 17-7-2005 03:03 PM 发表
很多时候, 我们都会有一厢情愿的想法, 因为我们都站在科技的角度来设想. 然而, 站在他们生意上和公司开支预算的角度来说, 升级系统会否带来更大的利润, 或提升效率呢? 这是见仁见智的, 也要看公司决策人的预算 ...
感同身受!
公司就是中小企业,我负责公司/子公司里所有的电脑及软件开发,庞大开支只有老板有决定权,对于 MS SQL Server 他是不考虑的,我也不想呈报对我年尾花红不利的决策,比我上一级的同事花红是半年。
所以也不管技术不技术的问题,总之下属同事们能使用电脑工作就行了,公司里就算是用 Clipper 写的 DOS application 照用就是了。
[ 本帖最后由 白日梦 于 18-7-2005 09:18 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 18-7-2005 03:19 PM
|
显示全部楼层
我想这可能就是为什么中小型 ERP 系统在我国销量不好的原因了, 不过公司内部自己使用就还好。如果本地软件开发公司不求新求变,试问如何能在市场上与其他(国内、国外)同行竞争?
我知道有间本地的 ERP 开发公司, 他虽然规模小可却能做到这点。 |
|
|
|
|
|
|
|
发表于 19-7-2005 12:12 PM
|
显示全部楼层
原帖由 白日梦 于 18-7-2005 09:13 AM 发表
感同身受!
公司就是中小企业,我负责公司/子公司里所有的电脑及软件开发,庞大开支只有老板有决定权,对于 MS SQL Server 他是不考虑的,我也不想呈报对我年尾花红不利的决策,比我上一级的同事花红是半年。 ...
有时候很左右为难吧?
明明知道是更好的解决方法, 却因为现实问题得放弃.
但是反过来想深一层, 偶尔这样也未尝不是好事,
起码不是被科技牵着走, 而是物尽其用现有的科技.
当然, 这样一来, 时间久了, 公司很容易不思进取, 容易满足于现状了. |
|
|
|
|
|
|
|
发表于 19-7-2005 12:16 PM
|
显示全部楼层
原帖由 咖啡豆 于 18-7-2005 03:19 PM 发表
我想这可能就是为什么中小型 ERP 系统在我国销量不好的原因了, 不过公司内部自己使用就还好。如果本地软件开发公司不求新求变,试问如何能在市场上与其他(国内、国外)同行竞争?
这也要居于本地中小企业提高对科技的敏感度才行.
试想一些先进的想法, 得不到本地的中小企业支持, 软件开发公司也难以生存.
我认为这是双方面的过失和教育问题, 中小企业不了解电脑化所带来的好处, 软件开发公司也无法让中小企业了解电脑化所带来的好处. |
|
|
|
|
|
|
|
![](static/image/common/ico_lz.png)
楼主 |
发表于 20-7-2005 09:42 AM
|
显示全部楼层
原帖由 goatstudio 于 19-7-2005 12:12 PM 发表
有时候很左右为难吧?
明明知道是更好的解决方法, 却因为现实问题得放弃.
但是反过来想深一层, 偶尔这样也未尝不是好事,
起码不是被科技牵着走, 而是物尽其用现有的科技.
当然, 这样一来, 时间久了, 公 ...
科技人员当然会吹棒它的好处,不是科技行业的老板们的立场是又要马儿好又马儿不吃草,老板认为赚不赚钱是伙计买不买命,电脑则是一件工具而已。
习惯就好了,通常做好很久又稳定的软件,同事都不要求再做更改。这就是你所说的安于现状。 |
|
|
|
|
|
|
|
发表于 20-7-2005 02:08 PM
|
显示全部楼层
原帖由 白日梦 于 20-7-2005 09:42 AM 发表
科技人员当然会吹棒它的好处,不是科技行业的老板们的立场是又要马儿好又马儿不吃草,老板认为赚不赚钱是伙计买不买命,电脑则是一件工具而已。
习惯就好了,通常做好很久又稳定的软件,同事都不要求再做更改 ...
好沧桑啊! 我跑过泰国曼谷、印尼、中国,那里的本地软件市场都会比我们这里的好。那里所使用的软体开发的工具,都一直更新。我还以为我们普遍是和那里一样的,没想到你们给我的却是那样的答案。
[ 本帖最后由 咖啡豆 于 20-7-2005 02:20 PM 编辑 ] |
|
|
|
|
|
|
| |
本周最热论坛帖子
|