不知道哪里有问题,运行的时候提示数据源没有
手工建后能用,说明是我这个自动注册有问题哪位高手帮忙看下,谢谢
//声明一个自定义函数,注册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;
手工建后能用,说明是我这个自动注册有问题哪位高手帮忙看下,谢谢
//声明一个自定义函数,注册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;
解决方案 »
- 我的乐土你在哪里?
- 通过'project/import type library'引用dll文件的时候报"加载类型库/DLL 时出错"
- 问题急!!
- 有没有详细的如何使DELPHI和SQLSERVER2000的开发?
- 怎么用xml实现本地查找网络的功能?
- access数据库的局域网连接 (与操作系统有关)
- 怎么知道键盘上所有键的ASCII码值?
- 我的客户程序跟sql2000server保持常连接还是连接取完数据后就断开?
- 怎么建立多个程序快捷方式
- 关于返回CheckBox的选项,有什么简化的方法吗?
- 怎么让一个窗口始终在依附在另一个进程的一个窗口前面?
- TListView使用vslist数据无法完整显示
你可以去搜一下,网上有大把代码
ADO已经很好用了,直接使用服务名或IP即可,不建议使用ODBC