返回列表 发帖

SAGE X3自有开发语言,能跨应用平台,跨数据库,你信吗?

程序样例:

$LIENS    系统开始对数据库取数放到屏幕里fficeffice" />

If !clalev([F:ESD] ): Local File EXTSHIPD [ESD] : Endif

nolign=0  

For [F:ESD]ESD1 Where SDHNUM=[M:ESH0]SDHNUM

    [M:ESH1]NBLIG=[F:ESD]NBLIG                                           

    [M:ESH1]ITMREF(nolign)=[F:ESD]ITMREF                          nolign是行号索引,从0开始。因为是一行行取,所以nolign要循环+1

    [M:ESH1]QTY(nolign)=[F:ESD]QTY

    [M:ESH1]SAU(nolign)=[F:ESD]SAU

    [M:ESH1]ISDLIN(nolign)=[F:ESD]ISDLIN

    [M:ESH1]FROSER(nolign)=[F:ESD]FROSER

    [M:ESH1]TOSER(nolign)=[F:ESD]TOSER

    [M:ESH1]PITCDT(nolign)=[F:ESD]PITCDT

    nolign+=1

Next

Return

其实你的系统也可以跨数据库。

第一种方法:

1、你的程序里面采用标准sql语句,对任何数据库语言都通用。但是采用标准sql语句,无疑放弃了各种数据库的优势用法,同时某些操作各种sql语句并没有统一,如左连接,sqlserver 与DB2左连接的格式就不一样。

2、你的程序控件里面不要绑定特定数据库的表。如PB的数据窗口,肯定要绑定表,数据窗口不绑定表的话没有办法操作,这个时候你就只能针对每一种数据库做一个数据窗口,程序中根据用户选择的数据库种类进行判断选用不同的数据窗口。一般一个大的系统有上万甚至十几万这种数据窗口就得根据数据库种类做几套,一旦发生修改,几套都需要修改。工作量,保持一致性难度极大。

TOP

Re:SAGE X3自有开发语言,能跨应用平台,跨数据库,你信吗?

看X3的代码,很怪的感觉

TOP

第二种跨数据库的方法

第二种方式:是你的程序里面不用任何数据库的sql语句。       你自己编一套sql语句进行数据库读写。当然你自己编的sql语句肯定是不能执行的。这个时候你就需要做一个翻译器,将你自己的sql语句翻译成对应数据库的sql语句,如SQL SERVER 的sql语句,这样就可以进行数据库操作了。这样一来在你的程序与数据库之间通过翻译器搭建了一个桥梁。这样的做虽然中间多了一道操作,但是它的好处是,假如你做两种数据库的翻译器,你的程序就可以跑在两种数据库上了。多一个翻译器就能多适用于一种数据库。而你的程序永远只有一套,只不过通过编译器翻译成能在不同数据库上运行的程序了。Sage X3 就是这样做的。原理实际上非常简单,但是第一个想到这种方法、最早的应用,并采用这种方法搭建整个系统的,就是SAGE X3

TOP

Sage X3跨应用平台

看了前面的跨数据库的实现技术,相信你也明白跨应用平台的实现方法:X3的自有开发语言不能直接运行,需要编译。Sage的编译器同时将自己的程序编译成两套目标代码,一套能在C/S环境下运行,一套能在B/S环境下运行。通过这种方法,X3的语言无需跟随着外部环境的变化而改变。所需要改变的,当出现一个新的运行环境只需要增加一个编译器就可以啦。因此X3 只需要把精力放在功能的逐渐完善上,而不需要随着环境的变化,用不同的语言开发。

TOP

Re:Sage X3跨应用平台

学习X3开发语言难度大不大?

TOP

Re:SAGE X3自有开发语言,能跨应用平台,跨数据库,你信吗?

研究的很认真么,继续加油吧——多问问人可以少走点弯路

TOP

Re:SAGE X3自有开发语言,能跨应用平台,跨数据库,你信吗?

~o~,原来是这样。。。。

TOP

学习X3的难度不大。

学习X3的难度不大。如从表里取数到窗口中,只需如下语句[M:XXX]YYY=[F:AAA]BBB 就能将AAA表的字段BBB的值放到窗口XXX的YYY域中。

不过虽然学习难度不大,但是得改变观念,X3的开发和面向对象的开发有一点不同。

TOP

Re:SAGE X3自有开发语言,能跨应用平台,跨数据库,你信吗?

1、虽然经过JERRY几经解释,但是对开发语言,还是感觉懵懵懂懂,有没有培训的详细一点的资料啊?

2、感觉你说的对每一种数据库做一个数据窗口是其他语言最主要的瓶颈,但是X3的编译器不是也在做这个工作吗?只不过提前写好了放在编译器里了,而且我在想是不是编译器里只预存了针对几种大型数据库的窗口,有些没预存的,是不能跨数据库的。

因为还没弄懂,说的不对啊,请专家老师指点,以求进步。

TOP

返回列表