如何执行存储在数据库中的代码?

时间:2012-06-04 09:41:04

标签: database delphi delphi-xe2

如何在数据库中存储方法体,然后运行它? (我正在使用Delphi XE2;也许RTTI会有所帮助。)

2 个答案:

答案 0 :(得分:6)

RTTI不是一个完整的语言翻译。 Delphi是一种编译语言。你编写它,编译它,并只分发你的二进制文件。除非您是Embarcadero,否则您无权分发DCC32(命令行编译器)。

但是,JVCL包含一个类似于delphi的语言子集,它包含在一个非常易于使用的组件中,称为" JvInterpreter"。您可以编写一些代码(作为pascal)并将其放在数据库中。然后,您可以运行该代码"您从数据库中提取的(解释的,未编译的)。通常,这些应该是调用代码中的方法的过程。你必须写一些"包装"暴露您希望向解释器公开的已编译API(提供对实时数据或数据库连接对象或表/查询对象的访问)。你认为这听起来很完美吗?嗯,这是一个陷阱。

谨防所谓的" the configuration complexity clock"。你刚刚到了9点钟,这就是很多痛苦和痛苦开始的地方。就像你遇到问题一样,用正则表达式解决问题,现在你有两个问题",在你的应用程序中添加脚本和DSL可以解决一个问题并创建其他问题。

虽然我认为" DLL存储在数据库blob字段中"想法是邪恶的,荒谬的,我认为在应用程序中大量添加脚本和特定于域的语言也需要很多痛苦。首先问问自己是否有其他更简单的解决方案可行。然后应用YAGNI原则(You Ain并不需要它)和KISS(保持简单 - 智能)。

在实施类似于您在问题中提出的问题之前,请三思而后行。

答案 1 :(得分:2)

您最好的选择,恕我直言,正在使用脚本引擎并在数据库中存储脚本。

或者,您可以将代码放在dll中并将该dll放入数据库中。有一个代码用于将资源从资源加载到ram并对其进行处理,以便可以像使用LoadLibrary加载它一样使用它,例如in dzlib。我真的不知道是否适用于任何dll以及Windows的哪个版本,但它与我尝试的那些一样。