`

怎么使用sql弹出框

 
阅读更多

转载 http://wglnngt-001.blog.163.com/blog/static/4077058420091114114652911/

How to use SQL Dialogs without Scripts  

Because so many people have problems with InstallShieldX using SQL Dialogs, I thought I might make this brief tutorial so users can get up and running without reading several hundred posts online. This tutorial can be used for InstallScript MSI Projects, but it may also help for InstallScript only Projects as well. 
First, I'd like to note that you should download the attached ZIP file which contains updated SQLRT.dll and ISSQLSRV.dll files. No, I did not create these, they were given to me from InstallShield as a fix that is not included in SP1 for InstallShieldX. They update a couple of Issues with InstallShieldX and ADO (such as timeouts, etc.). Also included is the updated SQLCONV.h file. The included zip file contains a Batch file which I created to help in putting these files in the correct location. You can run this batch file which will first backup your existing DLLs before overwriting them. 
  1. Add the (.obl) Libraries On the Build menu, click on Settings. On the Compile/Link tab, add the following (.obl) Libraries (seperated by commas) if they do not exist: 
  2. <ISProductFolder>\Script\SQLRuntime\Lib\SQLRT.obl 
  3. <ISProductFolder>\Script\SQLRuntime\Lib\SQLCONV.obl
  • Add the required DLLs to the Binary Table Now, go to the Direct Editor and find the Binary table. Here we need to add the SQL DLLs that normally get included automatically when adding Scripts to an InstallShield Project. Add a new Item in the Binary table (where it says "Click here to add a new Item"). Add the Following information: 
  • For the 1st Item, enter the Name as ISSQLSRV.DLL. Now, when you click in the Data column, a dialog will popup asking what to do with the data. You want the Read binary from filename option. Click Browse and browse to <ProgramFiles>\InstallShieldX\Redist\Language Independent\i386\ISSQLSrv.dll. Next Click Open then Ok and the DLL will be added to the Binary table. 
  • For the 2nd Item, enter the Name as SQLRT.DLL. For the Data, browse to <ProgramFiles>\InstallShieldX\Redist\Compressed Files\Language Independent\Intel 32\SQLRT.dll.
  • Modify the "SQLConv.h" Header File NOTE: All script / header files talked about are located in <ProgramFiles>\InstallShieldX\Script.

This was something I ended up finding on my own. There seems to be a bug in the ifx.h header file. In order to actually use the SQL Runtime from InstallShield without scripts, you need to invoke a call to SQLRTInitialize(). This function is located in the SQLRT.h header file. No big deal you say, just include that file in the Setup.rul! It's not that easy. You see, there are two ifx.h files: one is loacted in the .\Script\Ifx\Include and the other in .\Script\Iswi\Include\. Which one your Script is linked to depends on the (.obl) file paths in Step 1. 
In the case with InstallScript MSI Projects, the Ifx.h file is linked from the .\Script\Iswi\Include\ directory. If we open that Ifx.h file, we can see that InstallShield tried to "think" for us and they included the SQLCONV.h (this line: #include "..\..\SQLRuntime\Include\SQLConv.h") file automatically. Why is this bad you ask? Well, we need to include the SQLRT.h file, but if you look in both that file and the SQLCONV.h file, you will see that they both define this function: external prototype LIST SQLRTGetServers( byval BOOL );! So, if you were to include the SQLRT.h file in your scripts at this point, you would get the following error trying to compile: 'SQLRTGetServers' : identifier already defined
So how do we get around this? Well, we only need the SQLRTInitialize() function and since both the SQLRT.h and the SQLCONV.h both use the SQLRT.dll functions, we just need to modify the SQLCONV.h file to include that function! So, here it is, what you've been waiting for... 
  • Add this line to the SQLCONV.h file: external prototype void SQLRTInitialize( byval string );. It doesn't really matter where, but I put it just above the other SQL functions.
  • Modify the "OnSQLLogin()" Function Well, here it is, the last step. We need to modify the OnSQLLogin function. Why? Well, this function displays the SQLLogin Dialog. But it does more than that, it extracts the DLLs from the Binary table and loads them into memory. Now, I give InstallShield credit for initially writing this script, but lets face it, they're not the best at writing concise code ! Please keep in mind that you could write your own functions to extract the DLLs once and then call multiple SQL Dialogs, but I am just trying to keep this simple for now.

Code: 
//--------------------------------------------------------------------------- 
// OnSQLLogin 
//--------------------------------------------------------------------------- 
function number OnSQLLogin( nReturn ) 
string sDLL, sMessage; 
string sHidden[MAX_PATH]; 
string sServer[MAX_PATH], sUser[MAX_PATH], sPassword[MAX_PATH], sAuth[10], sDB[MAX_PATH], sTemp[MAX_PATH]; 
number nResult, nSize, nRetVal; 
BOOL   bWinAuth, bDoneLogin; 
begin 
// Extract SQL Runtime dlls 
sDLL = SUPPORTDIR ^ "ISSQLSRV.DLL"; 
nResult = StreamFileFromBinary(  ISMSI_HANDLE, "ISSQLSRV.DLL", sDLL ); 
if (nResult = -1) then 
MessageBox("The \"ISSQLSRV.dll\" could not be extracted from the Binary Table.", SEVERE); 
abort; 
endif; 
UseDLL( sDLL ); 
sDLL = SUPPORTDIR ^ "SQLRT.DLL"; 
nResult = StreamFileFromBinary(ISMSI_HANDLE, "SQLRT.DLL", sDLL); 
if (nResult = -1) then 
    MessageBox("The \"SQLRT.DLL\" could not be extracted from the Binary Table.", SEVERE); 
    abort; 
endif; 
UseDLL( sDLL ); 
     
SQLRTInitialize(""); 
// Add the Password property as a Hidden property so no passwords accidentally get logged. 
nSize = MAX_PATH; MsiGetProperty( ISMSI_HANDLE, "MsiHiddenProperties", sHidden, nSize ); 
if (StrLength(sHidden) > 0) then sHidden = sHidden + ";"; endif; 
sHidden = sHidden + "IS_SQLSERVER_PASSWORD"; 
MsiSetProperty( ISMSI_HANDLE, "MsiHiddenProperties", sHidden ); 

// Get Default properties 
nSize = MAX_PATH; MsiGetProperty( ISMSI_HANDLE, "IS_SQLSERVER_SERVER", sServer, nSize ); 
nSize = MAX_PATH; MsiGetProperty( ISMSI_HANDLE, "IS_SQLSERVER_DATABASE", sDB, nSize ); 
nSize = MAX_PATH; MsiGetProperty( ISMSI_HANDLE, "IS_SQLSERVER_USERNAME", sUser, nSize ); 
nSize = MAX_PATH; MsiGetProperty( ISMSI_HANDLE, "IS_SQLSERVER_PASSWORD", sPassword, nSize ); 
nSize = 10; MsiGetProperty( ISMSI_HANDLE, "IS_SQLSERVER_AUTHENTICATION", sAuth, nSize ); 
if (sAuth = "1") then 
bWinAuth = FALSE; 
else 
bWinAuth = TRUE; 
endif; 

bDoneLogin = FALSE; 
while( !bDoneLogin ) 
// Show login dialog 
nReturn = SQLServerSelectLogin( sServer, sUser, sPassword, bWinAuth ); 
if (nReturn = BACK) then 
// BACK was clicked, so we don't even try 
bDoneLogin = TRUE; 

elseif (nReturn = NEXT) then 
// Validate Connection 
MsiSetProperty( ISMSI_HANDLE, "IS_SQLSERVER_SERVER", sServer ); 
MsiSetProperty( ISMSI_HANDLE, "IS_SQLSERVER_USERNAME", sUser ); 
MsiSetProperty( ISMSI_HANDLE, "IS_SQLSERVER_PASSWORD", sPassword ); 
if (bWinAuth = TRUE) then 
sAuth = "0"; 
else 
sAuth = "1"; 
endif; 
MsiSetProperty( ISMSI_HANDLE, "IS_SQLSERVER_AUTHENTICATION", sAuth ); 
MsiSetProperty( ISMSI_HANDLE, "IS_SQLSERVER_CA_SILENT", "0" ); 
nRetVal = SQLRTServerValidate( ISMSI_HANDLE ); 
           
nSize = MAX_PATH; MsiGetProperty( ISMSI_HANDLE, "IS_SQLSERVER_STATUS", sTemp, nSize ); 
if( sTemp != "0" ) then 
nSize = _MAX_PATH; MsiGetProperty( ISMSI_HANDLE, "IS_SQLSERVER_STATUS_ERROR", sMessage, nSize ); 
if (nSize = 0) then sMessage = SdLoadString( IDS_IFX_SQL_ERROR_LOGIN_FAILED ); endif; 
MessageBox( sMessage, MB_OK ); 
else 
// Validation Successful 
bDoneLogin = TRUE; 
endif; 
else 
        MessageBox("General Errors Occured showing the SQL Server Login Dialog.", SEVERE); 
        abort; 
endif; 
endwhile; 
return nReturn; 
end; 


Well, I think that's it. I tried to get everything in here as concise and informative as possible. If anyone has problems with this, let me know!
分享到:
评论

相关推荐

    百度弹出登陆框

    弹出登录框(通常称为模态窗口或对话框)是在用户浏览网页或使用应用时,突然出现在当前页面中央的一个小窗口,要求用户提供登录信息。这种设计可以使用户保持在当前浏览的页面上,而无需跳转到单独的登录页面,从而...

    使用sql server Profiler监听应用程序执行的sql

    然后,设定好数据源后,弹出“跟踪属性”框,在“事件选择”tab 里,可以去掉第 1、2、3、5 项前的复选框进行过滤事件。例如,可以选择只监控某个特定的数据库或某个特定的主机。 在“列筛选器”按钮进一步对结果...

    类似51job 职能搜索弹出框,已解决

    在IT行业中,构建类似51job的职能搜索弹出框是一项常见的需求,它涉及到前端界面交互和后端数据处理。这个场景中,开发者通过JavaScript实现了一个动态生成的弹出div,用于展示从数据库检索到的职能类型数据。下面将...

    SqlBuild使用说明

    用户可以使用鼠标拖动表或字段到右边的编辑框中,然后选择生成 SQL 文的 Select 部分和 Where 部分,最后点击“Get JAVA Source”按钮生成 JAVA 代码。 三、生成复杂的 SQL 文 SqlBuild 不仅可以生成简单的 SQL 文...

    SQLPrompt5.3破解

    6,复制SQLPrompt Keygen 5.3.x显示的序列号,粘贴到刚才弹出的对话框中,点击Activate,因为是断网的,系统会要求离线激活。 7,然后在新弹出的对话框中,将右侧那一堆代码复制出来,粘贴到注册机的上面框中,这时...

    sqldbx使用方法

    启动SqlDbx后,系统会自动弹出服务器登录对话框。在此处选择正确的服务器类型,输入服务器名称、数据库名、用户名和密码,然后点击“登录”按钮。如果服务器存在并且客户端软件安装正确,将会打开一个新的SQL编辑器...

    酷炫特效弹出登陆框网页特效

    在网页设计中,"酷炫特效弹出登陆框"是一个重要的元素,它为用户提供了一种交互式的登录体验,能够吸引用户的注意力并提升网站的整体用户体验。本文将深入探讨这个主题,介绍如何实现这样的特效以及它在网页设计中的...

    10多种样式的Vb弹出提示对话框【荐】

    在提供的压缩包"vb+SQL\源码实例下载\10多种样式的Vb弹出提示对话框【荐】.rar"中,可能包含了各种自定义对话框的源代码和使用示例。通过研究这些代码,开发者可以学习到如何设计和实现具有不同功能和样式的对话框,...

    实用的js弹出登陆框代码

    在JavaScript(JS)中,创建一个实用的登录弹出框是一种常见的需求,特别是在网页交互设计中。本资源提供了一个简单的登录对话框实现,方便开发者快速集成到自己的项目中。下面我们将详细探讨JavaScript弹出登录框的...

    Eclipse插件系列——SQLExplorer插件的安装和使用

    2. **搜索SQLExplorer**:在Marketplace的搜索框中输入“SQLExplorer”,找到相应的插件并点击"Install"按钮开始安装。 3. **接受协议**:阅读并接受安装协议,然后点击"Next"。 4. **确认依赖**:检查安装过程中...

    PowerDesigner导出的SQL带列注释,导入到MySQL中列注释不见了的处理方法

    解决这个问题的方法是,使用记事本打开 SQL 文件,选择另存为,在另存为弹出框中选择另存文件的编码格式为 UTF-8,這樣就可以保留中文注释。然后,再将另存的 SQL 文件导入到数据库中,注释就会显示正常了。 在 ...

    SQL Prompt 5.3.8 支持vs2012 sql2012

    6,复制SQLPrompt Keygen 5.3.x显示的序列号,粘贴到刚才弹出的对话框中,点击Activate,因为是断网的,系统会要求离线激活。 7,然后在新弹出的对话框中,将右侧那一堆代码复制出来,粘贴到注册机的上面框中,这时...

    怎样在VS2008自带的SQl2005里使用sql server身份验证

    3. 在弹出的服务器属性窗口中,找到“安全性”页签,然后在身份验证选项中,选择“SQL Server和Windows身份验证模式”。 4. 点击“确定”后,系统可能会提示你重新启动SQL Server服务以使更改生效。按照提示操作即可...

    mfc开机启动之后定时查询sql server数据库,弹出信息

    6. **弹出信息**:在MFC中,可以使用`AfxMessageBox`函数弹出消息框,显示查询结果或其他相关信息给用户。 7. **VS2010**:Visual Studio 2010是开发环境,用于编写和调试MFC应用程序。它提供了集成开发环境(IDE)...

    SQL Server 2005 启用远程连接

    勾选“本地连接和远程连接”复选框,并选择适用于当前环境的协议(通常使用TCP/IP协议)。点击“应用”按钮。此时系统会提示,在数据库引擎服务重启后,对连接设置所做的更改才会生效。 #### 二、启用SQL Server ...

    搜索框(弹出动效)

    而“搜索框(弹出动效)”则是在这个基础功能上加入了交互设计元素,旨在提升用户体验。这种设计通常用于移动应用或网页,通过点击特定按钮来触发搜索框的弹出与关闭,以更直观、动态的方式呈现。 首先,我们来看...

    sql sqlserver2005数据库收缩功能使用

    - 在弹出的对话框中,可以选择收缩的类型(即“文件”或“数据库”),并设置收缩的目标大小。 2. **自动收缩**: - 右键点击数据库,选择“属性”,然后切换到“选项”页面。 - 在“自动收缩”选项下,勾选...

    MS SQL sql语句自动格式化工具

    6,复制SQLPrompt Keygen 5.3.x显示的序列号,粘贴到刚才弹出的对话框中,点击Activate,因为是断网的,系统会要求离线激活。 7,然后在新弹出的对话框中,将右侧那一堆代码复制出来,粘贴到注册机的上面框中,这时...

    弹出 类似MSN消息框

    标题中的“弹出类似MSN消息框”指的是在应用程序中创建一个类似于早期即时通讯软件MSN Messenger的通知或对话框。MSN Messenger曾经广泛使用,它的消息框设计简洁、直观,用于提示用户接收新消息或其他交互式通知。...

Global site tag (gtag.js) - Google Analytics