想在安装的时候把在ODBC32中添加一个新的数据源,如何实现?谢谢!

解决方案 »

  1.   

    为什么要在installshield里实现,直接在程序用代码添加ODBC数据源??
      

  2.   

    在installshield里的向导里你慢慢找一下,有一步是可以选择ODBC数据源的,现在电脑上没有装,具体的步骤记不清了。
      

  3.   

    http://www.infoxa.com/asp/book/xxnr.asp?id=461有个InstallShield简明使用教程,下来自己看看
      

  4.   

    用户可以编写程序,所编程序要符合InstallShield的语法要求。用户所编程序只需在适当的位置添加即可,因为InstallShield会在工程向导后自动生成程序,并为用户编程留下入口。本例的源程序如下所示://程序代码一所在的位置 // string defines 
    #define UNINST_LOGFILE_NAME "Uninst.isu"
    // installation declarations 
    //程序代码一
    //定义用户注册信息的各级分支,这些参数由函数InstallationInfo调用
    #define COMPANY_NAME "ODBC"
    #define PRODUCT_NAME "ODBC.INI"
    #define PRODUCT_VERSION "pb70"
    #define PRODUCT_VERSION_NEW "pb7_pipe"
    #define PRODUCT_KEY "dbeng6.exe"
    #define DEINSTALL_KEY "pb670_DeinstKey"
    #define UNINSTALL_NAME "pb70_uninstname"
    #define DEFAULT_LOG_PATH "pb70"
    //程序代码二所在的位置 
    // global variables 
    // generated
    BOOL bWinNT,bIsShellExplorer,bInstall,Aborted, bIs32BitSetup;
    STRING svDir;
    STRING svName,svCompany, svSerial;
    STRING svDefGroup;
    STRING szAppPath;
    STRING svSetupType;
    // your global variables
    //程序代码二//定义用户应用所连数据源的各项信息参数
    // szStrName1,szStrValue1分别代表注册表中的键值
    //名和键值,其他类似
    STRING szStrName1, szStrValue1,svLogFile;
    STRING szStrName2, szStrValue2;
    STRING szStrName3, szStrValue3;
    STRING szStrName4, szStrValue4;
    STRING szStrName5, szStrValue5;
    STRING szStrName6, szStrValue6;
    STRING szStrName7, szStrValue7;
    STRING szStrName8, szStrValue8;
    NUMBER nvSize, nvType;
    //程序代码三所在的位置 
    //Function: SetupRegistry 
    //Purpose:This functition makes the registry entries for this setup.
    function SetupRegistry()
    begin//程序代码三//给前面定义的参数赋值,这些值是数据源中的要注册的内容
    szStrName1 = "Agent";
    szStrValue1 = "engine";
    szStrName2 = "AutoStop";
    szStrValue2 = "Yes";
    szStrName3 = "DatabaseFile";
    szStrValue3 = TARGETDIR ^'program'^'pb70.db';
    szStrName4 = "DatabaseName";
    szStrValue4 = "pb70";
    szStrName5 = "Driver";
    szStrValue5 = TARGETDIR ^'Program'^'dbodbc6.dll';
    szStrName6 = "PWD";
    szStrValue6 = "sql";
    szStrName7 = "Start";
    szStrValue7 = TARGETDIR ^'Program'^'dbeng6.exe -c 8m';
    szStrName8 = "UID";
    szStrValue8 = "dba";
    //设置缺省的注册表入口
    RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
    //生成用户应用注册信息的各级分支
    InstallationInfo(COMPANY_NAME,PRODUCT_NAME,
    PRODUCT_VERSION, PRODUCT_KEY);
    DeinstallStart(DEFAULT_LOG_PATH,svLogFile,&
    DEINSTALL_KEY, 0);
    //向用户所创建的注册分支中,添加数据源的键值名和键值
    RegDBSetAppInfo(szStrName1,REGDB_STRING,szStrValue1, -1);
    RegDBSetAppInfo(szStrName2, REGDB_STRING,szStrValue2, -1);
    RegDBSetAppInfo(szStrName3, REGDB_STRING,szStrValue3, -1);
    RegDBSetAppInfo(szStrName4, REGDB_STRING,szStrValue4, -1);
    RegDBSetAppInfo(szStrName5, REGDB_STRING,szStrValue5, -1);
    RegDBSetAppInfo(szStrName6, REGDB_STRING,szStrValue6, -1);
    RegDBSetAppInfo(szStrName7, REGDB_STRING,szStrValue7, -1);
    RegDBSetAppInfo(szStrName8, REGDB_STRING,szStrValue8, -1);
    return 0;
    end;用同样的方法可实现数据源pb7_pipe的注册。为说明以上程序的作用,下面给出安装盘安装后注册表所发生的结果。如下图所示: 建立磁盘映像
      在完成以上四步后,应先编译;在编译通过后,利用向导可方便的建立磁盘映像。
    编译的步骤如下:
      单击工具条中的  图标,系统将对当前工程对象进行编译。
    编译完成后,在状态显示窗口中显示编译的结果。如下图所示:
      只有编译成功后,才可建立磁盘映像。若发生错误,应先排除错误后才可建立磁盘映像。
      

  5.   

    关于InstallShield注册数据库的问题看看下面的代码(InstallShield脚本语言)
    2. 通过注册表配置ODBC  除了前面ODBC-DAO-RDO的安装模板可以进行ODBC数据源的设置外,直接操作注册表也能达到同样效果。  例如下面的过程是利用MFC Template制作VC6.0数据库应用程序的安装项目(条件同前):  (1) 启动InstallShield 5.5;
      (2) 单击"New"工具按钮或选择"File"->"New"菜单命令,弹出相应的对话框,切换到"Template"页面,选定"MFC Template",单击[确定]按钮后,IntallShield就会自动为用户创建一个名为"MFC Template"的安装项目;
      (3) 切换到"File Groups" 页面,展开"Program Files"项,选定"Static File Links",删除右边窗口中的所有文件,并右击鼠标,从弹出的快捷菜单中选择"Insert Files"命令,将数据库文件"student.mdb"和VC6.0应用程序(Release版)"Ex_ODBC.exe"调入;
      (4) 切换到"Resource"页面,展开"Explorer Shell"的所有子项,选定"App",将其"Target"属性改为"\Ex_ODBC.exe"。
      (5) 切换到"Scripts"页面,打开"setup.rul"脚本文件,在
       prototype CheckRequirements ();
       语句的下一行添加下列语句:
       prototype SetupRegistry();
      (6) 在脚本文件的后面添加该自定义函数代码:  function SetupRegistry()
       NUMBER nResult;
       STRING szPath, szKeyName;
       begin
        RegDBSetDefaultRoot ( HKEY_CURRENT_USER );
        szKeyName = "Software\\ODBC\\ODBC.INI\\我的数据库";
        if(RegDBKeyExist(szKeyName)<0) then
         RegDBCreateKeyEx (szKeyName,"");
        else
         RegDBDeleteKey (szKeyName);
         RegDBCreateKeyEx (szKeyName,"");
        endif;
       szKeyName = "Software\\ODBC\\ODBC.INI\\ODBC Data Sources";
       if(RegDBKeyExist(szKeyName)<0) then
        RegDBCreateKeyEx (szKeyName,"");
       endif;
       RegDBSetKeyValueEx ( szKeyName, "我的数据库" , REGDB_STRING ,"Microsoft Access Driver (*.mdb)" , -1);
      szPath = TARGETDIR^"student.mdb";
      szKeyName = "Software\\ODBC\\ODBC.INI\\我的数据库";
      RegDBSetKeyValueEx ( szKeyName, "DBQ" , REGDB_STRING , szPath , -1);
      RegDBSetKeyValueEx ( szKeyName, "Description" , REGDB_STRING , "用于VC++的数据源" , -1);
      RegDBSetKeyValueEx ( szKeyName, "Driver" , REGDB_STRING , WINSYSDIR+"\odbcjt32.DLL" , -1);
      RegDBSetKeyValueEx ( szKeyName, "DriverID" , REGDB_NUMBER , "25" , -1);
      RegDBSetKeyValueEx ( szKeyName, "SafeTransactions" , REGDB_NUMBER ,"0" , -1);
      RegDBSetKeyValueEx ( szKeyName, "UID" , REGDB_STRING ,"" , -1);
      RegDBCreateKeyEx ("Software\\ODBC\\ODBC.INI\\我的数据库\\Engines","");
      RegDBCreateKeyEx ("Software\\ODBC\\ODBC.INI\\我的数据库\\Engines\\Jet","");
      szKeyName = "Software\\ODBC\\ODBC.INI\\我的数据库\\Engines\\Jet";
      RegDBSetKeyValueEx ( szKeyName, "Driver" , REGDB_STRING , WINSYSDIR+"\odbcjt32.DLL" , -1);
      RegDBSetKeyValueEx ( szKeyName, "ImplicitCommitSync" , REGDB_STRING , "" , -1);
      RegDBSetKeyValueEx ( szKeyName, "Threads" , REGDB_NUMBER , "3" , -1);
      RegDBSetKeyValueEx ( szKeyName, "UserCommitSync" , REGDB_STRING , "Yes" , -1);
     end;  (7)将项目工作区窗口切换到Media页面,单击Media Build Wizard项,创建新的媒介。
      (8)编译并运行InstallShield for VC版在VC的安装盘上就有