我正在维护一个旧的VB6应用程序,并希望直接在项目的一部分中包含SQL脚本。然后,VB6应用程序应该提取该脚本的文本并在服务器上执行它。
这种方法的原因各不相同 - 除其他外,我们希望只提供更新的可执行文件而不是完整的更新/安装包。因此,SQL脚本需要像资源文件一样编译到应用程序中。而且,显然,必须能够从代码中获取内容,以便将其发送到数据库服务器。
有没有人有这么好的方法呢?
答案 0 :(得分:5)
最简单的解决方案是创建一个VB模块,脚本为字符串。
如果您想使用资源文件,也可以这样做。您可以将resfile与VB项目相关联(我不记得如何在VB IDE中直接执行此操作,但VBP文件支持ResFile32 parameter)。
编辑:这里的问题似乎主要是关于格式化 - 您不希望将SQL查询存储为一个长字符串,但在VB内部很好地格式化查询是繁琐的,因为您必须添加引号,添加字符串连接运营商加入线路等等。我建议将SQL放在一个文本文件中,然后以您喜欢的方式对其进行格式化。编写一个脚本来获取文本并将其转换为VB模块。修改构建过程以在编译应用程序之前始终首先应用此脚本。
对于脚本,请使用您喜欢的脚本语言;如果你没有喜欢的脚本语言,这是一个很容易的任务,你可以用VB,C#或任何其他语言来完成。如果是我,我可能会使用awk(gawk)或Python。
答案 1 :(得分:2)
如果要使用资源(.RES)存储SQL,请转到菜单:
加载项>加载项管理器...
并选择 VB 6资源编辑器。配置要加载的加载项并在启动时加载。
从编辑器加载项中,VB提供了一个简单的界面来添加资源字符串。您将使用提供的常量值来引用这些值。要在运行时加载字符串,请使用 LoadResString 函数:
Public Const SQL_INSERT As Integer = 101
Dim strSQL As String
strSQL = LoadResString(SQL_INSERT)
(将“101”替换为您要加载的字符串的常量值)
答案 2 :(得分:0)
对你的方法再考虑一下。因为我发现自己在为客户调整程序的行为或UI时,我可能正处于未准备好或尚未经过测试和批准的变更中。因此,如果我有不时更改的属性,但我想保持对我们的ftp服务器的连接设置的控制,我将创建一个资源只显示我的属性的dll并使用dll中的资源文件来提供值。当我的网络管理员在ftp服务器上更改某些内容时,我更改了资源管理器中的字符串,重新编译dll并仅释放更新的dll。我相信还有更多的解决方案,但这就是我的方法。如果您认为在更改exe的同时不必更改SQL脚本,这可能只会使您的工作复杂化。它对我来说已经足够好了,现在这对我来说非常标准。