怎样通过程序修改ODBC中默认的网络协议?又是一个难题! 因为win98中默认的网络协议是命名管道,不是TCP/IP协议,我想知道修改的方法,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 想把默认协议改成TCP/IP,在程序中改,不是通过ODBC设置 修改註冊表而已參考:http://www.ccw.com.cn/htm/app/aprog/01_3_1_6.asp注册表(Registry)是一个由 Windows 维护的数据库,保存了有关操作系统、所有 Windows 应用程序、ActiveX 控件、OLE 和可选组件(如ODBC)的配置信息。对Windows程序员来说,注册表算得上一个大宝藏。 注册表可以通过注册表编辑器(开始®运行regedit)进行添加、修改、删除及注册表文件的导入导出等一系列操作。一般的软件都会向注册表中写东西,但要想知道具体内容也不是一件轻而易举的事。以前有人报道过利用命令fc来实现注册表文件的比较。具体方法是首先导出一个注册表文件reg1.reg,当进行一些操作(如装入一个新软件,或修改了某些设置)后再导出另一个注册表文件reg2.reg,在DOS下执行fc d:\ reg1.reg d:\ reg2.reg > d:\ reg3.txt命令,即可从reg3.txt中将注册表的变化轻松暴露出来。该方法比较实用,但美中不足的是在MS—DOS方式下,执行此命令没有问题,但在开始菜单的运行命令中执行此命令时,MS—DOS提示“太多的文件名(FC: too many filenames)”,即在此种情况下,无法将比较结果重定向到文件中。对该命令进行修改,在其前加上command或command.com命令,带参数/c或/k,即为Command /k fc d:\ reg1.reg d:\ reg2.reg > d:\ reg3.txt或Command /c fc d:\ reg1.reg d:\ reg2.reg > d:\ reg3.txt,前一命令表示执行完该命令后保留MS—DOS窗口,等待下一个命令执行,而后一个命令则表示执行完该命令后关闭MS—DOS窗口。采用这种方式的命令会使你更加得心应手,而且可将此方法应用到别的MS—DOS命令上。当然你还可以用API函数WinExec、ShellExecute将其包装起来,便于使用。 利用此种方法可以很容易的得到你想知道的注册表内容,为你的Windows应用助一臂之力,下面举一个实例说明。笔者在开发一套管理信息系统时,以Win98作为开发环境,采用Delphi 5和SQL Server 7桌面版作为开发语言,以ODBC (开放式数据库连接)数据源进行连接。该方式可运行在NT环境,也可跑于Win98对等网中,前者性能稳定,后者价格便宜,具体配置随用户需求而定。 大家知道,ODBC是数据库服务器的一个标准协议,它向访问网络数据库的 Windows 应用程序提供了一种通用的语言。您可以对多种数据库安装 ODBC 驱动程序,用来连接数据库并访问它们的数据。ODBC 驱动程序管理器使用的 ODBC 驱动程序允许访问 SQL 服务器以及其它几个数据源,包括正文文件和 Microsoft Excel 电子数据表。Borland的Delphi是广大程序员钟爱的一种编程语言,它为数据库编程提供了专门的接口BDE(Borland Database Enginge),由于ODBC的广泛应用,Delphi对ODBC数据源也提供了很好的支持。ODBC具有很大的灵活性,作为一个商用系统,不能让用户自己去手工配置ODBC,这对很多人来说,有一定难度。因此系统中附加了一个应用程序,在该程序中直接写注册表来配置ODBC数据源。 具体做法是,在窗体上放置两个单选钮(rbtn_server、rbtn_local)和两个文本框(edt_Server、edt_database),单选钮用来选择数据库是存放在服务器还是在本地,文本框用来输入服务器名称和数据库名称。若数据库存放在服务器上,则服务器名称文本框激活;若是在本地,则处于失活状态。 至于注册表中具体要写入那些项,可以这样做。先在控制面板ODBC DateSource中配置一个SQL Server数据源,然后在注册表编辑器中利用查找功能查找该数据源,将查找到的主键、键值和数据,在程序中写入注册表即可。这样做好的配置有时会有一些问题,因为SQL Server数据源配置时选择的缺省协议是Named Pipe,而采用Win98对等网连接SQL Server桌面版则需使用TCP/IP协议。如果采用应用程序配置好ODBC数据源后,还需要手工调整连接协议,那就不大合适了。但如何找到该选择项的注册表键值呢?显然采用查找的办法是不行了,这就得用到本文前面所说是比较注册表的方法了。先用控制面板将SQL Server数据源配成Named Pipe协议,导出一个注册表文件reg1.reg,再配成TCP/IP协议,导出另一个注册表文件reg2.reg,用Command /c fc d:\ reg1.reg d:\ reg2.reg > d:\ reg3.txt得到比较结果。从reg3.txt中可以很明显的找到所需要的注册表键值,即: HKEY_LOCAL_MACHINE\ SOFTWARE\microsoft\MSSQLServer\Client\ConnectTo下 "DSQUERY"="DBMSSOCN" "."="DBNMPNTW,\\\\.\\pipe\\sql\\query" 和 "DSQUERY"="DBMSSOCN" "."="DBMSSOCN,.,1433"(本地)或 " servername "="DBMSSOCN,servername,1433"(servername服务器) 说到这里,一个完整的SQL Server ODBC数据源就大功告成了。 附源程序于后: procedure Tfrm_main.btn_ODBCConfClick (Sender: TObject); var RegF: TRegistry; AliasName: string; AliasPara: string; mybuffer : pchar; x: longint; mysyspath: string; myservername: string; myservernameVal: string; begin try //配置ODBC yy为ODBC数据源名称 RegF := TRegistry.Create ; try RegF.RootKey := HKEY_LOCAL_MACHINE; begin RegF.OpenKey('SOFTWARE\ODBC\ODBC.INI\yy',true); RegF.Writestring('AnsiNPW', 'No'); RegF.Writestring('Database', trim(edt_database.text)); RegF.Writestring('Description', '医疗保健信息综合管理系统'); try //得到sqlsrv32.dll路径 mybuffer := allocmem(255); x := GetSystemDirectory(mybuffer, 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', 'Sa'); RegF.Writestring('QuotedId', 'No'); if rbtn_server.Checked = true then begin myservername := trim(edt_server.text); end else begin myservername := '(local)'; end; RegF.Writestring('Server', myservername); RegF.Closekey; RegF.OpenKey('SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources', true); RegF.Writestring('yy', 'SQL Server'); RegF.Closekey; RegF.OpenKey('SOFTWARE\microsoft\MSSQLServer\Client\ConnectTo', true); if rbtn_server.Checked = true then begin myservername := trim(edt_server.text); end else begin myservername := '.'; end; myservernameVal := 'DBMSSOCN,'+myservername+',1433'; RegF.Writestring(myservername, myservernameVal); end; finally RegF.Closekey; RegF.Free ; Application.MessageBox('配置ODBC成功!', '配置ODBC', MB_ICONINFORMATION +MB_OK); end; except Application.MessageBox('配置ODBC不成功!', '配置ODBC', MB_ICONINFORMATION+MB_OK); end; end; UP,aiirii(ari-爱的眼睛)提供的方法不用建数据源,只操作注册表 如何一次性编译bpg idhttp获取简单html页面的乱码问题 郁闷,出去旅游一次,陪了…… 怎样让D7在任务栏显示工程名称? 出現了少見的錯誤. 高手请进呀!!!难又急!!!!!! 高难度问题。关于COM的类厂,关于VC的代码如何在DELPHI中实现(因贴只太长,问题的一部分在回复中) 一个特别奇怪的问题:大家一定要看看! 请问怎样作屏幕保护程序? 请看看我的简单程序,来者有分吆 looking for delphi programmer 报表合计控件使用问题
參考:
http://www.ccw.com.cn/htm/app/aprog/01_3_1_6.asp
注册表(Registry)是一个由 Windows 维护的数据库,保存了有关操作系统、所有 Windows 应用程序、ActiveX 控件、OLE 和可选组件(如ODBC)的配置信息。对Windows程序员来说,注册表算得上一个大宝藏。
注册表可以通过注册表编辑器(开始®运行regedit)进行添加、修改、删除及注册表文件的导入导出等一系列操作。一般的软件都会向注册表中写东西,但要想知道具体内容也不是一件轻而易举的事。以前有人报道过利用命令fc来实现注册表文件的比较。具体方法是首先导出一个注册表文件reg1.reg,当进行一些操作(如装入一个新软件,或修改了某些设置)后再导出另一个注册表文件reg2.reg,在DOS下执行fc d:\ reg1.reg d:\ reg2.reg > d:\ reg3.txt命令,即可从reg3.txt中将注册表的变化轻松暴露出来。该方法比较实用,但美中不足的是在MS—DOS方式下,执行此命令没有问题,但在开始菜单的运行命令中执行此命令时,MS—DOS提示“太多的文件名(FC: too many filenames)”,即在此种情况下,无法将比较结果重定向到文件中。对该命令进行修改,在其前加上command或command.com命令,带参数/c或/k,即为Command /k fc d:\ reg1.reg d:\ reg2.reg > d:\ reg3.txt或Command /c fc d:\ reg1.reg d:\ reg2.reg > d:\ reg3.txt,前一命令表示执行完该命令后保留MS—DOS窗口,等待下一个命令执行,而后一个命令则表示执行完该命令后关闭MS—DOS窗口。采用这种方式的命令会使你更加得心应手,而且可将此方法应用到别的MS—DOS命令上。当然你还可以用API函数WinExec、ShellExecute将其包装起来,便于使用。
利用此种方法可以很容易的得到你想知道的注册表内容,为你的Windows应用助一臂之力,下面举一个实例说明。笔者在开发一套管理信息系统时,以Win98作为开发环境,采用Delphi 5和SQL Server 7桌面版作为开发语言,以ODBC (开放式数据库连接)数据源进行连接。该方式可运行在NT环境,也可跑于Win98对等网中,前者性能稳定,后者价格便宜,具体配置随用户需求而定。
大家知道,ODBC是数据库服务器的一个标准协议,它向访问网络数据库的 Windows 应用程序提供了一种通用的语言。您可以对多种数据库安装 ODBC 驱动程序,用来连接数据库并访问它们的数据。ODBC 驱动程序管理器使用的 ODBC 驱动程序允许访问 SQL 服务器以及其它几个数据源,包括正文文件和 Microsoft Excel 电子数据表。Borland的Delphi是广大程序员钟爱的一种编程语言,它为数据库编程提供了专门的接口BDE(Borland Database Enginge),由于ODBC的广泛应用,Delphi对ODBC数据源也提供了很好的支持。ODBC具有很大的灵活性,作为一个商用系统,不能让用户自己去手工配置ODBC,这对很多人来说,有一定难度。因此系统中附加了一个应用程序,在该程序中直接写注册表来配置ODBC数据源。
具体做法是,在窗体上放置两个单选钮(rbtn_server、rbtn_local)和两个文本框(edt_Server、edt_database),单选钮用来选择数据库是存放在服务器还是在本地,文本框用来输入服务器名称和数据库名称。若数据库存放在服务器上,则服务器名称文本框激活;若是在本地,则处于失活状态。 至于注册表中具体要写入那些项,可以这样做。先在控制面板ODBC DateSource中配置一个SQL Server数据源,然后在注册表编辑器中利用查找功能查找该数据源,将查找到的主键、键值和数据,在程序中写入注册表即可。这样做好的配置有时会有一些问题,因为SQL Server数据源配置时选择的缺省协议是Named Pipe,而采用Win98对等网连接SQL Server桌面版则需使用TCP/IP协议。如果采用应用程序配置好ODBC数据源后,还需要手工调整连接协议,那就不大合适了。但如何找到该选择项的注册表键值呢?显然采用查找的办法是不行了,这就得用到本文前面所说是比较注册表的方法了。先用控制面板将SQL Server数据源配成Named Pipe协议,导出一个注册表文件reg1.reg,再配成TCP/IP协议,导出另一个注册表文件reg2.reg,用Command /c fc d:\ reg1.reg d:\ reg2.reg > d:\ reg3.txt得到比较结果。从reg3.txt中可以很明显的找到所需要的注册表键值,即:
HKEY_LOCAL_MACHINE\ SOFTWARE\microsoft\MSSQLServer\Client\ConnectTo下
"DSQUERY"="DBMSSOCN"
"."="DBNMPNTW,\\\\.\\pipe\\sql\\query"
和
"DSQUERY"="DBMSSOCN"
"."="DBMSSOCN,.,1433"(本地)或
" servername "="DBMSSOCN,servername,1433"(servername服务器)
说到这里,一个完整的SQL Server ODBC数据源就大功告成了。
附源程序于后:
procedure Tfrm_main.btn_ODBCConfClick (Sender: TObject);
var
RegF: TRegistry;
AliasName: string;
AliasPara: string;
mybuffer : pchar;
x: longint;
mysyspath: string;
myservername: string;
myservernameVal: string;
begin
try //配置ODBC yy为ODBC数据源名称
RegF := TRegistry.Create ;
try
RegF.RootKey := HKEY_LOCAL_MACHINE;
begin
RegF.OpenKey('SOFTWARE\ODBC\ODBC.INI\yy',true);
RegF.Writestring('AnsiNPW', 'No');
RegF.Writestring('Database', trim(edt_database.text));
RegF.Writestring('Description', '医疗保健信息综合管理系统');
try //得到sqlsrv32.dll路径
mybuffer := allocmem(255);
x := GetSystemDirectory(mybuffer, 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', 'Sa');
RegF.Writestring('QuotedId', 'No');
if rbtn_server.Checked = true then
begin
myservername := trim(edt_server.text);
end
else
begin
myservername := '(local)';
end;
RegF.Writestring('Server', myservername);
RegF.Closekey;
RegF.OpenKey('SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources', true);
RegF.Writestring('yy', 'SQL Server');
RegF.Closekey;
RegF.OpenKey('SOFTWARE\microsoft\MSSQLServer\Client\ConnectTo', true);
if rbtn_server.Checked = true then
begin
myservername := trim(edt_server.text);
end
else
begin
myservername := '.';
end;
myservernameVal := 'DBMSSOCN,'+myservername+',1433';
RegF.Writestring(myservername, myservernameVal);
end;
finally
RegF.Closekey;
RegF.Free ;
Application.MessageBox('配置ODBC成功!', '配置ODBC', MB_ICONINFORMATION +MB_OK);
end;
except
Application.MessageBox('配置ODBC不成功!', '配置ODBC', MB_ICONINFORMATION+MB_OK);
end;
end;