不知道哪里有问题,运行的时候提示数据源没有
手工建后能用,说明是我这个自动注册有问题哪位高手帮忙看下,谢谢
//声明一个自定义函数,注册ODBC数据源
    function  RegisterODBC(DSN:string):Boolean;//自定义函数:实现SQLServer数据源的ODBC注册
function  TFormMain.RegisterODBC(DSN:string):Boolean;
var
Reg : TRegistry;  //注册表类,用来操作注册表, 需要添加Registry单元
Dir : PChar;      //保存系统目录
SysDir: string;   //保存系统目录
begin
  //初始化注册表类
  Reg:=TRegistry.Create();
  //指定根键
  Reg.RootKey:=HKEY_LOCAL_MACHINE;
  //注册DSN名称(参数True表示当该键值不存在时,则创建它)
  if(Reg.OpenKey('software\odbc\odbc.ini\odbc data sources',
     true)) then
     Reg.WriteString(DSN,'SQL Server')
  else
  begin
    //显示提示信息
    Application.MessageBox('ODBC注册失败。','错误',
                            MB_OK OR MB_ICONERROR);
    //函数返回false(函数名赋值为False)
    RegisterODBC:=false;
  end;
  //关闭注册类
  Reg.CloseKey();  //注册ODBC的数据源(参数True表示当该键值不存在时,则创建它)
  if(Reg.OpenKey('Software\odbc\odbc.ini\'+DSN,true)=true) then
  begin
    //为Dir变量申请255个字符的空间
    GetMem(Dir,255);
    //获取Windows的系统目录
    GetWindowsDirectory(Dir,255);
    SysDir:=Dir+'\system32\SQLSRV32.dll';
    //写入注册表
    Reg.WriteString('Driver',SysDir);
  end
  else
  begin
    //显示提示信息
    Application.MessageBox('ODBC注册失败。','错误',
                            MB_OK OR MB_ICONERROR);
    //函数返回false(函数名赋值为False)
    RegisterODBC:=false;
  end;
  //关闭注册类
  Reg.CloseKey();  //函数返回True(函数名赋值为True)
  RegisterODBC:=True;
end;
//然后在onshow事件里调用
procedure TFormMain.FormShow(Sender: TObject);
begin
  RegisterODBC('hotel');
end;