有没有能在脚本里支持数据库方法的脚本控件,急急急!!!(300)

  • 主题发起人 主题发起人 verystronger
  • 开始时间 开始时间
V

verystronger

Unregistered / Unconfirmed
GUEST, unregistred user!
公司指派我的任务是:实现用户自定义报表公式解析。也就是说公式在脚本中定义按一定格式存储,用户进行报表设计时直接使用脚本定义的公式,报表计算取数(即公式解析)全部交给脚本去执行。目前我还没用找到能实现该应用的技术条件。我已经测试过两种脚本控件TPaxScripter和RemObjects Pascal Script两种脚本控件都不支持在脚本中创建(或使用)数据库对象(或方法),有没有高手有这方面应用的!!!
 
能够自己定义函数的用户水平应该很牛。不知道你们现在用的是什么控件来做报表的。可否换个思路,将做报表的SQL等信息全部保存在报表模板中,如果客户水平真的很牛,让他去更改SQL,SQL里面的函数应该很丰富,基本可以实现用户的需求了。我现在在用Excell做模板,将SQL等信息全部保存在excell中,程序中只需要说明打开哪个Excell文件,然后传递一些SQL所需要的Param参数值即可。缺点是Excell操作速度有点慢,以前用华表控件做的,速度还可以(不是给它做广告)。
 
谢谢znxia! 我用的XLGrid控件写报表,自定义公式是给程序员用的或者是二次开发人员或是技术支持,用户是谁可能不重要。 自定义报表公式解析的优点是:当需要增加新的报表和有新的取数需求时只需要修改脚本新增公式即可,好处是不用修改程序或数据库不用更新或升级应用系统了;另外报表的公式解析用程序实现会很复杂(我们现在的报表公式解析就是自己写的),交给脚本解析计算就避免了这种复杂度。 Excel做报表的话公式解析还是得自己写,华表本身提供有自定义函数的方法解析有华表自己解析。
 
将javaScripe或者vbScripe功能嵌入到你的程序中,那样处理起来可能会比较方便。我看有人这么实现过,但我还没那个水平,算是给你提供一种思路吧。
 
TPaxScripter 可以,你要先USES IMP的那些单元才可以比如我用的ODAC 就是先用那个import工具把ora,等几个单元先转化成TPaxScripter可以引用的单元就可以了
 
TPaxScripter在脚本里嵌套数据库函数取数公式你用过了吗就是这样: Scripter.AddCode('1','Function GetValue(ASQL: string): Integer; '+ 'Var AdoQry1 : TADOQuery; '+ 'Begin '+ 'Result := 1; '+ 'AdoQry1 := TADOQuery.Create(nil); '+ 'AdoQry1.Connection := AdoConn; '+ 'AdoQry1.Close; '+ 'AdoQry1.SQL.Text := ASQL; '+ 'AdoQry1.Open; '+ 'AdoQry1.First; '+ 'Result := AdoQry1.Fields[0].AsInteger; '+ 'AdoQry1.Free; '+ 'End;'); Scripter.AddCode('1','Function GetSumValue(ASQL): Integer; '+ 'Begin '+ 'Result := GetValue(ASQL) + GetValue(ASQL); '+ 'End;');然后主程序调用Scripter.CallFunction('GetSumValue', [ASQL])返回运算值,这个执行就会有问题。
 
还是建议使用vbscript脚本来实现。实现起来比较容易,容易实现扩充。而且相对于一般脚本控件比,vbscript实现起来非常严谨,帮助文档完备。用户更容易上手。别忘了,懂vb的人比懂pascal的人更多。cad之类的工具都使用vbscript来作为扩展。当年就曾经使用过,感觉非常好的。
 
verystronger,我通过VB脚本(或者JavaScripe)以及一些Com技术,实现了可以在VB脚本中使用Delphi的数据库对象的功能,如果需要,请给我发邮件 znxia@foxmail.com。
 
邮件已发,请查收!除可以使用TQuery外,还可以对界面上控件进行操作。
 
znxia,您好! 你发的程序我测试了,我用SQL SERVER作为数据源发现连接有问题,仅通过设置 TQuery(t.FDataSet).DatabaseName无法建立连接,ACCESS是没有问题的。要支持SQL Server的话是否还需要有对TDataSource的封装,Define_TLB.pas是否扩展(该文件是MSScript控件导出的接口文件吧),如果TScript对象只支持对TWincontrol进行注册的话,那TDataSource必须在接口中进行封装了。 我在网上找到一款支持数据库对象较全的脚本控件PythonForDelphi,不过还得下载Python环境。
 
Define_TLB.pas是否扩展(该文件是MSScript控件导出的接口文件吧)------------------不是,是我自己写的,所以你可以在此基础上随意扩展。按理说,可以访问access,那么访问sql server也应该没有问题。如果BDE控件不符合你的要求,你可以使用ADO控件。方便的话,你可以把你的不成功的代码发给我。
 
多人接受答案了。
 
后退
顶部