请不要叫我用ADO,ADO我已经用了,但总是要在ODBC里加个SQL SERVER 的DSN才能连通。
我在网上找到的都在ODBC里建ACCESS的例子,有建SQL SERVER的方法吗?
各位大侠请帮忙啊!

解决方案 »

  1.   

    1,ADO连接SQL SERVER是不用ODBC数据源的,连接字符串你建立的不对;
    2,动态建立数据源也有很多方法,如修改注册表,使用ODBC API等;
      

  2.   

    如outer2000(天外流星) 所讲,可以使用ADO就不用配置DSN
    当然,就用你现在的方法也可以,只需要动态修改注册表就可以了
    具体键:
    HKEY_CURRENT_USER\SoftWare\ODBC\ODBC.INI下,你可以先建立一个DSN看看,比较一下
      

  3.   

    Windows系统子目录中的动态链接库 Odbcinst.dll提供了一个可以动态地增加、修改和删除数据源的函数 SQLConfigDataSource()。该函数的原型如下: 
    BOOL SQLConfigDataSource(HWND hwndParent,WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes); 
      

  4.   

    看看MSDN上面有使用这个API例子
      

  5.   

    http://www.yesky.com/20010625/186771.shtml
    看看上面,问题一定解决;
      

  6.   

    1. 如何动态设置ODBC源  很多时候程序员需要自动生成ODBC数据源,而不是指导客户"打开控制面板… … ",到底如何去做呢?相信很多人会选择编程修改注册表来实现这项功能,因为ODBC的详细信息全部存放在注册表的下述键值内:   "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC"修改一下ODBC的配置,通过前后的注册表比较,你可以发现一定的规律。在这里我只是想说,哥们,别这么犯傻了(如果我让你写一个通用的ODBC源处理程序,你得累死),用这个Windows ODBC API函数吧,   function SQLConfigDataSource(hwndParent: Integer; fRequest: Integer;   lpszDriverString: String; lpszAttributes: String): Integer;   stdcall;external ''ODBCCP32.DLL'';  了解数据库编程的朋友都知道,数据库的访问方式不论DAO、ADO、ODBC或是BDE或是其它第三方的数据库连接控件,归根结底,都是一些个函数集,只要你愿意,你可以编写出自己的数据库访问方式用以替代。深入研究这些底层函数,很多时候会为你提供相当地便利。   SQLConfigDataSource这个函数MSDN有详细的说明,我不想整段翻译下来让你扁我,我只是结合流行的SQL Server谈谈如何有技巧的调用该函数。其它的数据库大同小异。   SQLConfigDataSource(0, ODBC_ADD_SYS_DSN,''SQL Server'', 
      ''DSN=Record_ODBC''+ chr(0) + 
      ''Server=(local)''+ chr(0) + 
      ''Database=master''+ chr(0) + 
      ''Description=DragonPC SQLServer ODBC Source''+ chr(0));    
      这是我的Delphi程序中调用该函数的一个实例,第一个参数是父窗口句柄,设置为0则该函数不显示任何对话框。第二个参数是操作类型,你需要定义如下的操作类型常量: Const
      ODBC_ADD_DSN = 1; // Add a new user data source.
      ODBC_CONFIG_DSN = 2; // Configure (modify) an existing user data source.
      ODBC_REMOVE_DSN = 3; // Remove an existing user data source.
      ODBC_ADD_SYS_DSN = 4; // Add a new system data source.
      ODBC_CONFIG_SYS_DSN = 5; // Modify an existing system data source.
      ODBC_REMOVE_SYS_DSN = 6; // Remove an existing system data source.
     
      从名字我们知道,要添加ODBC源,我们需要调用的是ODBC_ADD_SYS_DSN 或是ODBC_ADD_DSN参数。第三个参数也没有什么好说的,我们添加的是SQL Server数据库的ODBC源,所以填入''SQL Server''参数,如果需要建立Excel文件的ODBC数据源,我们可以填入''Excel Files (*.xls)'',这些字符串参数相信各位同志在添加ODBC源时,已经多次见过。  关键的是第三个参数的设置,不同的数据库类型所支持的关键字是不一样的,这里仅仅就SQL Server所支持的关键字作一个简单说明:  DSN:你的ODBC数据源名称。  Server:你的数据库服务器名称,使用(local)指的是本地计算机安装的数据库。注:最新的SQL Server 2000支持一台计算机运行多个SQL Server服务,这个时候你需要指定SqlSever的InstanceName。  Address:指定SQL Server服务器的网络IP地址。  Database:指定默认数据库名称。  Language:指定默认语言。  Description:备注信息。  详细的参数和信息可以查阅微软网站的以下网址。  http://msdn.microsoft.com/library/psdk/dasdk/odch3kit.htm  http://msdn.microsoft.com/library/psdk/sql/od_odbc_c_99yd.htm
      

  7.   

    如果用 ADO 用连接字符串,如果用 BDE,使用 TDataBase.Params 来设置。
      

  8.   

    那怎么判断ODBC里已有这个DSN?
      

  9.   

    给你一个我原来写的配置程序
    不需要判断有没有这个驱动程序,这个驱动程序win2000自带的
    ConfigSqlServerDNS('test','rcserver','master'); //使用
    function ConfigSqlServerDNS(
                                AODBCName: string;
                                ASqlServerName: string;
                                ADataBaseName: string;
                                const UserName: string='sa';
                                const ADescription: string = 'DNS'
                                ):Boolean;const  Install_Path = 'SOFTWARE\ODBC\ODBC.INI\';
      DataBase_Source_Path = '\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources\';
      SqlODBC_Install_Path =  '\SOFTWARE\ODBC\ODBCINST.INI\SQL Server\';
      Description = 'MySQL ODBC 3.51 Driver';
      DriverName = 'myodbc3.dll';
     
    var
      reg: TRegistry;
      bData : array[ 0..0 ] of byte;
      DrvPath : string;
      SystemDir : pchar;
    begin
      result := false;
      reg := TRegistry.Create;
      reg.RootKey := HKEY_LOCAL_MACHINE;
      getmem(SystemDir,MAX_PATH);
      GetSystemDirectory(SystemDir,MAX_PATH);
       if reg.OpenKey(Install_Path+AODBCName,True) then
        begin
          reg.writestring('Database',ADataBaseName);
          reg.writestring('Driver','sqlsrv32.dll');
          reg.writestring('Server',ASqlServerName);
          reg.writestring('Description',ADescription);
          reg.writestring('LastUser',username);
        end;
        if  reg.OpenKey(DataBase_Source_Path,false) then
        begin
          reg.writestring(AODBCName,'SQL Server');
          result := True;
        end
        else
          result := false;
        reg.closekey;
        reg.free;
      freemem(SystemDir);
    end;