怎样动态生成ODBC数据源(用代码实现)还有:
    setlength(array_operator, recordcount);
    setlength(array_password, recordcount);
这两行代码是什么意思!!!!!!!!

解决方案 »

  1.   

    我用的是
    BDE的
    DATABASE
    QUERY连接数据源,怎样用代码动态生成ODBC数据源
      

  2.   

    你是不是想调用ODBC数据源,然后配置
      

  3.   

    动态生成ODBC数据源其实就是操作注册表,通过操作注册表键植就可以动态用程序建立数据源了
     setlength(array_operator, recordcount);
    setlength(array_password, recordcount);是设置动态数组的长度
      

  4.   

    就是设置注册表。下面是我写的一个函数。传入参数,注册SQL Server的数据源。sODBCName ODBC的名称
    sDBName 数据库名称(SQL Server)
    sMess ODBC的解释,可以为空
    sUser 连接数据库的用户名称
    bISClient 数据库是否在本地(在本地=false) 
    sServerName 数据库服务器的IP地址
    sPort 端口号(缺省为1433)unit HCPUB_ODBC;
    interface
    uses Windows, SysUtils;//创建一个ODBC连接
    function CreateODBCDSN(sODBCName, sDBName, sMess, sUser: string;
       bISClient: Boolean; sServerName: string = ''; sPort: string = '1433'): Boolean;implementationuses Registry;function CreateODBCDSN(sODBCName, sDBName, sMess, sUser: string;
       bISClient: Boolean; sServerName: string = ''; sPort: string = '1433'): Boolean;
    var
       RegF: TRegistry;
       mybuffer: pchar;
       mySyspath: string;
       myServerName: string;
       myServerNameVal: string;
    begin
       try //配置ODBC sODBCName为ODBC数据源名称
          RegF := TRegistry.Create;
          try
             RegF.RootKey := HKEY_LOCAL_MACHINE;
             begin
                RegF.OpenKey('SOFTWARE\ODBC\ODBC.INI\' + trim(sODBCName), true);
                RegF.Writestring('AnsiNPW', 'No');
                RegF.Writestring('Database', trim(sDBName));
                RegF.Writestring('Description', sMess);
                try //得到sqlsrv32.dll路径
                   mybuffer := allocmem(255);
                   mySyspath := string(mybuffer);
                   freemem(mybuffer);
                   mySyspath := mysyspath + '\sqlsrv32.dll';
                except
                   mySyspath := 'C:\WINDOWS\SYSTEM\sqlsrv32.dll';
                end;
                RegF.Writestring('Driver', mySyspath);
                RegF.Writestring('LastUser', trim(sUser));
                RegF.Writestring('QuotedId', 'No');
                if bISClient then
                begin
                   myServerName := trim(sServerName);
                end
                else
                begin
                   myServerName := '(local)';
                end;            RegF.Writestring('Server', myServerName);
                RegF.Closekey;
                RegF.OpenKey('SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources', true);
                RegF.Writestring(sODBCName, 'SQL Server');
                RegF.Closekey;
                RegF.OpenKey('SOFTWARE\microsoft\MSSQLServer\Client\ConnectTo', true);
                if bISClient then
                begin
                   myServerName := trim(sServerName);
                end
                else
                begin
                   myServerName := '.';
                end;            myServerNameVal := 'DBMSSOCN,' + myServerName + ',' + sPort;
                RegF.Writestring(myServerName, myServerNameVal);
             end;
          finally
             RegF.Closekey;
             RegF.Free;
             Result := true;
          end;
       except
          Result := false;
       end;
    end;end.